git-a2a 1.0.1 → 1.1.0-rc.2

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.
@@ -0,0 +1,944 @@
1
+ <!-- Code generated by tools/gen-reference.py; DO NOT EDIT. -->
2
+ # Manifest field reference
3
+
4
+ This reference is generated from the compiled normative `spec/_.hint` and
5
+ `spec/schema/a2amodule.schema.json`. Run `make docs-check` to detect drift.
6
+ Paths use `[]` for one array entry. Unknown `x-*` extension keys are allowed at every
7
+ declared object boundary and are preserved; other unknown keys are validation errors.
8
+
9
+ ## `schema`
10
+
11
+ - Type: integer; required.
12
+ - Default: exactly `1`.
13
+ - Allowed values: exact value `1`.
14
+ - Normative source: [`spec/_.hint:100`](../spec/_.hint#L100).
15
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
16
+
17
+ Behavior and consequence:
18
+
19
+ integer; the format version of this file. Value `1` for this specification. A consumer that
20
+ sees a larger value than it knows must refuse the file (exit 2), not guess.
21
+
22
+ ## `module`
23
+
24
+ - Type: object; required.
25
+ - Default: none declared.
26
+ - Allowed values: schema type plus the normative behavior in this entry.
27
+ - Normative source: [`spec/_.hint:105`](../spec/_.hint#L105).
28
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
29
+
30
+ Behavior and consequence:
31
+
32
+ object; the module description. See [#module](../spec/_.hint).
33
+
34
+ ## `agents`
35
+
36
+ - Type: array of object; optional.
37
+ - Default: none declared.
38
+ - Allowed values: schema type plus the normative behavior in this entry.
39
+ - Normative source: [`spec/_.hint:109`](../spec/_.hint#L109).
40
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
41
+
42
+ Behavior and consequence:
43
+
44
+ list of agent bindings, see [#agent](../spec/_.hint). Empty or absent means "no agent owns this; treat
45
+ as a plain library" — still importable, nobody to ask.
46
+
47
+ ## `policy`
48
+
49
+ - Type: object; optional.
50
+ - Default: none declared.
51
+ - Allowed values: schema type plus the normative behavior in this entry.
52
+ - Normative source: [`spec/_.hint:114`](../spec/_.hint#L114).
53
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
54
+
55
+ Behavior and consequence:
56
+
57
+ object, see [#policy](../spec/_.hint). Routing defaults and consumer permissions.
58
+
59
+ ## `dependencies`
60
+
61
+ - Type: array of object; optional.
62
+ - Default: none declared.
63
+ - Allowed values: schema type plus the normative behavior in this entry.
64
+ - Normative source: [`spec/_.hint:118`](../spec/_.hint#L118).
65
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
66
+
67
+ Behavior and consequence:
68
+
69
+ list, see [#dependency](../spec/_.hint). Modules this module depends on.
70
+
71
+ ## `module.id`
72
+
73
+ - Type: string; required.
74
+ - Default: none declared.
75
+ - Allowed values: pattern `^[a-z0-9][a-z0-9._-]{0,63}$`.
76
+ - Normative source: [`spec/_.hint:124`](../spec/_.hint#L124).
77
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
78
+
79
+ Behavior and consequence:
80
+
81
+ string, required. Stable identifier, `^[a-z0-9][a-z0-9._-]{0,63}$`. Consumers refer to the
82
+ dependency by this id and the lock keys on it; `add` verifies that the fetched manifest's `id`
83
+ equals the id the consumer expected (when given) and otherwise adopts it. Renaming an id is a
84
+ breaking change for every consumer.
85
+
86
+ ## `module.name`
87
+
88
+ - Type: string; optional.
89
+ - Default: `module.id`.
90
+ - Allowed values: schema type plus the normative behavior in this entry.
91
+ - Normative source: [`spec/_.hint:131`](../spec/_.hint#L131).
92
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
93
+
94
+ Behavior and consequence:
95
+
96
+ string. Display name. Defaults to `id`.
97
+
98
+ ## `module.description`
99
+
100
+ - Type: string; optional.
101
+ - Default: none declared.
102
+ - Allowed values: schema type plus the normative behavior in this entry.
103
+ - Normative source: [`spec/_.hint:135`](../spec/_.hint#L135).
104
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
105
+
106
+ Behavior and consequence:
107
+
108
+ string, recommended. One paragraph answering "what is this and what is it for" — it is what a
109
+ consumer's agent reads in its roster, so it should also say what kind of questions the owner
110
+ expects. Whitespace is normalised when rendered.
111
+
112
+ ## `module.languages`
113
+
114
+ - Type: array of string; optional.
115
+ - Default: none declared.
116
+ - Allowed values: open vocabulary; see the known-values table in this entry.
117
+ - Normative source: [`spec/_.hint:141`](../spec/_.hint#L141).
118
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
119
+
120
+ Behavior and consequence:
121
+
122
+ list of strings, open vocabulary and informative. Known tokens and their behavior are in
123
+ `vocabulary_languages`. Not used for wiring; `exports` is. Changing it changes discovery metadata
124
+ only; unknown values are accepted and preserved.
125
+
126
+ Known values:
127
+
128
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
129
+ | --- | --- | --- | --- |
130
+ | `typescript` | Reports TypeScript as module metadata. | Changes discovery/documentation only; wiring still follows exports. | Accepted and preserved as informative metadata. |
131
+ | `python` | Reports Python as module metadata. | Changes discovery/documentation only; wiring still follows exports. | Accepted and preserved as informative metadata. |
132
+ | `go` | Reports Go as module metadata. | Changes discovery/documentation only; wiring still follows exports. | Accepted and preserved as informative metadata. |
133
+ | `rust`, `swift`, `dart`, `ruby`, `php`, `elixir`, `haskell`, `zig`, `clojure`, `nix` | Reports the declared language as module metadata. | Changes discovery/documentation only; wiring still follows exports. | Accepted and preserved as informative metadata. |
134
+
135
+ ## `module.surface`
136
+
137
+ - Type: string; optional.
138
+ - Default: none declared.
139
+ - Allowed values: minimum length 1.
140
+ - Normative source: [`spec/_.hint:147`](../spec/_.hint#L147).
141
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
142
+
143
+ Behavior and consequence:
144
+
145
+ string; relative directory path. Published content for consumers. Absent means nothing is
146
+ published beyond the manifest.
147
+
148
+ ## `module.repository`
149
+
150
+ - Type: string; optional.
151
+ - Default: none declared.
152
+ - Allowed values: schema type plus the normative behavior in this entry.
153
+ - Normative source: [`spec/_.hint:152`](../spec/_.hint#L152).
154
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
155
+
156
+ Behavior and consequence:
157
+
158
+ string; the canonical git URL of this module as its owner declares it. Lets a consumer that
159
+ obtained the module from elsewhere (a fork, a mirror, a copy) see that it is not on the
160
+ canonical source — and that the `agents` listed may belong to the original owner rather than
161
+ to whoever maintains the copy. Informative; never used to fetch.
162
+
163
+ ## `module.moved-to`
164
+
165
+ - Type: object; optional.
166
+ - Default: none declared.
167
+ - Allowed values: schema type plus the normative behavior in this entry.
168
+ - Normative source: [`spec/_.hint:159`](../spec/_.hint#L159).
169
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
170
+
171
+ Behavior and consequence:
172
+
173
+ object, optional: `git` (string, required; the new canonical URL), `path` (string), `notes`
174
+ (string). An owner leaves it in the last manifest at the old location when the module moves.
175
+ Consumers are told on `update` and follow it only on explicit request; a tool never switches a
176
+ source silently.
177
+
178
+ ## `module.docs`
179
+
180
+ - Type: string; optional.
181
+ - Default: none declared.
182
+ - Allowed values: schema type plus the normative behavior in this entry.
183
+ - Normative source: [`spec/_.hint:166`](../spec/_.hint#L166).
184
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
185
+
186
+ Behavior and consequence:
187
+
188
+ string; URL of human documentation.
189
+
190
+ ## `module.release`
191
+
192
+ - Type: object; optional.
193
+ - Default: none declared.
194
+ - Allowed values: schema type plus the normative behavior in this entry.
195
+ - Normative source: [`spec/_.hint:170`](../spec/_.hint#L170).
196
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
197
+
198
+ Behavior and consequence:
199
+
200
+ object: `channel` (string, the ref consumers should follow by default, e.g. `main`), `tags`
201
+ (boolean, whether semver tags are published), `notes` (string, free text, e.g. "main is the only
202
+ release channel"). `release.channel` is the default `ref` a consumer gets when it adds this
203
+ module without naming one.
204
+
205
+ ## `module.exports`
206
+
207
+ - Type: array of object; optional.
208
+ - Default: none declared.
209
+ - Allowed values: schema type plus the normative behavior in this entry.
210
+ - Normative source: [`spec/_.hint:177`](../spec/_.hint#L177).
211
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
212
+
213
+ Behavior and consequence:
214
+
215
+ list of export entries; how to import this module per ecosystem. Each entry: `ecosystem`
216
+ (string, required; use package-url type names: `npm`, `pypi`, `golang`, `cargo`, `maven`,
217
+ `nuget`, `swift`, `cocoapods`, `pub`, `gem`, `composer`, `hex`, `hackage`, …), `name` (string,
218
+ required; the name the ecosystem imports: npm package name, PEP 503 distribution name, Go module
219
+ path, crate name, Maven `group:artifact`), `path` (string, optional; subdirectory containing the
220
+ ecosystem's own manifest, default the module directory), `notes` (string, optional; anything a
221
+ wiring tool or agent must know, e.g. "vanity import path, needs replace", "prepare script builds
222
+ dist"). Ecosystem-specific keys are allowed under `x-<ecosystem>-*`.
223
+
224
+ ## `module.moved-to.git`
225
+
226
+ - Type: string; required.
227
+ - Default: none declared.
228
+ - Allowed values: schema type plus the normative behavior in this entry.
229
+ - Normative source: [`spec/_.hint:193`](../spec/_.hint#L193).
230
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
231
+
232
+ Behavior and consequence:
233
+
234
+ string, required. New canonical Git URL. Changing it changes the destination offered to users;
235
+ consumers remain on the current source until an explicit `set --git`.
236
+
237
+ ## `module.moved-to.path`
238
+
239
+ - Type: string; optional.
240
+ - Default: `.`.
241
+ - Allowed values: minimum length 1.
242
+ - Normative source: [`spec/_.hint:198`](../spec/_.hint#L198).
243
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
244
+
245
+ Behavior and consequence:
246
+
247
+ string, optional relative path, default `.`. Subdirectory containing the moved module. Changing
248
+ it changes the destination module root offered with the new Git URL.
249
+
250
+ ## `module.moved-to.notes`
251
+
252
+ - Type: string; optional.
253
+ - Default: none declared.
254
+ - Allowed values: schema type plus the normative behavior in this entry.
255
+ - Normative source: [`spec/_.hint:203`](../spec/_.hint#L203).
256
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
257
+
258
+ Behavior and consequence:
259
+
260
+ string, optional. Human migration context printed with the move notice. Changing it changes only
261
+ the guidance, never the source automatically.
262
+
263
+ ## `module.release.channel`
264
+
265
+ - Type: string; optional.
266
+ - Default: none declared.
267
+ - Allowed values: schema type plus the normative behavior in this entry.
268
+ - Normative source: [`spec/_.hint:212`](../spec/_.hint#L212).
269
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
270
+
271
+ Behavior and consequence:
272
+
273
+ string, optional. Default ref used by `add` when the consumer supplies no ref, commonly `main`.
274
+ Changing it affects future adds; existing consumers retain their declared ref until `set`.
275
+
276
+ ## `module.release.tags`
277
+
278
+ - Type: boolean; optional.
279
+ - Default: `false`.
280
+ - Allowed values: schema type plus the normative behavior in this entry.
281
+ - Normative source: [`spec/_.hint:217`](../spec/_.hint#L217).
282
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
283
+
284
+ Behavior and consequence:
285
+
286
+ boolean, optional, default `false`. Declares whether the owner publishes semantic-version tags.
287
+ Changing it changes what consumers may reasonably select with `set --ref`; it does not create tags.
288
+
289
+ ## `module.release.notes`
290
+
291
+ - Type: string; optional.
292
+ - Default: none declared.
293
+ - Allowed values: schema type plus the normative behavior in this entry.
294
+ - Normative source: [`spec/_.hint:222`](../spec/_.hint#L222).
295
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
296
+
297
+ Behavior and consequence:
298
+
299
+ string, optional. Free release-channel guidance shown to consumers. Changing it changes guidance
300
+ only and does not resolve or move a dependency.
301
+
302
+ ## `module.exports[].ecosystem`
303
+
304
+ - Type: string; required.
305
+ - Default: none declared.
306
+ - Allowed values: minimum length 1; open vocabulary; see the known-values table in this entry.
307
+ - Normative source: [`spec/_.hint:231`](../spec/_.hint#L231).
308
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
309
+
310
+ Behavior and consequence:
311
+
312
+ string, required, open vocabulary. Known values and adapter behavior are in
313
+ `vocabulary_ecosystems`. Changing it selects a different adapter and therefore a different native
314
+ manifest; an unknown value remains valid published metadata but has no wiring adapter.
315
+
316
+ Known values:
317
+
318
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
319
+ | --- | --- | --- | --- |
320
+ | `npm` | Wires a Git dependency in package.json through npm/yarn/pnpm/bun. | Selects the JavaScript package name and adapter. | Accepted; without an adapter it remains published metadata and cannot be wired. |
321
+ | `pypi` | Wires a Git dependency in pyproject.toml through uv. | Selects the Python distribution name and adapter. | Accepted; without an adapter it remains published metadata and cannot be wired. |
322
+ | `golang` | Wires the Go module at the locked commit with go.mod edits. | Selects the Go import path and adapter. | Accepted; without an adapter it remains published metadata and cannot be wired. |
323
+ | `cargo`, `swift`, `pub`, `gem`, `composer`, `hex`, `hackage`, `zig`, `clojure`, `nix` | Uses the matching native Git-dependency adapter. | Selects a different native manifest and package identity. | Accepted; without an adapter it remains published metadata and cannot be wired. |
324
+
325
+ ## `module.exports[].name`
326
+
327
+ - Type: string; required.
328
+ - Default: none declared.
329
+ - Allowed values: minimum length 1.
330
+ - Normative source: [`spec/_.hint:237`](../spec/_.hint#L237).
331
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
332
+
333
+ Behavior and consequence:
334
+
335
+ string, required. Native package/import name in the named ecosystem. Changing it rewires the
336
+ consumer from the old native entry to the new one on the next mutation or `wire`.
337
+
338
+ ## `module.exports[].path`
339
+
340
+ - Type: string; optional.
341
+ - Default: the module directory (`.`).
342
+ - Allowed values: minimum length 1.
343
+ - Normative source: [`spec/_.hint:242`](../spec/_.hint#L242).
344
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
345
+
346
+ Behavior and consequence:
347
+
348
+ string, optional relative path, default `.`. Subdirectory containing the ecosystem package.
349
+ Changing it changes the Git subdirectory expression; unsupported adapters report `not wired`.
350
+
351
+ ## `module.exports[].notes`
352
+
353
+ - Type: string; optional.
354
+ - Default: none declared.
355
+ - Allowed values: schema type plus the normative behavior in this entry.
356
+ - Normative source: [`spec/_.hint:247`](../spec/_.hint#L247).
357
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
358
+
359
+ Behavior and consequence:
360
+
361
+ string, optional. Export-specific facts shown to tools and agents. Changing it changes published
362
+ guidance but does not itself alter adapter behavior.
363
+
364
+ ## `agents[].name`
365
+
366
+ - Type: string; required.
367
+ - Default: none declared.
368
+ - Allowed values: minimum length 1.
369
+ - Normative source: [`spec/_.hint:256`](../spec/_.hint#L256).
370
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
371
+
372
+ Behavior and consequence:
373
+
374
+ string, required. The agent's own name — must equal `name` in its A2A card when a card is given.
375
+ An agent may appear in many modules (one agent, many repositories) and a module may list many
376
+ agents (one repository, many agents), so `name` must be stable across repositories. Identity
377
+ for de-duplication across modules is the `card` URL when present, else `name`; two bindings in
378
+ different modules with the same card URL are the same agent, and tools may merge what they know
379
+ about it. Names are scoped to whoever controls the card URL, so a public ecosystem never relies
380
+ on a bare name being globally unique.
381
+
382
+ ## `agents[].role`
383
+
384
+ - Type: string; required.
385
+ - Default: none declared.
386
+ - Allowed values: minimum length 1; open vocabulary; see the known-values table in this entry.
387
+ - Normative source: [`spec/_.hint:266`](../spec/_.hint#L266).
388
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
389
+
390
+ Behavior and consequence:
391
+
392
+ string, required, open vocabulary. A role says what the agent owns for this module; core values
393
+ and routing consequences are in `vocabulary_roles`. Unknown roles are accepted and participate in
394
+ routing when `policy.intents` names the same token.
395
+
396
+ Known values:
397
+
398
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
399
+ | --- | --- | --- | --- |
400
+ | `owner` | Default routing target; identifies the agent that commits, merges, and releases. | Requests using the default route select a different binding. | Accepted and routed when policy names the same token. |
401
+ | `maintainer` | Routes intents mapped to a maintainer. | Changes which bindings match those intents. | Accepted and routed when policy names the same token. |
402
+ | `spec` | Routes specification, task, or sequencing ownership. | Changes which bindings match policy entries such as `change: spec`. | Accepted and routed when policy names the same token. |
403
+ | `reviewer` | Routes review ownership. | Changes which bindings match review policy. | Accepted and routed when policy names the same token. |
404
+ | `support` | Routes support ownership. | Changes which bindings match support policy. | Accepted and routed when policy names the same token. |
405
+
406
+ ## `agents[].scope`
407
+
408
+ - Type: array of string; optional.
409
+ - Default: `["**"]`.
410
+ - Allowed values: schema type plus the normative behavior in this entry.
411
+ - Normative source: [`spec/_.hint:272`](../spec/_.hint#L272).
412
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
413
+
414
+ Behavior and consequence:
415
+
416
+ list of glob patterns relative to the module directory. What this agent answers for and may
417
+ change. Default `["**"]`. Two agents may overlap; resolution prefers the more specific match,
418
+ then declared order.
419
+
420
+ ## `agents[].card`
421
+
422
+ - Type: string; optional.
423
+ - Default: none declared.
424
+ - Allowed values: minimum length 1.
425
+ - Normative source: [`spec/_.hint:278`](../spec/_.hint#L278).
426
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
427
+
428
+ Behavior and consequence:
429
+
430
+ string. URL of the agent's A2A Agent Card (`https://…/.well-known/agent-card.json`) or a
431
+ repository-relative path to a card file (A2A "direct configuration"). When present the card is
432
+ the authority for `description`, `skills`, interfaces and security; git-a2a snapshots it.
433
+
434
+ ## `agents[].description`
435
+
436
+ - Type: string; optional.
437
+ - Default: none declared.
438
+ - Allowed values: schema type plus the normative behavior in this entry.
439
+ - Normative source: [`spec/_.hint:284`](../spec/_.hint#L284).
440
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
441
+
442
+ Behavior and consequence:
443
+
444
+ string. Only when no card is available or to add module-specific wording ("for this repository,
445
+ ask it about …"). Never a copy of the card's description.
446
+
447
+ ## `agents[].contacts`
448
+
449
+ - Type: array of object; optional.
450
+ - Default: none declared.
451
+ - Allowed values: open vocabulary; see the known-values table in this entry.
452
+ - Normative source: [`spec/_.hint:289`](../spec/_.hint#L289).
453
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
454
+
455
+ Behavior and consequence:
456
+
457
+ ordered list. Each contact: `intents` (list of strings, required; `"*"` allowed), `kind`
458
+ (string, required; open vocabulary, see [#contact\_kinds](../spec/_.hint)), `note` (string,
459
+ optional; free-text instructions shown verbatim to the asker, e.g. "state the version you are
460
+ on"), plus kind-specific keys. Order expresses preference within an intent.
461
+
462
+ ## `agents[].trust`
463
+
464
+ - Type: object; optional.
465
+ - Default: none declared.
466
+ - Allowed values: schema type plus the normative behavior in this entry.
467
+ - Normative source: [`spec/_.hint:296`](../spec/_.hint#L296).
468
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
469
+
470
+ Behavior and consequence:
471
+
472
+ object, optional: `signatures` (boolean, whether the card is JWS-signed and must verify),
473
+ `accepts-external` (boolean, whether requests from agents outside the owner's organisation are
474
+ welcome), `x-*`. Defaults: no verification required, external not stated.
475
+
476
+ When `signatures: true`, at least one A2A Agent Card detached JWS signature must verify over the
477
+ RFC 8785 canonical card with the top-level `signatures` member excluded. The protected header
478
+ identifies the algorithm, key id, and JWKS URL. An unsigned card, an invalid signature, or an
479
+ unavailable key with no local cache makes `status` fail; `update` retains the dependency update
480
+ but prints a trust warning. JWKS responses are timeout-bounded and cached only in `.git-a2a/`.
481
+
482
+ ## `agents[].contacts[].intents`
483
+
484
+ - Type: array of string; required.
485
+ - Default: none declared.
486
+ - Allowed values: minimum 1 item(s); open vocabulary; see the known-values table in this entry.
487
+ - Normative source: [`spec/_.hint:313`](../spec/_.hint#L313).
488
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
489
+
490
+ Behavior and consequence:
491
+
492
+ list of strings, required and non-empty, open vocabulary; `"*"` is the fallback. Changing the
493
+ list changes which requests may select this contact. Core values, fallback behavior, and unknown
494
+ handling are in `vocabulary_intents`.
495
+
496
+ Known values:
497
+
498
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
499
+ | --- | --- | --- | --- |
500
+ | `question` | Routes a request for explanation; defaults to role `owner`. | Selects contacts declaring `question` or `*`. | Accepted; policy and contacts can route any matching token. |
501
+ | `change` | Routes a proposed behavior/API change. | Selects contacts declaring `change` or `*`. | Accepted; policy and contacts can route any matching token. |
502
+ | `bug` | Routes a defect report. | Selects contacts declaring `bug` or `*`. | Accepted; policy and contacts can route any matching token. |
503
+ | `review` | Routes a review request. | Selects contacts declaring `review` or `*`. | Accepted; policy and contacts can route any matching token. |
504
+ | `incident` | Routes an operational incident. | Selects contacts declaring `incident` or `*`. | Accepted; policy and contacts can route any matching token. |
505
+ | `*` | Acts as a contact fallback after exact intent matches. | Broadens that contact to unmatched intents. | Accepted; any other unknown token is an exact-match intent. |
506
+
507
+ ## `agents[].contacts[].kind`
508
+
509
+ - Type: string; required.
510
+ - Default: none declared.
511
+ - Allowed values: minimum length 1; open vocabulary; see the known-values table in this entry.
512
+ - Normative source: [`spec/_.hint:319`](../spec/_.hint#L319).
513
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
514
+
515
+ Behavior and consequence:
516
+
517
+ string, required, open vocabulary. Changing it selects another delivery driver or instruction
518
+ renderer and changes which kind-specific fields are valid. Known values and unknown handling are
519
+ in `contact_kinds`.
520
+
521
+ Known values:
522
+
523
+ The kind vocabulary is open; these kinds have defined keys and delivery behavior:
524
+
525
+ | Kind | Allowed kind-specific keys | Driver or instruction | Consequence of changing it | Unknown kind |
526
+ | --- | --- | --- | --- | --- |
527
+ | `a2a` | `url`, optional `skill` | Sends A2A `SendMessage` JSON-RPC 1.0; the only kind derivable from a card. | Changes the JSON-RPC endpoint or target skill. | Accepted, but no delivery driver is selected. |
528
+ | `github-issue` | `repo`, optional `labels`, `template` | Creates an issue through `gh`, then GitHub REST fallback. | Changes the repository, labels, or issue template. | Accepted, but no delivery driver is selected. |
529
+ | `gitlab-issue` | `repo`, optional `labels`, `template` | Prints an instruction; no reference delivery driver. | Changes the instructed issue destination. | Accepted, but no delivery driver is selected. |
530
+ | `email` | `address`, optional `subject-prefix` | Prints an email instruction; does not send mail. | Changes the instructed recipient or subject. | Accepted, but no delivery driver is selected. |
531
+ | `jira` | `url`, `project`, optional `issue-type` | Prints a Jira instruction. | Changes the instructed site, project, or issue type. | Accepted, but no delivery driver is selected. |
532
+ | `mattermost`, `slack`, `discord`, `telegram`, `teams` | `channel`, `handle`, optional `server` | Prints a chat instruction. | Changes the instructed workspace, channel, or handle. | Accepted, but no delivery driver is selected. |
533
+ | `url` | `url`, optional `note` | Prints the URL instruction. | Changes the instructed destination. | Accepted, but no delivery driver is selected. |
534
+
535
+ An unknown kind is rendered as `kind: <value>` with its extension keys, is never a validation
536
+ error, and cannot be delivered by `contact` until a driver exists.
537
+
538
+ ## `agents[].contacts[].note`
539
+
540
+ - Type: string; optional.
541
+ - Default: none declared.
542
+ - Allowed values: schema type plus the normative behavior in this entry.
543
+ - Normative source: [`spec/_.hint:325`](../spec/_.hint#L325).
544
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
545
+
546
+ Behavior and consequence:
547
+
548
+ string, optional. Instructions printed verbatim after the route. Changing it changes the asker's
549
+ guidance, not routing priority or delivery mechanics.
550
+
551
+ ## `agents[].contacts[].url`
552
+
553
+ - Type: string; optional.
554
+ - Default: none declared.
555
+ - Allowed values: schema type plus the normative behavior in this entry.
556
+ - Normative source: [`spec/_.hint:330`](../spec/_.hint#L330).
557
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
558
+
559
+ Behavior and consequence:
560
+
561
+ string, optional for `a2a`, `jira`, and `url`. Changing it changes the service or instruction
562
+ destination; for A2A it is the JSON-RPC endpoint.
563
+
564
+ ## `agents[].contacts[].skill`
565
+
566
+ - Type: string; optional.
567
+ - Default: none declared.
568
+ - Allowed values: schema type plus the normative behavior in this entry.
569
+ - Normative source: [`spec/_.hint:335`](../spec/_.hint#L335).
570
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
571
+
572
+ Behavior and consequence:
573
+
574
+ string, optional for `a2a`. Skill identifier requested from the remote agent. Changing it changes
575
+ the A2A target skill without changing the endpoint.
576
+
577
+ ## `agents[].contacts[].address`
578
+
579
+ - Type: string; optional.
580
+ - Default: none declared.
581
+ - Allowed values: schema type plus the normative behavior in this entry.
582
+ - Normative source: [`spec/_.hint:340`](../spec/_.hint#L340).
583
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
584
+
585
+ Behavior and consequence:
586
+
587
+ string, optional for `email`. Destination email address. Changing it changes the printed email
588
+ instruction; the reference CLI does not send email.
589
+
590
+ ## `agents[].contacts[].subject-prefix`
591
+
592
+ - Type: string; optional.
593
+ - Default: none declared.
594
+ - Allowed values: schema type plus the normative behavior in this entry.
595
+ - Normative source: [`spec/_.hint:345`](../spec/_.hint#L345).
596
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
597
+
598
+ Behavior and consequence:
599
+
600
+ string, optional for `email`. Prefix suggested for the email subject. Changing it changes only
601
+ the printed instruction.
602
+
603
+ ## `agents[].contacts[].repo`
604
+
605
+ - Type: string; optional.
606
+ - Default: none declared.
607
+ - Allowed values: schema type plus the normative behavior in this entry.
608
+ - Normative source: [`spec/_.hint:350`](../spec/_.hint#L350).
609
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
610
+
611
+ Behavior and consequence:
612
+
613
+ string, optional for `github-issue` and `gitlab-issue`, in `owner/name` form. Changing it changes
614
+ the repository where the issue driver delivers the request.
615
+
616
+ ## `agents[].contacts[].labels`
617
+
618
+ - Type: array of string; optional.
619
+ - Default: none declared.
620
+ - Allowed values: schema type plus the normative behavior in this entry.
621
+ - Normative source: [`spec/_.hint:355`](../spec/_.hint#L355).
622
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
623
+
624
+ Behavior and consequence:
625
+
626
+ list of strings, optional for issue kinds. Changing it changes labels requested when an issue is
627
+ created; a missing label is a delivery error from the host.
628
+
629
+ ## `agents[].contacts[].template`
630
+
631
+ - Type: string; optional.
632
+ - Default: none declared.
633
+ - Allowed values: schema type plus the normative behavior in this entry.
634
+ - Normative source: [`spec/_.hint:360`](../spec/_.hint#L360).
635
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
636
+
637
+ Behavior and consequence:
638
+
639
+ string, optional for issue kinds. Issue form/template name. Changing it changes the requested
640
+ host template without changing routing.
641
+
642
+ ## `agents[].contacts[].project`
643
+
644
+ - Type: string; optional.
645
+ - Default: none declared.
646
+ - Allowed values: schema type plus the normative behavior in this entry.
647
+ - Normative source: [`spec/_.hint:365`](../spec/_.hint#L365).
648
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
649
+
650
+ Behavior and consequence:
651
+
652
+ string, optional for `jira`. Project key. Changing it changes the Jira project named in the
653
+ instruction.
654
+
655
+ ## `agents[].contacts[].issue-type`
656
+
657
+ - Type: string; optional.
658
+ - Default: none declared.
659
+ - Allowed values: schema type plus the normative behavior in this entry.
660
+ - Normative source: [`spec/_.hint:370`](../spec/_.hint#L370).
661
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
662
+
663
+ Behavior and consequence:
664
+
665
+ string, optional for `jira`. Issue type. Changing it changes the Jira issue kind named in the
666
+ instruction.
667
+
668
+ ## `agents[].contacts[].channel`
669
+
670
+ - Type: string; optional.
671
+ - Default: none declared.
672
+ - Allowed values: schema type plus the normative behavior in this entry.
673
+ - Normative source: [`spec/_.hint:375`](../spec/_.hint#L375).
674
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
675
+
676
+ Behavior and consequence:
677
+
678
+ string, optional for chat kinds. Channel name or id. Changing it changes the printed chat
679
+ destination; chat contacts are instruction-only.
680
+
681
+ ## `agents[].contacts[].handle`
682
+
683
+ - Type: string; optional.
684
+ - Default: none declared.
685
+ - Allowed values: schema type plus the normative behavior in this entry.
686
+ - Normative source: [`spec/_.hint:380`](../spec/_.hint#L380).
687
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
688
+
689
+ Behavior and consequence:
690
+
691
+ string, optional for chat kinds. Agent mention or handle. Changing it changes whom the asker is
692
+ told to address.
693
+
694
+ ## `agents[].contacts[].server`
695
+
696
+ - Type: string; optional.
697
+ - Default: none declared.
698
+ - Allowed values: schema type plus the normative behavior in this entry.
699
+ - Normative source: [`spec/_.hint:385`](../spec/_.hint#L385).
700
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
701
+
702
+ Behavior and consequence:
703
+
704
+ string, optional for chat kinds. Workspace or server URL/name. Changing it disambiguates the
705
+ printed chat destination.
706
+
707
+ ## `agents[].trust.signatures`
708
+
709
+ - Type: boolean; optional.
710
+ - Default: `false`.
711
+ - Allowed values: schema type plus the normative behavior in this entry.
712
+ - Normative source: [`spec/_.hint:394`](../spec/_.hint#L394).
713
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
714
+
715
+ Behavior and consequence:
716
+
717
+ boolean, optional, default `false`. When changed to `true`, unsigned, invalid, or unverifiable
718
+ cards make `status` fail and make `update` warn while retaining the dependency update.
719
+
720
+ ## `agents[].trust.accepts-external`
721
+
722
+ - Type: boolean; optional.
723
+ - Default: unstated.
724
+ - Allowed values: schema type plus the normative behavior in this entry.
725
+ - Normative source: [`spec/_.hint:399`](../spec/_.hint#L399).
726
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
727
+
728
+ Behavior and consequence:
729
+
730
+ boolean, optional, default unstated. Declares whether outside agents are welcome. Changing it
731
+ changes published contact policy only; the reference CLI does not enforce organisation identity.
732
+
733
+ ## `policy.intents`
734
+
735
+ - Type: object; optional.
736
+ - Default: unlisted intents route to `owner`.
737
+ - Allowed values: schema type plus the normative behavior in this entry.
738
+ - Normative source: [`spec/_.hint:431`](../spec/_.hint#L431).
739
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
740
+
741
+ Behavior and consequence:
742
+
743
+ map intent → role. Which role answers which intent by default. Absent intents default to
744
+ `owner`. Example: `change: spec` sends change requests to the specification agent rather than
745
+ the coder — the pattern where engineers have full autonomy inside their repository and none
746
+ outside it, and the manager owns the WHAT.
747
+
748
+ Known values:
749
+
750
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
751
+ | --- | --- | --- | --- |
752
+ | `question` | Routes a request for explanation; defaults to role `owner`. | Selects contacts declaring `question` or `*`. | Accepted; policy and contacts can route any matching token. |
753
+ | `change` | Routes a proposed behavior/API change. | Selects contacts declaring `change` or `*`. | Accepted; policy and contacts can route any matching token. |
754
+ | `bug` | Routes a defect report. | Selects contacts declaring `bug` or `*`. | Accepted; policy and contacts can route any matching token. |
755
+ | `review` | Routes a review request. | Selects contacts declaring `review` or `*`. | Accepted; policy and contacts can route any matching token. |
756
+ | `incident` | Routes an operational incident. | Selects contacts declaring `incident` or `*`. | Accepted; policy and contacts can route any matching token. |
757
+ | `*` | Acts as a contact fallback after exact intent matches. | Broadens that contact to unmatched intents. | Accepted; any other unknown token is an exact-match intent. |
758
+
759
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
760
+ | --- | --- | --- | --- |
761
+ | `owner` | Default routing target; identifies the agent that commits, merges, and releases. | Requests using the default route select a different binding. | Accepted and routed when policy names the same token. |
762
+ | `maintainer` | Routes intents mapped to a maintainer. | Changes which bindings match those intents. | Accepted and routed when policy names the same token. |
763
+ | `spec` | Routes specification, task, or sequencing ownership. | Changes which bindings match policy entries such as `change: spec`. | Accepted and routed when policy names the same token. |
764
+ | `reviewer` | Routes review ownership. | Changes which bindings match review policy. | Accepted and routed when policy names the same token. |
765
+ | `support` | Routes support ownership. | Changes which bindings match support policy. | Accepted and routed when policy names the same token. |
766
+
767
+ ## `policy.consumers`
768
+
769
+ - Type: object; optional.
770
+ - Default: none declared.
771
+ - Allowed values: open vocabulary; see the known-values table in this entry.
772
+ - Normative source: [`spec/_.hint:438`](../spec/_.hint#L438).
773
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
774
+
775
+ Behavior and consequence:
776
+
777
+ object: `may` and `may-not`, lists of tokens from an open vocabulary (`read-surface`, `ask`,
778
+ `open-issue`, `propose-change`, `commit`, `edit-spec`, `release`, …). Rendered verbatim into the
779
+ consumer's roster block so an agent sees the boundary before it acts. Defaults when absent:
780
+ `may: [read-surface, ask]`, `may-not: [commit]`.
781
+
782
+ ## `policy.notes`
783
+
784
+ - Type: string; optional.
785
+ - Default: none declared.
786
+ - Allowed values: schema type plus the normative behavior in this entry.
787
+ - Normative source: [`spec/_.hint:445`](../spec/_.hint#L445).
788
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
789
+
790
+ Behavior and consequence:
791
+
792
+ string. Anything else consumers must know, verbatim.
793
+
794
+ ## `policy.consumers.may`
795
+
796
+ - Type: array of string; optional.
797
+ - Default: `[read-surface, ask]`.
798
+ - Allowed values: schema type plus the normative behavior in this entry.
799
+ - Normative source: [`spec/_.hint:453`](../spec/_.hint#L453).
800
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
801
+
802
+ Behavior and consequence:
803
+
804
+ list of strings, optional, default `[read-surface, ask]`. Changing it changes the allowed actions
805
+ rendered into consumer AGENTS.md rosters; the CLI reports the boundary but does not become an
806
+ authorization service. Known values and unknown handling are in `vocabulary_consumers`.
807
+
808
+ Known values:
809
+
810
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
811
+ | --- | --- | --- | --- |
812
+ | `read-surface` | Tells consumers they may read the published surface. | Adding/removing it changes the rendered boundary only. | Accepted and rendered verbatim; git-a2a does not enforce authorization. |
813
+ | `ask` | Tells consumers they may contact an owning agent. | Adding/removing it changes the rendered boundary only. | Accepted and rendered verbatim; git-a2a does not enforce authorization. |
814
+ | `open-issue`, `propose-change` | Tells consumers they may request owner-side work. | Adding/removing it changes the rendered boundary only. | Accepted and rendered verbatim; git-a2a does not enforce authorization. |
815
+ | `commit`, `edit-spec`, `release` | Common `may-not` boundaries for owner-controlled changes. | Adding/removing one changes the prohibition shown in the roster. | Accepted and rendered verbatim; downstream agents must obey it. |
816
+
817
+ ## `policy.consumers.may-not`
818
+
819
+ - Type: array of string; optional.
820
+ - Default: `[commit]`.
821
+ - Allowed values: schema type plus the normative behavior in this entry.
822
+ - Normative source: [`spec/_.hint:459`](../spec/_.hint#L459).
823
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
824
+
825
+ Behavior and consequence:
826
+
827
+ list of strings, optional, default `[commit]`. Changing it changes the prohibited actions rendered
828
+ into consumer rosters; downstream agents remain responsible for obeying the declaration. Known
829
+ values and unknown handling are in `vocabulary_consumers`.
830
+
831
+ Known values:
832
+
833
+ | Known value | What the tool does | Consequence of changing it | Unknown value |
834
+ | --- | --- | --- | --- |
835
+ | `read-surface` | Tells consumers they may read the published surface. | Adding/removing it changes the rendered boundary only. | Accepted and rendered verbatim; git-a2a does not enforce authorization. |
836
+ | `ask` | Tells consumers they may contact an owning agent. | Adding/removing it changes the rendered boundary only. | Accepted and rendered verbatim; git-a2a does not enforce authorization. |
837
+ | `open-issue`, `propose-change` | Tells consumers they may request owner-side work. | Adding/removing it changes the rendered boundary only. | Accepted and rendered verbatim; git-a2a does not enforce authorization. |
838
+ | `commit`, `edit-spec`, `release` | Common `may-not` boundaries for owner-controlled changes. | Adding/removing one changes the prohibition shown in the roster. | Accepted and rendered verbatim; downstream agents must obey it. |
839
+
840
+ ## `dependencies[].id`
841
+
842
+ - Type: string; optional.
843
+ - Default: none declared.
844
+ - Allowed values: pattern `^[a-z0-9][a-z0-9._-]{0,63}$`.
845
+ - Normative source: [`spec/_.hint:469`](../spec/_.hint#L469).
846
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
847
+
848
+ Behavior and consequence:
849
+
850
+ string. The dependency's `module.id`. Required after `add` (the CLI fills it from the fetched
851
+ manifest); the lock is keyed on it.
852
+
853
+ ## `dependencies[].git`
854
+
855
+ - Type: string; required.
856
+ - Default: none declared.
857
+ - Allowed values: minimum length 1.
858
+ - Normative source: [`spec/_.hint:474`](../spec/_.hint#L474).
859
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
860
+
861
+ Behavior and consequence:
862
+
863
+ string, required. The git URL (`ssh://`, `https://`, `git@host:path` scp form, `file://`).
864
+ Stored exactly as given; credentials are never stored.
865
+
866
+ ## `dependencies[].ref`
867
+
868
+ - Type: string; optional.
869
+ - Default: the owner's `release.channel`, otherwise remote HEAD.
870
+ - Allowed values: minimum length 1.
871
+ - Normative source: [`spec/_.hint:479`](../spec/_.hint#L479).
872
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
873
+
874
+ Behavior and consequence:
875
+
876
+ string. Branch, tag or commit to follow. Default: the dependency's `release.channel`, else the
877
+ remote HEAD. Resolution: a 40-hex string is a commit; a full refname (`refs/heads/x`,
878
+ `refs/tags/x`) is exactly that; a short name is resolved in git's own order — `refs/tags/<ref>`
879
+ before `refs/heads/<ref>` — and an ambiguity is reported with the name chosen. A commit ref
880
+ implies `track: locked`. Changing `ref`, `git` or `path` of an existing dependency is an
881
+ ordinary edit (`git-a2a set`): identity is `module.id`, so the fetched manifest must carry the
882
+ same id unless the consumer explicitly accepts a different one; every wired ecosystem follows
883
+ the new source and pin together.
884
+
885
+ ## `dependencies[].path`
886
+
887
+ - Type: string; optional.
888
+ - Default: `.`.
889
+ - Allowed values: minimum length 1.
890
+ - Normative source: [`spec/_.hint:490`](../spec/_.hint#L490).
891
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
892
+
893
+ Behavior and consequence:
894
+
895
+ string. Subdirectory containing the dependency's `a2amodule.yml` (monorepo). Default `.`.
896
+
897
+ ## `dependencies[].track`
898
+
899
+ - Type: string; optional.
900
+ - Default: `locked`.
901
+ - Allowed values: one of `locked`, `floating`.
902
+ - Normative source: [`spec/_.hint:494`](../spec/_.hint#L494).
903
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
904
+
905
+ Behavior and consequence:
906
+
907
+ `locked` (default) or `floating`, a closed vocabulary described in `vocabulary_track`. Every mode
908
+ still records one observed commit in the lock. Changing the mode rewrites supported native
909
+ dependency forms; unknown values are rejected.
910
+
911
+ Known values:
912
+
913
+ | Value | What the tool does | Consequence of changing it | Unknown value |
914
+ | --- | --- | --- | --- |
915
+ | `locked` | Pins every supported ecosystem to the one commit recorded in the lock. | Switching to it replaces floating native refs with the resolved commit. | Rejected by validation. |
916
+ | `floating` | Writes a branch/tag form where the adapter supports it while still recording the observed commit. | Switching to it lets native tools follow the declared ref independently. | Rejected by validation. |
917
+
918
+ ## `dependencies[].wire`
919
+
920
+ - Type: array of string; optional.
921
+ - Default: all matching detected ecosystems.
922
+ - Allowed values: schema type plus the normative behavior in this entry.
923
+ - Normative source: [`spec/_.hint:500`](../spec/_.hint#L500).
924
+ - Example: see the [public library manifest](https://github.com/neprel/git-a2a-demo-acme-lib/blob/main/a2amodule.yml) and [consumer manifest](https://github.com/neprel/git-a2a-demo-acme-app/blob/main/a2amodule.yml).
925
+
926
+ Behavior and consequence:
927
+
928
+ list of ecosystems to wire, or absent for "every export that matches a manifest detected in this
929
+ repository". An empty list means "record the dependency, wire nothing". When `wire` is absent
930
+ and an export cannot be expressed in its ecosystem (the ecosystem has no git form for that URL,
931
+ no subdirectory support, a floating ref it cannot store), the tool wires what it can, reports
932
+ the rest as `not wired: <reason>` and `status` shows that ecosystem as `unwired`; it is an error
933
+ only for an ecosystem named explicitly in `wire`. Wiring is repairable at any time
934
+ (`git-a2a wire [ID]` re-applies every adapter from the lock, idempotently) — a half-wired
935
+ dependency is a state the tool can always see and always fix, never one it hides.
936
+
937
+ ## Extension fields
938
+
939
+ At every schema object that declares `patternProperties`, keys beginning with `x-` are
940
+ extensions. The CLI preserves them; changing one changes only the extension consumer's
941
+ behavior. A known object rejects every other unknown key.
942
+
943
+ For an authoring sequence rather than field-by-field lookup, read the
944
+ [owner's guide](authoring.md).