git-a2a 1.3.2-rc.1 → 1.4.0-rc.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "git-a2a",
3
- "version": "1.3.2-rc.1",
3
+ "version": "1.4.0-rc.1",
4
4
  "description": "Import git modules together with their owning agents",
5
5
  "mcpName": "io.github.neprel/git-a2a",
6
6
  "license": "MIT",
@@ -19,11 +19,11 @@
19
19
  "skills/"
20
20
  ],
21
21
  "optionalDependencies": {
22
- "@git-a2a/darwin-amd64": "1.3.2-rc.1",
23
- "@git-a2a/darwin-arm64": "1.3.2-rc.1",
24
- "@git-a2a/linux-amd64": "1.3.2-rc.1",
25
- "@git-a2a/linux-arm64": "1.3.2-rc.1",
26
- "@git-a2a/windows-amd64": "1.3.2-rc.1",
27
- "@git-a2a/windows-arm64": "1.3.2-rc.1"
22
+ "@git-a2a/darwin-amd64": "1.4.0-rc.1",
23
+ "@git-a2a/darwin-arm64": "1.4.0-rc.1",
24
+ "@git-a2a/linux-amd64": "1.4.0-rc.1",
25
+ "@git-a2a/linux-arm64": "1.4.0-rc.1",
26
+ "@git-a2a/windows-amd64": "1.4.0-rc.1",
27
+ "@git-a2a/windows-arm64": "1.4.0-rc.1"
28
28
  }
29
29
  }
@@ -3,7 +3,7 @@ name: git-a2a
3
3
  description: Use git-a2a to consume or author a dependency on a Git repository together with its owner, resolve who owns a dependency, inspect or repair an AGENTS.md module roster, or edit and validate a2amodule.yml manifest.
4
4
  compatibility: requires git ≥ 2.25 and the git-a2a CLI
5
5
  metadata:
6
- version: "1.3.2"
6
+ version: "1.4.0"
7
7
  ---
8
8
 
9
9
  # git-a2a
@@ -70,7 +70,10 @@ mutation refresh an existing block.
70
70
  3. With authorization for the external side effect, put a concise request in a file and run
71
71
  `git-a2a contact ID --intent INTENT --message FILE`.
72
72
 
73
- `contact` may create an A2A task or GitHub Issue. URL, email, and chat kinds print instructions;
73
+ `contact` may create an A2A task or an issue on GitHub, GitLab, or a Gitea-family forge. Run
74
+ `git-a2a contact [ID] --list-drivers` before automation when transport availability matters.
75
+ Unknown kinds use a consumer-installed `git-a2a-contact-<kind>` plugin or print instructions;
76
+ URL, email, and chat kinds print instructions;
74
77
  do not invent delivery or store conversation state.
75
78
 
76
79
  ## Outcomes
@@ -111,9 +111,12 @@ agents:
111
111
  note: Describe the consumer, the need, and the affected languages.
112
112
  ```
113
113
 
114
- `a2a` and `github-issue` have delivery drivers. `url`, `email`, and chat kinds print an exact
115
- instruction; they do not pretend delivery occurred. The kind-specific keys and delivery behavior
116
- are listed in the [field reference](manifest-reference.md).
114
+ `a2a`, `github-issue`, `gitlab-issue`, and `gitea-issue` have built-in delivery drivers with
115
+ instruction fallback. Open kinds can use a consumer-side [contact plugin](contact-plugins.md).
116
+ Owner-described `http` and `exec` values remain instructions unless the consumer allowlists the
117
+ origin or bare binary in its own `settings.contact`; an owner declaration is never consent.
118
+ `url`, `email`, and chat kinds print an exact instruction and do not pretend delivery occurred.
119
+ The kind-specific keys and behavior are listed in the [field reference](manifest-reference.md).
117
120
 
118
121
  ## 6. State routing and the consumer boundary
119
122
 
@@ -192,16 +192,24 @@ acme-lib change → owner → library-owner
192
192
 
193
193
  ## contact
194
194
 
195
- `git-a2a contact ID --intent INTENT --message FILE|- [--wait] [--external-ok]` uses the first supported routed
196
- contact. A2A sends `SendMessage`; GitHub Issue uses `gh` then REST; URL/email/chat contacts print
197
- instructions. An owner declaration `accepts-external: false` refuses a different organisation;
195
+ `git-a2a contact [ID] [--intent INTENT --message FILE|-] [--wait] [--external-ok] [--dry-run]
196
+ [--list-drivers]` uses the first routed contact. Resolution is consumer plugin, built-in driver,
197
+ consumer-consented `http`/`exec`, then an exact instruction. GitHub, GitLab, and Gitea-family issue
198
+ drivers prefer `gh`, `glab`, or `tea`, then their REST API using consumer environment credentials;
199
+ without either they print a prefilled issue deep link. `--wait` selects A2A streaming. `--dry-run`
200
+ keeps delivery at the instruction layer. `--list-drivers` needs no message and shows the selected
201
+ layer globally or for one dependency's declared kinds. An owner declaration
202
+ `accepts-external: false` refuses a different organisation;
198
203
  only the CLI exposes `--external-ok`, so a human can explicitly approve and record the override.
199
- MCP has no bypass. Each delivery writes one record and stores no conversation state. `ask` is an
200
- alias. Exit `1` means delivery failed; exit `2` means routing/input resolved nothing.
204
+ MCP has no bypass. Each delivery writes one record including `driver=...` and stores no
205
+ conversation state. Consumer-installed kinds use the versioned [contact plugin
206
+ protocol](contact-plugins.md). Owner-described invocations never add credentials or use a shell;
207
+ MCP always refuses declared `exec`. `ask` is an alias. Exit `1` means delivery failed; exit `2`
208
+ means routing/input resolved nothing.
201
209
 
202
210
  ```text
203
211
  $ printf 'Please review the API.' | git-a2a contact acme-lib --intent review --message -
204
- acme-lib owner github-issue issue=https://github.com/acme/lib/issues/42
212
+ agent="owner" kind=github-issue id="https://github.com/acme/lib/issues/42" state=created driver=gh
205
213
  ```
206
214
 
207
215
  ## status
@@ -86,7 +86,7 @@ list, see [#dependency](../spec/_.hint). Modules this module depends on.
86
86
  - Type: string; required.
87
87
  - Default: none declared.
88
88
  - Allowed values: pattern `^[a-z0-9][a-z0-9._-]{0,63}$`.
89
- - Normative source: [`spec/_.hint:166`](../spec/_.hint#L166).
89
+ - Normative source: [`spec/_.hint:175`](../spec/_.hint#L175).
90
90
  - 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).
91
91
 
92
92
  Behavior and consequence:
@@ -101,7 +101,7 @@ breaking change for every consumer.
101
101
  - Type: string; optional.
102
102
  - Default: `module.id`.
103
103
  - Allowed values: schema type plus the normative behavior in this entry.
104
- - Normative source: [`spec/_.hint:173`](../spec/_.hint#L173).
104
+ - Normative source: [`spec/_.hint:182`](../spec/_.hint#L182).
105
105
  - 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).
106
106
 
107
107
  Behavior and consequence:
@@ -113,7 +113,7 @@ string. Display name. Defaults to `id`.
113
113
  - Type: string; optional.
114
114
  - Default: none declared.
115
115
  - Allowed values: schema type plus the normative behavior in this entry.
116
- - Normative source: [`spec/_.hint:177`](../spec/_.hint#L177).
116
+ - Normative source: [`spec/_.hint:186`](../spec/_.hint#L186).
117
117
  - 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).
118
118
 
119
119
  Behavior and consequence:
@@ -127,7 +127,7 @@ expects. Whitespace is normalised when rendered.
127
127
  - Type: array of string; optional.
128
128
  - Default: none declared.
129
129
  - Allowed values: open vocabulary; see the known-values table in this entry.
130
- - Normative source: [`spec/_.hint:183`](../spec/_.hint#L183).
130
+ - Normative source: [`spec/_.hint:192`](../spec/_.hint#L192).
131
131
  - 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).
132
132
 
133
133
  Behavior and consequence:
@@ -150,7 +150,7 @@ Known values:
150
150
  - Type: string; optional.
151
151
  - Default: none declared.
152
152
  - Allowed values: minimum length 1.
153
- - Normative source: [`spec/_.hint:189`](../spec/_.hint#L189).
153
+ - Normative source: [`spec/_.hint:198`](../spec/_.hint#L198).
154
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
155
 
156
156
  Behavior and consequence:
@@ -163,7 +163,7 @@ published beyond the manifest.
163
163
  - Type: string; optional.
164
164
  - Default: none declared.
165
165
  - Allowed values: schema type plus the normative behavior in this entry.
166
- - Normative source: [`spec/_.hint:194`](../spec/_.hint#L194).
166
+ - Normative source: [`spec/_.hint:203`](../spec/_.hint#L203).
167
167
  - 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).
168
168
 
169
169
  Behavior and consequence:
@@ -178,7 +178,7 @@ to whoever maintains the copy. Informative; never used to fetch.
178
178
  - Type: object; optional.
179
179
  - Default: none declared.
180
180
  - Allowed values: schema type plus the normative behavior in this entry.
181
- - Normative source: [`spec/_.hint:201`](../spec/_.hint#L201).
181
+ - Normative source: [`spec/_.hint:210`](../spec/_.hint#L210).
182
182
  - 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).
183
183
 
184
184
  Behavior and consequence:
@@ -193,7 +193,7 @@ source silently.
193
193
  - Type: string; optional.
194
194
  - Default: none declared.
195
195
  - Allowed values: schema type plus the normative behavior in this entry.
196
- - Normative source: [`spec/_.hint:208`](../spec/_.hint#L208).
196
+ - Normative source: [`spec/_.hint:217`](../spec/_.hint#L217).
197
197
  - 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).
198
198
 
199
199
  Behavior and consequence:
@@ -205,7 +205,7 @@ string; URL of human documentation.
205
205
  - Type: object; optional.
206
206
  - Default: none declared.
207
207
  - Allowed values: schema type plus the normative behavior in this entry.
208
- - Normative source: [`spec/_.hint:212`](../spec/_.hint#L212).
208
+ - Normative source: [`spec/_.hint:221`](../spec/_.hint#L221).
209
209
  - 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).
210
210
 
211
211
  Behavior and consequence:
@@ -220,7 +220,7 @@ module without naming one.
220
220
  - Type: array of object; optional.
221
221
  - Default: none declared.
222
222
  - Allowed values: schema type plus the normative behavior in this entry.
223
- - Normative source: [`spec/_.hint:219`](../spec/_.hint#L219).
223
+ - Normative source: [`spec/_.hint:228`](../spec/_.hint#L228).
224
224
  - 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).
225
225
 
226
226
  Behavior and consequence:
@@ -239,7 +239,7 @@ dist"). Ecosystem-specific keys are allowed under `x-<ecosystem>-*`.
239
239
  - Type: string; required.
240
240
  - Default: none declared.
241
241
  - Allowed values: schema type plus the normative behavior in this entry.
242
- - Normative source: [`spec/_.hint:235`](../spec/_.hint#L235).
242
+ - Normative source: [`spec/_.hint:244`](../spec/_.hint#L244).
243
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
244
 
245
245
  Behavior and consequence:
@@ -252,7 +252,7 @@ consumers remain on the current source until an explicit `set --git`.
252
252
  - Type: string; optional.
253
253
  - Default: `.`.
254
254
  - Allowed values: minimum length 1.
255
- - Normative source: [`spec/_.hint:240`](../spec/_.hint#L240).
255
+ - Normative source: [`spec/_.hint:249`](../spec/_.hint#L249).
256
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
257
 
258
258
  Behavior and consequence:
@@ -265,7 +265,7 @@ it changes the destination module root offered with the new Git URL.
265
265
  - Type: string; optional.
266
266
  - Default: none declared.
267
267
  - Allowed values: schema type plus the normative behavior in this entry.
268
- - Normative source: [`spec/_.hint:245`](../spec/_.hint#L245).
268
+ - Normative source: [`spec/_.hint:254`](../spec/_.hint#L254).
269
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
270
 
271
271
  Behavior and consequence:
@@ -278,7 +278,7 @@ the guidance, never the source automatically.
278
278
  - Type: string; optional.
279
279
  - Default: none declared.
280
280
  - Allowed values: schema type plus the normative behavior in this entry.
281
- - Normative source: [`spec/_.hint:254`](../spec/_.hint#L254).
281
+ - Normative source: [`spec/_.hint:263`](../spec/_.hint#L263).
282
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
283
 
284
284
  Behavior and consequence:
@@ -291,7 +291,7 @@ Changing it affects future adds; existing consumers retain their declared ref un
291
291
  - Type: boolean; optional.
292
292
  - Default: `false`.
293
293
  - Allowed values: schema type plus the normative behavior in this entry.
294
- - Normative source: [`spec/_.hint:259`](../spec/_.hint#L259).
294
+ - Normative source: [`spec/_.hint:268`](../spec/_.hint#L268).
295
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
296
 
297
297
  Behavior and consequence:
@@ -304,7 +304,7 @@ Changing it changes what consumers may reasonably select with `set --ref`; it do
304
304
  - Type: string; optional.
305
305
  - Default: none declared.
306
306
  - Allowed values: schema type plus the normative behavior in this entry.
307
- - Normative source: [`spec/_.hint:264`](../spec/_.hint#L264).
307
+ - Normative source: [`spec/_.hint:273`](../spec/_.hint#L273).
308
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
309
 
310
310
  Behavior and consequence:
@@ -317,7 +317,7 @@ only and does not resolve or move a dependency.
317
317
  - Type: string; required.
318
318
  - Default: none declared.
319
319
  - Allowed values: minimum length 1; open vocabulary; see the known-values table in this entry.
320
- - Normative source: [`spec/_.hint:273`](../spec/_.hint#L273).
320
+ - Normative source: [`spec/_.hint:282`](../spec/_.hint#L282).
321
321
  - 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).
322
322
 
323
323
  Behavior and consequence:
@@ -341,7 +341,7 @@ Known values:
341
341
  - Type: string; required.
342
342
  - Default: none declared.
343
343
  - Allowed values: minimum length 1.
344
- - Normative source: [`spec/_.hint:279`](../spec/_.hint#L279).
344
+ - Normative source: [`spec/_.hint:288`](../spec/_.hint#L288).
345
345
  - 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).
346
346
 
347
347
  Behavior and consequence:
@@ -354,7 +354,7 @@ consumer from the old native entry to the new one on the next mutation or `wire`
354
354
  - Type: string; optional.
355
355
  - Default: the module directory (`.`).
356
356
  - Allowed values: minimum length 1.
357
- - Normative source: [`spec/_.hint:284`](../spec/_.hint#L284).
357
+ - Normative source: [`spec/_.hint:293`](../spec/_.hint#L293).
358
358
  - 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).
359
359
 
360
360
  Behavior and consequence:
@@ -367,7 +367,7 @@ Changing it changes the Git subdirectory expression; unsupported adapters report
367
367
  - Type: string; optional.
368
368
  - Default: none declared.
369
369
  - Allowed values: schema type plus the normative behavior in this entry.
370
- - Normative source: [`spec/_.hint:289`](../spec/_.hint#L289).
370
+ - Normative source: [`spec/_.hint:298`](../spec/_.hint#L298).
371
371
  - 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).
372
372
 
373
373
  Behavior and consequence:
@@ -380,7 +380,7 @@ guidance but does not itself alter adapter behavior.
380
380
  - Type: string; required.
381
381
  - Default: none declared.
382
382
  - Allowed values: minimum length 1.
383
- - Normative source: [`spec/_.hint:298`](../spec/_.hint#L298).
383
+ - Normative source: [`spec/_.hint:307`](../spec/_.hint#L307).
384
384
  - 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).
385
385
 
386
386
  Behavior and consequence:
@@ -398,7 +398,7 @@ on a bare name being globally unique.
398
398
  - Type: string; required.
399
399
  - Default: none declared.
400
400
  - Allowed values: minimum length 1; open vocabulary; see the known-values table in this entry.
401
- - Normative source: [`spec/_.hint:308`](../spec/_.hint#L308).
401
+ - Normative source: [`spec/_.hint:317`](../spec/_.hint#L317).
402
402
  - 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).
403
403
 
404
404
  Behavior and consequence:
@@ -422,7 +422,7 @@ Known values:
422
422
  - Type: array of string; optional.
423
423
  - Default: `["**"]`.
424
424
  - Allowed values: schema type plus the normative behavior in this entry.
425
- - Normative source: [`spec/_.hint:314`](../spec/_.hint#L314).
425
+ - Normative source: [`spec/_.hint:323`](../spec/_.hint#L323).
426
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
427
 
428
428
  Behavior and consequence:
@@ -436,7 +436,7 @@ then declared order.
436
436
  - Type: string; optional.
437
437
  - Default: none declared.
438
438
  - Allowed values: minimum length 1.
439
- - Normative source: [`spec/_.hint:320`](../spec/_.hint#L320).
439
+ - Normative source: [`spec/_.hint:329`](../spec/_.hint#L329).
440
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
441
 
442
442
  Behavior and consequence:
@@ -450,7 +450,7 @@ the authority for `description`, `skills`, interfaces and security; git-a2a snap
450
450
  - Type: string; optional.
451
451
  - Default: none declared.
452
452
  - Allowed values: schema type plus the normative behavior in this entry.
453
- - Normative source: [`spec/_.hint:326`](../spec/_.hint#L326).
453
+ - Normative source: [`spec/_.hint:335`](../spec/_.hint#L335).
454
454
  - 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).
455
455
 
456
456
  Behavior and consequence:
@@ -463,7 +463,7 @@ ask it about …"). Never a copy of the card's description.
463
463
  - Type: array of object; optional.
464
464
  - Default: none declared.
465
465
  - Allowed values: open vocabulary; see the known-values table in this entry.
466
- - Normative source: [`spec/_.hint:331`](../spec/_.hint#L331).
466
+ - Normative source: [`spec/_.hint:340`](../spec/_.hint#L340).
467
467
  - 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).
468
468
 
469
469
  Behavior and consequence:
@@ -478,7 +478,7 @@ on"), plus kind-specific keys. Order expresses preference within an intent.
478
478
  - Type: object; optional.
479
479
  - Default: none declared.
480
480
  - Allowed values: schema type plus the normative behavior in this entry.
481
- - Normative source: [`spec/_.hint:338`](../spec/_.hint#L338).
481
+ - Normative source: [`spec/_.hint:347`](../spec/_.hint#L347).
482
482
  - 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).
483
483
 
484
484
  Behavior and consequence:
@@ -509,7 +509,7 @@ consumer requires `card-origin`, a warning otherwise.
509
509
  - Type: array of string; required.
510
510
  - Default: none declared.
511
511
  - Allowed values: minimum 1 item(s); open vocabulary; see the known-values table in this entry.
512
- - Normative source: [`spec/_.hint:366`](../spec/_.hint#L366).
512
+ - Normative source: [`spec/_.hint:375`](../spec/_.hint#L375).
513
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
514
 
515
515
  Behavior and consequence:
@@ -534,7 +534,7 @@ Known values:
534
534
  - Type: string; required.
535
535
  - Default: none declared.
536
536
  - Allowed values: minimum length 1; open vocabulary; see the known-values table in this entry.
537
- - Normative source: [`spec/_.hint:372`](../spec/_.hint#L372).
537
+ - Normative source: [`spec/_.hint:381`](../spec/_.hint#L381).
538
538
  - 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).
539
539
 
540
540
  Behavior and consequence:
@@ -550,8 +550,13 @@ The kind vocabulary is open; these kinds have defined keys and delivery behavior
550
550
  | Kind | Allowed kind-specific keys | Driver or instruction | Consequence of changing it | Unknown kind |
551
551
  | --- | --- | --- | --- | --- |
552
552
  | `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. |
553
- | `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. |
554
- | `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. |
553
+ | `github-issue` | `repo`, optional `server`, `labels`, `template` | Creates an issue through `gh`, then GitHub REST fallback (`server` selects a GitHub Enterprise host; API base `https://<server>/api/v3` unless `GITHUB_API_URL` overrides). | Changes the repository, host, labels, or issue template. | Accepted, but no delivery driver is selected. |
554
+ | `gitlab-issue` | `repo`, optional `server` (default `gitlab.com`), `labels`, `template` | Creates an issue through `glab`, then GitLab REST fallback (`POST /api/v4/projects/<url-encoded path>/issues`, token from `GITLAB_TOKEN`/`GLAB_TOKEN`). | Changes the project, host, labels, or template. | Accepted, but no delivery driver is selected. |
555
+ | `gitea-issue` | `repo`, `server` (required), optional `labels` | Creates an issue through `tea`, then Gitea/Forgejo REST fallback (`POST /api/v1/repos/<owner>/<repo>/issues`, token from `GITEA_TOKEN`/`FORGEJO_TOKEN`). Covers Gitea, Forgejo and Codeberg. | Changes the instance or repository. | Accepted, but no delivery driver is selected. |
556
+ | `bitbucket-issue` | `repo` (`workspace/slug`), optional `labels` | Prints an instruction with a prefilled deep link; Bitbucket Cloud only — Data Center has no issue tracker. | Changes the instructed destination. | Accepted, but no delivery driver is selected. |
557
+ | `azure-boards` | `organization`, `project`, optional `issue-type` | Prints an `az boards work-item create` instruction. | Changes the instructed organization, project, or type. | Accepted, but no delivery driver is selected. |
558
+ | `http` | `url` (https), optional `method` (default `POST`), `headers` (static literals), `content-type`, `body` | Owner-described request. Instruction by default (rendered as the exact final request); delivered only when the consumer allows the origin in `settings.contact.allow-http`; no credential is ever attached from the declaration. | Changes the described endpoint or payload. | — |
559
+ | `exec` | `command` (argv, bare binary name first), optional `args`, `stdin` (default `{message}`) | Owner-described local invocation. Instruction by default; executed only when the binary name is in the consumer's `settings.contact.allow-exec` and resolves on PATH; argv exec, never a shell; CLI-only — the MCP `contact` tool refuses `exec`. | Changes the described invocation. | — |
555
560
  | `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. |
556
561
  | `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. |
557
562
  | `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. |
@@ -560,12 +565,23 @@ The kind vocabulary is open; these kinds have defined keys and delivery behavior
560
565
  An unknown kind is rendered as `kind: <value>` with its extension keys, is never a validation
561
566
  error, and cannot be delivered by `contact` until a driver exists.
562
567
 
568
+ Issue-kind instructions include a prefilled deep link (`…/issues/new?title=…&body=…`,
569
+ URL-encoded, length-capped) when the forge supports one, so a driverless contact is one click
570
+ for a human and one request for an agent. Forges without a tracker (Gerrit, Bitbucket Data
571
+ Center, bare git hosting) are served by `email`, `jira`, `url`, or a chat kind — contacts bind
572
+ to intents, not to where the code is hosted.
573
+
574
+ Driver resolution per contact, in order: a consumer-installed plugin executable
575
+ `git-a2a-contact-<kind>` on PATH; the built-in driver; a declared `http`/`exec` invocation the
576
+ consumer has consented to; the rendered instruction. The chosen path is named in the delivery
577
+ record and by `contact --list-drivers`.
578
+
563
579
  ## `agents[].contacts[].note`
564
580
 
565
581
  - Type: string; optional.
566
582
  - Default: none declared.
567
583
  - Allowed values: schema type plus the normative behavior in this entry.
568
- - Normative source: [`spec/_.hint:378`](../spec/_.hint#L378).
584
+ - Normative source: [`spec/_.hint:387`](../spec/_.hint#L387).
569
585
  - 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).
570
586
 
571
587
  Behavior and consequence:
@@ -578,20 +594,21 @@ guidance, not routing priority or delivery mechanics.
578
594
  - Type: string; optional.
579
595
  - Default: none declared.
580
596
  - Allowed values: schema type plus the normative behavior in this entry.
581
- - Normative source: [`spec/_.hint:383`](../spec/_.hint#L383).
597
+ - Normative source: [`spec/_.hint:392`](../spec/_.hint#L392).
582
598
  - 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).
583
599
 
584
600
  Behavior and consequence:
585
601
 
586
- string, optional for `a2a`, `jira`, and `url`. Changing it changes the service or instruction
587
- destination; for A2A it is the JSON-RPC endpoint.
602
+ string, optional for `a2a`, `jira`, and `url`, required and HTTPS for `http`. Changing it changes
603
+ the service or instruction destination; for A2A it is the JSON-RPC endpoint. `http` templates may
604
+ place non-message placeholders only in query values according to `contact_placeholders`.
588
605
 
589
606
  ## `agents[].contacts[].skill`
590
607
 
591
608
  - Type: string; optional.
592
609
  - Default: none declared.
593
610
  - Allowed values: schema type plus the normative behavior in this entry.
594
- - Normative source: [`spec/_.hint:388`](../spec/_.hint#L388).
611
+ - Normative source: [`spec/_.hint:398`](../spec/_.hint#L398).
595
612
  - 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).
596
613
 
597
614
  Behavior and consequence:
@@ -604,7 +621,7 @@ the A2A target skill without changing the endpoint.
604
621
  - Type: string; optional.
605
622
  - Default: none declared.
606
623
  - Allowed values: schema type plus the normative behavior in this entry.
607
- - Normative source: [`spec/_.hint:393`](../spec/_.hint#L393).
624
+ - Normative source: [`spec/_.hint:403`](../spec/_.hint#L403).
608
625
  - 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).
609
626
 
610
627
  Behavior and consequence:
@@ -617,7 +634,7 @@ instruction; the reference CLI does not send email.
617
634
  - Type: string; optional.
618
635
  - Default: none declared.
619
636
  - Allowed values: schema type plus the normative behavior in this entry.
620
- - Normative source: [`spec/_.hint:398`](../spec/_.hint#L398).
637
+ - Normative source: [`spec/_.hint:408`](../spec/_.hint#L408).
621
638
  - 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).
622
639
 
623
640
  Behavior and consequence:
@@ -630,20 +647,21 @@ the printed instruction.
630
647
  - Type: string; optional.
631
648
  - Default: none declared.
632
649
  - Allowed values: schema type plus the normative behavior in this entry.
633
- - Normative source: [`spec/_.hint:403`](../spec/_.hint#L403).
650
+ - Normative source: [`spec/_.hint:413`](../spec/_.hint#L413).
634
651
  - 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).
635
652
 
636
653
  Behavior and consequence:
637
654
 
638
- string, optional for `github-issue` and `gitlab-issue`, in `owner/name` form. Changing it changes
639
- the repository where the issue driver delivers the request.
655
+ string for `github-issue`, `gitlab-issue`, `gitea-issue`, and `bitbucket-issue`; normally
656
+ `owner/name`, while GitLab permits nested `group/subgroup/name`. Changing it changes the repository
657
+ where the issue driver delivers the request.
640
658
 
641
659
  ## `agents[].contacts[].labels`
642
660
 
643
661
  - Type: array of string; optional.
644
662
  - Default: none declared.
645
663
  - Allowed values: schema type plus the normative behavior in this entry.
646
- - Normative source: [`spec/_.hint:408`](../spec/_.hint#L408).
664
+ - Normative source: [`spec/_.hint:419`](../spec/_.hint#L419).
647
665
  - 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).
648
666
 
649
667
  Behavior and consequence:
@@ -656,25 +674,38 @@ created; a missing label is a delivery error from the host.
656
674
  - Type: string; optional.
657
675
  - Default: none declared.
658
676
  - Allowed values: schema type plus the normative behavior in this entry.
659
- - Normative source: [`spec/_.hint:413`](../spec/_.hint#L413).
677
+ - Normative source: [`spec/_.hint:424`](../spec/_.hint#L424).
660
678
  - 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).
661
679
 
662
680
  Behavior and consequence:
663
681
 
664
682
  string, optional for issue kinds. Issue form/template name. Changing it changes the requested
665
- host template without changing routing.
683
+ template without changing routing.
666
684
 
667
685
  ## `agents[].contacts[].project`
668
686
 
669
687
  - Type: string; optional.
670
688
  - Default: none declared.
671
689
  - Allowed values: schema type plus the normative behavior in this entry.
672
- - Normative source: [`spec/_.hint:418`](../spec/_.hint#L418).
690
+ - Normative source: [`spec/_.hint:469`](../spec/_.hint#L469).
673
691
  - 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).
674
692
 
675
693
  Behavior and consequence:
676
694
 
677
- string, optional for `jira`. Project key. Changing it changes the Jira project named in the
695
+ string for `jira` and `azure-boards`. Project key. Changing it changes the project named in the
696
+ instruction.
697
+
698
+ ## `agents[].contacts[].organization`
699
+
700
+ - Type: string; optional.
701
+ - Default: none declared.
702
+ - Allowed values: schema type plus the normative behavior in this entry.
703
+ - Normative source: [`spec/_.hint:429`](../spec/_.hint#L429).
704
+ - 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).
705
+
706
+ Behavior and consequence:
707
+
708
+ string for `azure-boards`. Changing it changes the Azure DevOps organization named by the
678
709
  instruction.
679
710
 
680
711
  ## `agents[].contacts[].issue-type`
@@ -682,7 +713,7 @@ instruction.
682
713
  - Type: string; optional.
683
714
  - Default: none declared.
684
715
  - Allowed values: schema type plus the normative behavior in this entry.
685
- - Normative source: [`spec/_.hint:423`](../spec/_.hint#L423).
716
+ - Normative source: [`spec/_.hint:474`](../spec/_.hint#L474).
686
717
  - 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).
687
718
 
688
719
  Behavior and consequence:
@@ -695,7 +726,7 @@ instruction.
695
726
  - Type: string; optional.
696
727
  - Default: none declared.
697
728
  - Allowed values: schema type plus the normative behavior in this entry.
698
- - Normative source: [`spec/_.hint:428`](../spec/_.hint#L428).
729
+ - Normative source: [`spec/_.hint:479`](../spec/_.hint#L479).
699
730
  - 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).
700
731
 
701
732
  Behavior and consequence:
@@ -708,7 +739,7 @@ destination; chat contacts are instruction-only.
708
739
  - Type: string; optional.
709
740
  - Default: none declared.
710
741
  - Allowed values: schema type plus the normative behavior in this entry.
711
- - Normative source: [`spec/_.hint:433`](../spec/_.hint#L433).
742
+ - Normative source: [`spec/_.hint:484`](../spec/_.hint#L484).
712
743
  - 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).
713
744
 
714
745
  Behavior and consequence:
@@ -721,7 +752,7 @@ told to address.
721
752
  - Type: string; optional.
722
753
  - Default: none declared.
723
754
  - Allowed values: schema type plus the normative behavior in this entry.
724
- - Normative source: [`spec/_.hint:438`](../spec/_.hint#L438).
755
+ - Normative source: [`spec/_.hint:489`](../spec/_.hint#L489).
725
756
  - 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).
726
757
 
727
758
  Behavior and consequence:
@@ -729,12 +760,103 @@ Behavior and consequence:
729
760
  string, optional for chat kinds. Workspace or server URL/name. Changing it disambiguates the
730
761
  printed chat destination.
731
762
 
763
+ ## `agents[].contacts[].method`
764
+
765
+ - Type: string; optional.
766
+ - Default: none declared.
767
+ - Allowed values: schema type plus the normative behavior in this entry.
768
+ - Normative source: [`spec/_.hint:434`](../spec/_.hint#L434).
769
+ - 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).
770
+
771
+ Behavior and consequence:
772
+
773
+ string, optional for `http`, default `POST`. Changing it changes the exact instructed or allowed
774
+ HTTP request method.
775
+
776
+ ## `agents[].contacts[].headers`
777
+
778
+ - Type: object; optional.
779
+ - Default: none declared.
780
+ - Allowed values: schema type plus the normative behavior in this entry.
781
+ - Normative source: [`spec/_.hint:439`](../spec/_.hint#L439).
782
+ - 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).
783
+
784
+ Behavior and consequence:
785
+
786
+ map of string to string, optional for `http`. Values are static literals: placeholders are invalid,
787
+ and git-a2a never adds credentials from the declaration or consumer environment.
788
+
789
+ ## `agents[].contacts[].content-type`
790
+
791
+ - Type: string; optional.
792
+ - Default: none declared.
793
+ - Allowed values: schema type plus the normative behavior in this entry.
794
+ - Normative source: [`spec/_.hint:444`](../spec/_.hint#L444).
795
+ - 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).
796
+
797
+ Behavior and consequence:
798
+
799
+ string, optional for `http`. It selects the request Content-Type and JSON-aware placeholder
800
+ escaping when it contains `json`.
801
+
802
+ ## `agents[].contacts[].body`
803
+
804
+ - Type: string; optional.
805
+ - Default: none declared.
806
+ - Allowed values: schema type plus the normative behavior in this entry.
807
+ - Normative source: [`spec/_.hint:449`](../spec/_.hint#L449).
808
+ - 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).
809
+
810
+ Behavior and consequence:
811
+
812
+ string template, optional for `http`. It may use every value in `contact_placeholders`, including
813
+ `{message}`; changing it changes the exact instructed or delivered payload.
814
+
815
+ ## `agents[].contacts[].command`
816
+
817
+ - Type: array of string; optional.
818
+ - Default: none declared.
819
+ - Allowed values: minimum 1 item(s).
820
+ - Normative source: [`spec/_.hint:454`](../spec/_.hint#L454).
821
+ - 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).
822
+
823
+ Behavior and consequence:
824
+
825
+ list of strings, required for `exec`. The first item is a bare binary name without a path separator;
826
+ remaining items are argv entries. It is never interpreted by a shell.
827
+
828
+ ## `agents[].contacts[].args`
829
+
830
+ - Type: array of string; optional.
831
+ - Default: none declared.
832
+ - Allowed values: schema type plus the normative behavior in this entry.
833
+ - Normative source: [`spec/_.hint:459`](../spec/_.hint#L459).
834
+ - 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).
835
+
836
+ Behavior and consequence:
837
+
838
+ list of string templates, optional for `exec`, appended to `command`. It may use every non-message
839
+ placeholder in `contact_placeholders`; changing it changes argv only.
840
+
841
+ ## `agents[].contacts[].stdin`
842
+
843
+ - Type: string; optional.
844
+ - Default: none declared.
845
+ - Allowed values: schema type plus the normative behavior in this entry.
846
+ - Normative source: [`spec/_.hint:464`](../spec/_.hint#L464).
847
+ - 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).
848
+
849
+ Behavior and consequence:
850
+
851
+ string template, optional for `exec`, default `{message}`. It may use the complete placeholder set
852
+ and is passed as stdin without shell or environment expansion.
853
+
732
854
  ## `agents[].trust.signatures`
733
855
 
734
856
  - Type: boolean; optional.
735
857
  - Default: `false`.
736
858
  - Allowed values: schema type plus the normative behavior in this entry.
737
- - Normative source: [`spec/_.hint:447`](../spec/_.hint#L447).
859
+ - Normative source: [`spec/_.hint:498`](../spec/_.hint#L498).
738
860
  - 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).
739
861
 
740
862
  Behavior and consequence:
@@ -747,7 +869,7 @@ cards make `status` fail and make `update` warn while retaining the dependency u
747
869
  - Type: boolean; optional.
748
870
  - Default: unstated.
749
871
  - Allowed values: schema type plus the normative behavior in this entry.
750
- - Normative source: [`spec/_.hint:452`](../spec/_.hint#L452).
872
+ - Normative source: [`spec/_.hint:503`](../spec/_.hint#L503).
751
873
  - 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).
752
874
 
753
875
  Behavior and consequence:
@@ -762,7 +884,7 @@ agent "(external requests not accepted)". Organisation = origin host plus first
762
884
  - Type: array of string; optional.
763
885
  - Default: no pinned JWKS sources.
764
886
  - Allowed values: schema type plus the normative behavior in this entry.
765
- - Normative source: [`spec/_.hint:459`](../spec/_.hint#L459).
887
+ - Normative source: [`spec/_.hint:510`](../spec/_.hint#L510).
766
888
  - 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).
767
889
 
768
890
  Behavior and consequence:
@@ -776,7 +898,7 @@ subject to lock key-change review.
776
898
  - Type: array of string; optional.
777
899
  - Default: no pinned key thumbprints.
778
900
  - Allowed values: schema type plus the normative behavior in this entry.
779
- - Normative source: [`spec/_.hint:465`](../spec/_.hint#L465).
901
+ - Normative source: [`spec/_.hint:516`](../spec/_.hint#L516).
780
902
  - 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).
781
903
 
782
904
  Behavior and consequence:
@@ -789,7 +911,7 @@ of these pins regardless of JWKS URL. Changing the list changes the exact accept
789
911
  - Type: array of string; optional.
790
912
  - Default: repository/card binding rules.
791
913
  - Allowed values: schema type plus the normative behavior in this entry.
792
- - Normative source: [`spec/_.hint:470`](../spec/_.hint#L470).
914
+ - Normative source: [`spec/_.hint:521`](../spec/_.hint#L521).
793
915
  - 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).
794
916
 
795
917
  Behavior and consequence:
@@ -802,7 +924,7 @@ one of these origins. Changing it changes the allowed network identity of the ag
802
924
  - Type: string; optional.
803
925
  - Default: `24h`.
804
926
  - Allowed values: minimum length 1.
805
- - Normative source: [`spec/_.hint:475`](../spec/_.hint#L475).
927
+ - Normative source: [`spec/_.hint:526`](../spec/_.hint#L526).
806
928
  - 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).
807
929
 
808
930
  Behavior and consequence:
@@ -816,7 +938,7 @@ recoverable status.
816
938
  - Type: object; optional.
817
939
  - Default: unlisted intents route to `owner`.
818
940
  - Allowed values: schema type plus the normative behavior in this entry.
819
- - Normative source: [`spec/_.hint:508`](../spec/_.hint#L508).
941
+ - Normative source: [`spec/_.hint:584`](../spec/_.hint#L584).
820
942
  - 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).
821
943
 
822
944
  Behavior and consequence:
@@ -850,7 +972,7 @@ Known values:
850
972
  - Type: object; optional.
851
973
  - Default: none declared.
852
974
  - Allowed values: open vocabulary; see the known-values table in this entry.
853
- - Normative source: [`spec/_.hint:515`](../spec/_.hint#L515).
975
+ - Normative source: [`spec/_.hint:591`](../spec/_.hint#L591).
854
976
  - 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).
855
977
 
856
978
  Behavior and consequence:
@@ -865,7 +987,7 @@ consumer's roster block so an agent sees the boundary before it acts. Defaults w
865
987
  - Type: string; optional.
866
988
  - Default: none declared.
867
989
  - Allowed values: schema type plus the normative behavior in this entry.
868
- - Normative source: [`spec/_.hint:522`](../spec/_.hint#L522).
990
+ - Normative source: [`spec/_.hint:598`](../spec/_.hint#L598).
869
991
  - 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).
870
992
 
871
993
  Behavior and consequence:
@@ -877,7 +999,7 @@ string. Anything else consumers must know, verbatim.
877
999
  - Type: array of string; optional.
878
1000
  - Default: `[read-surface, ask]`.
879
1001
  - Allowed values: schema type plus the normative behavior in this entry.
880
- - Normative source: [`spec/_.hint:530`](../spec/_.hint#L530).
1002
+ - Normative source: [`spec/_.hint:606`](../spec/_.hint#L606).
881
1003
  - 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).
882
1004
 
883
1005
  Behavior and consequence:
@@ -900,7 +1022,7 @@ Known values:
900
1022
  - Type: array of string; optional.
901
1023
  - Default: `[commit]`.
902
1024
  - Allowed values: schema type plus the normative behavior in this entry.
903
- - Normative source: [`spec/_.hint:536`](../spec/_.hint#L536).
1025
+ - Normative source: [`spec/_.hint:612`](../spec/_.hint#L612).
904
1026
  - 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).
905
1027
 
906
1028
  Behavior and consequence:
@@ -961,12 +1083,29 @@ for `accepts-external` decisions, e.g. `["https://github.com/neprel", "ssh://git
961
1083
  Default: the origin host and first path segment of `module.repository`. Changing it changes only
962
1084
  the external-contact boundary used by `contact`.
963
1085
 
1086
+ ## `settings.contact`
1087
+
1088
+ - Type: object; optional.
1089
+ - Default: none declared.
1090
+ - Allowed values: schema type plus the normative behavior in this entry.
1091
+ - Normative source: [`spec/_.hint:160`](../spec/_.hint#L160).
1092
+ - 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).
1093
+
1094
+ Behavior and consequence:
1095
+
1096
+ object, optional: consumer consent for owner-described invocations. `allow-http` — list of
1097
+ origins (`https://host[:port]`); a dependency's `http` contact is delivered only when its URL's
1098
+ origin is listed, otherwise it renders as an instruction. `allow-exec` — list of bare binary
1099
+ names; a dependency's `exec` contact runs only when `command[0]` is listed and resolves on
1100
+ PATH. The lists live in the consumer's own manifest, so consent is authored, reviewed, and
1101
+ versioned by the consumer — never by the dependency. Defaults: empty, meaning instruction-only.
1102
+
964
1103
  ## `dependencies[].id`
965
1104
 
966
1105
  - Type: string; optional.
967
1106
  - Default: none declared.
968
1107
  - Allowed values: pattern `^[a-z0-9][a-z0-9._-]{0,63}$`.
969
- - Normative source: [`spec/_.hint:546`](../spec/_.hint#L546).
1108
+ - Normative source: [`spec/_.hint:622`](../spec/_.hint#L622).
970
1109
  - 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).
971
1110
 
972
1111
  Behavior and consequence:
@@ -979,7 +1118,7 @@ manifest); the lock is keyed on it.
979
1118
  - Type: string; required.
980
1119
  - Default: none declared.
981
1120
  - Allowed values: minimum length 1.
982
- - Normative source: [`spec/_.hint:551`](../spec/_.hint#L551).
1121
+ - Normative source: [`spec/_.hint:627`](../spec/_.hint#L627).
983
1122
  - 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).
984
1123
 
985
1124
  Behavior and consequence:
@@ -992,7 +1131,7 @@ Stored exactly as given; credentials are never stored.
992
1131
  - Type: string; optional.
993
1132
  - Default: the owner's `release.channel`, otherwise remote HEAD.
994
1133
  - Allowed values: minimum length 1.
995
- - Normative source: [`spec/_.hint:556`](../spec/_.hint#L556).
1134
+ - Normative source: [`spec/_.hint:632`](../spec/_.hint#L632).
996
1135
  - 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).
997
1136
 
998
1137
  Behavior and consequence:
@@ -1011,7 +1150,7 @@ the new source and pin together.
1011
1150
  - Type: string; optional.
1012
1151
  - Default: `.`.
1013
1152
  - Allowed values: minimum length 1.
1014
- - Normative source: [`spec/_.hint:567`](../spec/_.hint#L567).
1153
+ - Normative source: [`spec/_.hint:643`](../spec/_.hint#L643).
1015
1154
  - 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).
1016
1155
 
1017
1156
  Behavior and consequence:
@@ -1023,7 +1162,7 @@ string. Subdirectory containing the dependency's `a2amodule.yml` (monorepo). Def
1023
1162
  - Type: string; optional.
1024
1163
  - Default: `locked`.
1025
1164
  - Allowed values: one of `locked`, `floating`.
1026
- - Normative source: [`spec/_.hint:571`](../spec/_.hint#L571).
1165
+ - Normative source: [`spec/_.hint:647`](../spec/_.hint#L647).
1027
1166
  - 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).
1028
1167
 
1029
1168
  Behavior and consequence:
@@ -1044,7 +1183,7 @@ Known values:
1044
1183
  - Type: array of string; optional.
1045
1184
  - Default: all matching detected ecosystems.
1046
1185
  - Allowed values: schema type plus the normative behavior in this entry.
1047
- - Normative source: [`spec/_.hint:577`](../spec/_.hint#L577).
1186
+ - Normative source: [`spec/_.hint:653`](../spec/_.hint#L653).
1048
1187
  - 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).
1049
1188
 
1050
1189
  Behavior and consequence:
@@ -1063,7 +1202,7 @@ dependency is a state the tool can always see and always fix, never one it hides
1063
1202
  - Type: object; optional.
1064
1203
  - Default: none declared.
1065
1204
  - Allowed values: schema type plus the normative behavior in this entry.
1066
- - Normative source: [`spec/_.hint:588`](../spec/_.hint#L588).
1205
+ - Normative source: [`spec/_.hint:664`](../spec/_.hint#L664).
1067
1206
  - 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).
1068
1207
 
1069
1208
  Behavior and consequence:
@@ -1076,7 +1215,7 @@ the locked source tree in this consumer; a dependency is never vendored implicit
1076
1215
  - Type: object; optional.
1077
1216
  - Default: none declared.
1078
1217
  - Allowed values: schema type plus the normative behavior in this entry.
1079
- - Normative source: [`spec/_.hint:593`](../spec/_.hint#L593).
1218
+ - Normative source: [`spec/_.hint:669`](../spec/_.hint#L669).
1080
1219
  - 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).
1081
1220
 
1082
1221
  Behavior and consequence:
@@ -1089,7 +1228,7 @@ locking or contacting this dependency. Defaults preserve the permissive behavior
1089
1228
  - Type: string; optional.
1090
1229
  - Default: `any`.
1091
1230
  - Allowed values: one of `any`, `signed`.
1092
- - Normative source: [`spec/_.hint:606`](../spec/_.hint#L606).
1231
+ - Normative source: [`spec/_.hint:682`](../spec/_.hint#L682).
1093
1232
  - 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).
1094
1233
 
1095
1234
  Behavior and consequence:
@@ -1103,7 +1242,7 @@ the check on the next mutation and on `status`; unknown values are rejected.
1103
1242
  - Type: string; optional.
1104
1243
  - Default: none declared.
1105
1244
  - Allowed values: minimum length 1.
1106
- - Normative source: [`spec/_.hint:612`](../spec/_.hint#L612).
1245
+ - Normative source: [`spec/_.hint:688`](../spec/_.hint#L688).
1107
1246
  - 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).
1108
1247
 
1109
1248
  Behavior and consequence:
@@ -1117,7 +1256,7 @@ Changing it changes the trusted SSH/GPG signer set. A failed check leaves the lo
1117
1256
  - Type: string; optional.
1118
1257
  - Default: `any`.
1119
1258
  - Allowed values: one of `any`, `signed`.
1120
- - Normative source: [`spec/_.hint:618`](../spec/_.hint#L618).
1259
+ - Normative source: [`spec/_.hint:694`](../spec/_.hint#L694).
1121
1260
  - 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).
1122
1261
 
1123
1262
  Behavior and consequence:
@@ -1131,7 +1270,7 @@ are accepted; unknown values are rejected.
1131
1270
  - Type: boolean; optional.
1132
1271
  - Default: `false`.
1133
1272
  - Allowed values: schema type plus the normative behavior in this entry.
1134
- - Normative source: [`spec/_.hint:624`](../spec/_.hint#L624).
1273
+ - Normative source: [`spec/_.hint:700`](../spec/_.hint#L700).
1135
1274
  - 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).
1136
1275
 
1137
1276
  Behavior and consequence:
@@ -1144,7 +1283,7 @@ rather than a warning. Changing it changes mismatch severity, not the origin com
1144
1283
  - Type: string; optional.
1145
1284
  - Default: `submodule`.
1146
1285
  - Allowed values: one of `submodule`, `copy`.
1147
- - Normative source: [`spec/_.hint:638`](../spec/_.hint#L638).
1286
+ - Normative source: [`spec/_.hint:714`](../spec/_.hint#L714).
1148
1287
  - 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).
1149
1288
 
1150
1289
  Behavior and consequence:
@@ -1158,7 +1297,7 @@ one representation with the other transactionally; unknown values are rejected.
1158
1297
  - Type: string; optional.
1159
1298
  - Default: `<settings.vendor-dir>/<dependency-id>`.
1160
1299
  - Allowed values: minimum length 1.
1161
- - Normative source: [`spec/_.hint:644`](../spec/_.hint#L644).
1300
+ - Normative source: [`spec/_.hint:720`](../spec/_.hint#L720).
1162
1301
  - 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).
1163
1302
 
1164
1303
  Behavior and consequence:
@@ -1175,7 +1314,7 @@ reports violations and never silently rewrites the path.
1175
1314
  - Type: boolean; optional.
1176
1315
  - Default: `false`.
1177
1316
  - Allowed values: schema type plus the normative behavior in this entry.
1178
- - Normative source: [`spec/_.hint:653`](../spec/_.hint#L653).
1317
+ - Normative source: [`spec/_.hint:729`](../spec/_.hint#L729).
1179
1318
  - 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).
1180
1319
 
1181
1320
  Behavior and consequence: