@kungfu-tech/kfd 1.0.0-alpha.2 → 1.0.0-alpha.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/README.md CHANGED
@@ -122,6 +122,14 @@ TypeScript projects, import it as:
122
122
  import standards from "@kungfu-tech/kfd/standards.json" with { type: "json" };
123
123
  ```
124
124
 
125
+ KFD-3 also publishes a general collaboration-interface schema and witness
126
+ schema under `schemas/kfd-3/`. These schemas are for participant-facing product
127
+ interfaces, not only agent APIs. A product such as Kungfu may implement an
128
+ agent-first profile, but that profile remains a product-specific realization of
129
+ KFD-3. The KFD-owned boundary is the standard vocabulary, schema IDs, and
130
+ closed-world evidence shape. See
131
+ [`docs/kfd-3-collaboration-interface.md`](docs/kfd-3-collaboration-interface.md).
132
+
125
133
  ## Current decisions
126
134
 
127
135
  | ID | Kind | Title | Status |
package/docs/MAP.md CHANGED
@@ -8,6 +8,7 @@
8
8
  | What should a site renderer consume to render `kfd.libkungfu.dev`? | [`../site/kfd-site.json`](../site/kfd-site.json) |
9
9
  | What is the top-level product accountability principle? | [KFD-2](../decisions/kfd-2.md) |
10
10
  | What stance should products take toward humans and agents as reasoning participants? | [KFD-3](../decisions/kfd-3.md) |
11
+ | What schema should products use for KFD-3 participant-facing collaboration interfaces? | [`kfd-3-collaboration-interface.md`](kfd-3-collaboration-interface.md) |
11
12
  | What does a specific decision say? | [`../decisions/`](../decisions) (index: [`../registry.json`](../registry.json)) |
12
13
  | What machine metadata should Buildchain or another consumer import for KFD standard identity and schema IDs? | [`../standards.json`](../standards.json) |
13
14
  | What schema validates the standards metadata surface? | [`../schemas/kfd-standards.schema.json`](../schemas/kfd-standards.schema.json) |
@@ -0,0 +1,59 @@
1
+ # KFD-3 Collaboration Interface
2
+
3
+ KFD-3 is a cooperation standard for intelligent participants. It is not an
4
+ agent-only standard. Products can use it for humans, agents, operators,
5
+ extension authors, API consumers, hosted-service users, service integrators,
6
+ maintainers, and other participants who need to understand value, choices, and
7
+ constraints before cooperating.
8
+
9
+ The KFD-owned schema surface is intentionally general:
10
+
11
+ - `schemas/kfd-3/collaboration-interface.schema.json` declares a product's
12
+ participant-facing collaboration interface.
13
+ - `schemas/kfd-3/witness.schema.json` declares release or build evidence that
14
+ the interface is discoverable, classified, constraint-transparent, and closed
15
+ over reachable participant-facing entrypoints.
16
+
17
+ KFD owns the standard identity, schema IDs, concept names, and compatibility
18
+ rules. Product repositories own their concrete profiles. For example, Kungfu
19
+ may expose an agent-first profile because agents are a first-class participant
20
+ in the current product, but that profile remains a Kungfu implementation of
21
+ KFD-3 rather than the definition of KFD-3 itself.
22
+
23
+ ## Required shape
24
+
25
+ A product collaboration interface should identify:
26
+
27
+ - participant profiles, such as `human`, `agent`, `operator`,
28
+ `extension-author`, or `api-consumer`;
29
+ - minimal entrypoints that let each participant discover the rest of the
30
+ interface;
31
+ - participant-visible surfaces, such as CLI commands, JSON APIs, manuals,
32
+ skills, GUI routes, envelopes, packages, or protocols;
33
+ - visible constraints, including what is restricted, why, and where review or
34
+ escalation happens;
35
+ - choice paths that let participants choose or decline safe cooperation modes;
36
+ - a closure policy for reachable participant-facing entrypoints.
37
+
38
+ The KFD-3 witness schema is intentionally stricter about closure: a passing
39
+ closed-world proof reports reachable entrypoints, classified entrypoints, and
40
+ an empty `unclassifiedEntrypoints` list. This prevents a product from exposing
41
+ a participant-facing or callable backdoor API outside the declared interface.
42
+
43
+ ## Product profile boundary
44
+
45
+ Concrete product profiles may add their own contracts, registry fields, command
46
+ metadata, generated manuals, or audit output. Those fields should reference the
47
+ KFD-3 schema IDs from `standards.json` instead of copying KFD-owned terms.
48
+
49
+ Examples:
50
+
51
+ - A Kungfu agent-first bridge can map local commands, provider skills, command
52
+ metadata, and operating manuals into a KFD-3 collaboration interface.
53
+ - A Buildchain release passport can carry a KFD-3 witness once a downstream
54
+ product can freeze and verify the concrete interface artifact.
55
+ - A hosted surface can use the same standard to show where policy constraints,
56
+ permission gates, and user choices are visible before cooperation is
57
+ requested.
58
+
59
+ This keeps KFD-3 general while making real product interfaces testable.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/kfd",
3
- "version": "1.0.0-alpha.2",
3
+ "version": "1.0.0-alpha.3",
4
4
  "description": "Kung Fu Decisions (KFD): the kungfu-systems organization-wide decision registry, as a consumable artifact",
5
5
  "license": "Apache-2.0",
6
6
  "files": [
@@ -0,0 +1,348 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://kfd.libkungfu.dev/schemas/kfd-3/collaboration-interface.schema.json",
4
+ "title": "KFD-3 collaboration interface",
5
+ "type": "object",
6
+ "required": [
7
+ "schemaVersion",
8
+ "contract",
9
+ "standard",
10
+ "product",
11
+ "sourceRegistry",
12
+ "participants",
13
+ "minimalEntrypoints",
14
+ "surfaces",
15
+ "transparentConstraints",
16
+ "choicePaths",
17
+ "closure"
18
+ ],
19
+ "properties": {
20
+ "schemaVersion": {
21
+ "const": 1
22
+ },
23
+ "contract": {
24
+ "const": "kfd-3-collaboration-interface"
25
+ },
26
+ "standard": {
27
+ "const": "kfd-3"
28
+ },
29
+ "product": {
30
+ "type": "object",
31
+ "required": [
32
+ "name",
33
+ "version"
34
+ ],
35
+ "properties": {
36
+ "name": {
37
+ "type": "string",
38
+ "minLength": 1
39
+ },
40
+ "version": {
41
+ "type": "string",
42
+ "minLength": 1
43
+ },
44
+ "repository": {
45
+ "type": "string",
46
+ "minLength": 1
47
+ }
48
+ },
49
+ "additionalProperties": true
50
+ },
51
+ "sourceRegistry": {
52
+ "$ref": "#/$defs/artifactPointer"
53
+ },
54
+ "participants": {
55
+ "type": "array",
56
+ "minItems": 1,
57
+ "items": {
58
+ "$ref": "#/$defs/participant"
59
+ }
60
+ },
61
+ "minimalEntrypoints": {
62
+ "type": "array",
63
+ "minItems": 1,
64
+ "items": {
65
+ "$ref": "#/$defs/entrypoint"
66
+ }
67
+ },
68
+ "surfaces": {
69
+ "type": "array",
70
+ "minItems": 1,
71
+ "items": {
72
+ "$ref": "#/$defs/surface"
73
+ }
74
+ },
75
+ "transparentConstraints": {
76
+ "type": "array",
77
+ "items": {
78
+ "$ref": "#/$defs/transparentConstraint"
79
+ }
80
+ },
81
+ "choicePaths": {
82
+ "type": "array",
83
+ "items": {
84
+ "$ref": "#/$defs/choicePath"
85
+ }
86
+ },
87
+ "closure": {
88
+ "type": "object",
89
+ "required": [
90
+ "classificationMode",
91
+ "unclassifiedEntrypointsPolicy"
92
+ ],
93
+ "properties": {
94
+ "classificationMode": {
95
+ "enum": [
96
+ "closed-world",
97
+ "declared-open"
98
+ ]
99
+ },
100
+ "unclassifiedEntrypointsPolicy": {
101
+ "enum": [
102
+ "fail",
103
+ "warn",
104
+ "documented-open"
105
+ ]
106
+ },
107
+ "reachableSurfaceSource": {
108
+ "type": "string",
109
+ "minLength": 1
110
+ }
111
+ },
112
+ "additionalProperties": true
113
+ }
114
+ },
115
+ "additionalProperties": true,
116
+ "$defs": {
117
+ "artifactPointer": {
118
+ "type": "object",
119
+ "required": [
120
+ "path"
121
+ ],
122
+ "properties": {
123
+ "path": {
124
+ "type": "string",
125
+ "minLength": 1
126
+ },
127
+ "schemaId": {
128
+ "type": "string",
129
+ "format": "uri"
130
+ },
131
+ "sha256": {
132
+ "type": "string",
133
+ "pattern": "^[0-9a-f]{64}$"
134
+ }
135
+ },
136
+ "additionalProperties": true
137
+ },
138
+ "participant": {
139
+ "type": "object",
140
+ "required": [
141
+ "id",
142
+ "kind",
143
+ "description"
144
+ ],
145
+ "properties": {
146
+ "id": {
147
+ "type": "string",
148
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
149
+ },
150
+ "kind": {
151
+ "enum": [
152
+ "human",
153
+ "agent",
154
+ "operator",
155
+ "extension-author",
156
+ "api-consumer",
157
+ "hosted-service-user",
158
+ "service-integrator",
159
+ "maintainer",
160
+ "other"
161
+ ]
162
+ },
163
+ "description": {
164
+ "type": "string",
165
+ "minLength": 1
166
+ }
167
+ },
168
+ "additionalProperties": true
169
+ },
170
+ "entrypoint": {
171
+ "type": "object",
172
+ "required": [
173
+ "id",
174
+ "surface",
175
+ "participants"
176
+ ],
177
+ "properties": {
178
+ "id": {
179
+ "type": "string",
180
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
181
+ },
182
+ "surface": {
183
+ "type": "string",
184
+ "minLength": 1
185
+ },
186
+ "participants": {
187
+ "type": "array",
188
+ "minItems": 1,
189
+ "items": {
190
+ "type": "string",
191
+ "minLength": 1
192
+ }
193
+ },
194
+ "purpose": {
195
+ "type": "string",
196
+ "minLength": 1
197
+ }
198
+ },
199
+ "additionalProperties": true
200
+ },
201
+ "surface": {
202
+ "type": "object",
203
+ "required": [
204
+ "id",
205
+ "kind",
206
+ "participants",
207
+ "value",
208
+ "discoverability"
209
+ ],
210
+ "properties": {
211
+ "id": {
212
+ "type": "string",
213
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
214
+ },
215
+ "kind": {
216
+ "enum": [
217
+ "cli-command",
218
+ "json-api",
219
+ "markdown-doc",
220
+ "skill",
221
+ "gui",
222
+ "web",
223
+ "config",
224
+ "envelope",
225
+ "package",
226
+ "protocol",
227
+ "other"
228
+ ]
229
+ },
230
+ "participants": {
231
+ "type": "array",
232
+ "minItems": 1,
233
+ "items": {
234
+ "type": "string",
235
+ "minLength": 1
236
+ }
237
+ },
238
+ "value": {
239
+ "type": "string",
240
+ "minLength": 1
241
+ },
242
+ "discoverability": {
243
+ "type": "object",
244
+ "required": [
245
+ "fromMinimalEntrypoint"
246
+ ],
247
+ "properties": {
248
+ "fromMinimalEntrypoint": {
249
+ "type": "boolean"
250
+ },
251
+ "path": {
252
+ "type": "string",
253
+ "minLength": 1
254
+ }
255
+ },
256
+ "additionalProperties": true
257
+ },
258
+ "maturity": {
259
+ "type": "string",
260
+ "minLength": 1
261
+ }
262
+ },
263
+ "additionalProperties": true
264
+ },
265
+ "transparentConstraint": {
266
+ "type": "object",
267
+ "required": [
268
+ "id",
269
+ "appliesTo",
270
+ "restriction",
271
+ "rationale",
272
+ "reviewPath"
273
+ ],
274
+ "properties": {
275
+ "id": {
276
+ "type": "string",
277
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
278
+ },
279
+ "appliesTo": {
280
+ "type": "array",
281
+ "minItems": 1,
282
+ "items": {
283
+ "type": "string",
284
+ "minLength": 1
285
+ }
286
+ },
287
+ "restriction": {
288
+ "type": "string",
289
+ "minLength": 1
290
+ },
291
+ "rationale": {
292
+ "type": "string",
293
+ "minLength": 1
294
+ },
295
+ "reviewPath": {
296
+ "type": "string",
297
+ "minLength": 1
298
+ }
299
+ },
300
+ "additionalProperties": true
301
+ },
302
+ "choicePath": {
303
+ "type": "object",
304
+ "required": [
305
+ "id",
306
+ "participants",
307
+ "choices"
308
+ ],
309
+ "properties": {
310
+ "id": {
311
+ "type": "string",
312
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
313
+ },
314
+ "participants": {
315
+ "type": "array",
316
+ "minItems": 1,
317
+ "items": {
318
+ "type": "string",
319
+ "minLength": 1
320
+ }
321
+ },
322
+ "choices": {
323
+ "type": "array",
324
+ "minItems": 1,
325
+ "items": {
326
+ "type": "object",
327
+ "required": [
328
+ "id",
329
+ "label"
330
+ ],
331
+ "properties": {
332
+ "id": {
333
+ "type": "string",
334
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
335
+ },
336
+ "label": {
337
+ "type": "string",
338
+ "minLength": 1
339
+ }
340
+ },
341
+ "additionalProperties": true
342
+ }
343
+ }
344
+ },
345
+ "additionalProperties": true
346
+ }
347
+ }
348
+ }
@@ -0,0 +1,153 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://kfd.libkungfu.dev/schemas/kfd-3/witness.schema.json",
4
+ "title": "KFD-3 witness",
5
+ "type": "object",
6
+ "required": [
7
+ "schemaVersion",
8
+ "contract",
9
+ "standard",
10
+ "collaborationInterface",
11
+ "sourceRegistry",
12
+ "evidence",
13
+ "closure"
14
+ ],
15
+ "properties": {
16
+ "schemaVersion": {
17
+ "const": 1
18
+ },
19
+ "contract": {
20
+ "const": "kfd-3-witness"
21
+ },
22
+ "standard": {
23
+ "const": "kfd-3"
24
+ },
25
+ "collaborationInterface": {
26
+ "type": "object",
27
+ "required": [
28
+ "schemaId",
29
+ "digest"
30
+ ],
31
+ "properties": {
32
+ "schemaId": {
33
+ "const": "https://kfd.libkungfu.dev/schemas/kfd-3/collaboration-interface.schema.json"
34
+ },
35
+ "digest": {
36
+ "type": "string",
37
+ "minLength": 1
38
+ }
39
+ },
40
+ "additionalProperties": false
41
+ },
42
+ "sourceRegistry": {
43
+ "$ref": "#/$defs/artifactPointer"
44
+ },
45
+ "evidence": {
46
+ "type": "object",
47
+ "required": [
48
+ "minimalEntrypoints",
49
+ "discoverability",
50
+ "transparentConstraints",
51
+ "choicePaths"
52
+ ],
53
+ "properties": {
54
+ "minimalEntrypoints": {
55
+ "type": "array",
56
+ "minItems": 1,
57
+ "items": {
58
+ "$ref": "#/$defs/artifactPointer"
59
+ }
60
+ },
61
+ "discoverability": {
62
+ "type": "array",
63
+ "items": {
64
+ "$ref": "#/$defs/artifactPointer"
65
+ }
66
+ },
67
+ "transparentConstraints": {
68
+ "type": "array",
69
+ "items": {
70
+ "$ref": "#/$defs/artifactPointer"
71
+ }
72
+ },
73
+ "choicePaths": {
74
+ "type": "array",
75
+ "items": {
76
+ "$ref": "#/$defs/artifactPointer"
77
+ }
78
+ },
79
+ "manuals": {
80
+ "type": "array",
81
+ "items": {
82
+ "$ref": "#/$defs/artifactPointer"
83
+ }
84
+ }
85
+ },
86
+ "additionalProperties": true
87
+ },
88
+ "closure": {
89
+ "type": "object",
90
+ "required": [
91
+ "classificationMode",
92
+ "reachableEntrypoints",
93
+ "classifiedEntrypoints",
94
+ "unclassifiedEntrypoints"
95
+ ],
96
+ "properties": {
97
+ "classificationMode": {
98
+ "const": "closed-world"
99
+ },
100
+ "reachableEntrypoints": {
101
+ "type": "array",
102
+ "items": {
103
+ "type": "string",
104
+ "minLength": 1
105
+ }
106
+ },
107
+ "classifiedEntrypoints": {
108
+ "type": "array",
109
+ "items": {
110
+ "type": "string",
111
+ "minLength": 1
112
+ }
113
+ },
114
+ "unclassifiedEntrypoints": {
115
+ "type": "array",
116
+ "maxItems": 0
117
+ }
118
+ },
119
+ "additionalProperties": true
120
+ },
121
+ "result": {
122
+ "enum": [
123
+ "pass",
124
+ "fail",
125
+ "warning"
126
+ ]
127
+ }
128
+ },
129
+ "additionalProperties": true,
130
+ "$defs": {
131
+ "artifactPointer": {
132
+ "type": "object",
133
+ "required": [
134
+ "path"
135
+ ],
136
+ "properties": {
137
+ "path": {
138
+ "type": "string",
139
+ "minLength": 1
140
+ },
141
+ "sha256": {
142
+ "type": "string",
143
+ "pattern": "^[0-9a-f]{64}$"
144
+ },
145
+ "description": {
146
+ "type": "string",
147
+ "minLength": 1
148
+ }
149
+ },
150
+ "additionalProperties": true
151
+ }
152
+ }
153
+ }
package/standards.json CHANGED
@@ -102,16 +102,26 @@
102
102
  "rule": "Substantive semantic changes mint a new KFD; compatible metadata additions keep schemaVersion 1."
103
103
  },
104
104
  "schemaIds": {
105
- "metadata": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json"
105
+ "metadata": "https://kfd.libkungfu.dev/schemas/kfd-standards.schema.json",
106
+ "collaborationInterface": "https://kfd.libkungfu.dev/schemas/kfd-3/collaboration-interface.schema.json",
107
+ "witness": "https://kfd.libkungfu.dev/schemas/kfd-3/witness.schema.json"
106
108
  },
107
109
  "schemaPaths": {
108
- "metadata": "schemas/kfd-standards.schema.json"
110
+ "metadata": "schemas/kfd-standards.schema.json",
111
+ "collaborationInterface": "schemas/kfd-3/collaboration-interface.schema.json",
112
+ "witness": "schemas/kfd-3/witness.schema.json"
109
113
  },
110
114
  "concepts": {
111
115
  "transparentValue": "transparent value",
112
116
  "stableChoice": "stable choice",
113
117
  "explainableConstraints": "explainable constraints",
114
- "nonCoercion": "non-coercive cooperation"
118
+ "nonCoercion": "non-coercive cooperation",
119
+ "participant": "participant",
120
+ "collaborationInterface": "collaboration interface",
121
+ "minimalEntrypoint": "minimal entrypoint",
122
+ "discoverability": "discoverability",
123
+ "closure": "closed-world interface classification",
124
+ "choicePath": "choice path"
115
125
  }
116
126
  }
117
127
  }