harness-everything 0.36.3 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +18 -0
  4. package/ci/fixtures/doc-obligations/providers-s3/cases.json +535 -0
  5. package/ci/fixtures/doc-obligations/read-boundary/boundary-controls.json +211 -0
  6. package/ci/fixtures/doc-obligations/read-boundary/boundary-policy.json +325 -0
  7. package/ci/fixtures/doc-obligations/read-boundary/cases.json +14058 -0
  8. package/ci/fixtures/doc-obligations/read-boundary/expected.json +1 -0
  9. package/ci/fixtures/doc-obligations/read-boundary/identity-cases.json +119 -0
  10. package/ci/fixtures/doc-obligations/read-boundary/identity-expected.json +1 -0
  11. package/ci/fixtures/doc-obligations/read-boundary/scope-cases.json +208 -0
  12. package/ci/fixtures/doc-obligations/read-boundary/scope-expected.json +1 -0
  13. package/ci/fixtures/doc-obligations/reconciliation-prep/cases.json +2751 -0
  14. package/ci/fixtures/doc-obligations/reconciliation-prep/flood-entrypoint.js +5 -0
  15. package/ci/fixtures/doc-obligations/reconciliation-prep/hang-entrypoint.js +5 -0
  16. package/ci/fixtures/doc-obligations/reconciliation-prep/pending-red.json +648 -0
  17. package/ci/fixtures/doc-obligations/reconciliation-prep/provider-contract.json +100 -0
  18. package/ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json +188 -0
  19. package/ci/lib/doc-evidence-boundary-check.js +1240 -0
  20. package/ci/lib/doc-evidence-fixtures.js +459 -0
  21. package/ci/lib/doc-evidence-trace.js +171 -0
  22. package/ci/lib/doc-reconciliation-prep-fixtures.js +502 -0
  23. package/ci/lib/snapshot-stdin.js +27 -0
  24. package/ci/mechanism-325-3b-preparation.test.js +382 -0
  25. package/ci/mechanism-325-3b-s3-providers.test.js +378 -0
  26. package/ci/mechanism-341-boundary-enforcement.test.js +660 -0
  27. package/ci/mechanism-341-capture-module.test.js +357 -0
  28. package/ci/mechanism-341-mutation-runner.test.js +413 -0
  29. package/ci/mechanism-341-read-boundary.test.js +388 -0
  30. package/ci/mechanism-341-snapshot-stdin.test.js +40 -0
  31. package/ci/mutation-check.js +805 -45
  32. package/ci/mutation-loader.js +544 -57
  33. package/ci/prep/doc-reconciliation-red.js +407 -0
  34. package/ci/stress-341-boundary-control.js +85 -0
  35. package/docs/doc-evidence-baseline-binding.md +105 -19
  36. package/docs/doc-evidence-boundary.md +135 -0
  37. package/docs/doc-workflow-reconciliation.md +338 -0
  38. package/docs/document-lifecycle.md +8 -1
  39. package/harness-everything/SKILL.md +1 -1
  40. package/harness-everything/scripts/doc-evidence-capture.js +331 -0
  41. package/harness-everything/scripts/doc-evidence.js +72 -223
  42. package/harness-everything/scripts/doc-providers.js +113 -0
  43. package/opencode-plugin/plugin.json +1 -1
  44. package/package.json +5 -3
  45. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  46. package/plugins/harness-everything/plugin.json +1 -1
  47. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  48. package/plugins/harness-everything/skills/harness-everything/scripts/doc-evidence-capture.js +331 -0
  49. package/plugins/harness-everything/skills/harness-everything/scripts/doc-evidence.js +72 -223
  50. package/plugins/harness-everything/skills/harness-everything/scripts/doc-providers.js +113 -0
  51. package/sbom.cdx.json +43 -7
@@ -10,7 +10,7 @@
10
10
  "name": "harness-everything",
11
11
  "source": "./",
12
12
  "description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
13
- "version": "0.36.3",
13
+ "version": "0.37.0",
14
14
  "author": {
15
15
  "name": "Miya Daniel"
16
16
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "harness-everything",
3
3
  "description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
4
- "version": "0.36.3",
4
+ "version": "0.37.0",
5
5
  "author": {
6
6
  "name": "Miya Daniel"
7
7
  },
package/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [0.37.0](https://github.com/dyphn1/Harness-everything/compare/v0.36.4...v0.37.0) (2026-10-21)
6
+
7
+ ### Features
8
+
9
+ * **doc-lifecycle:** add pure advisory doc provider suggestions ([#325](https://github.com/dyphn1/Harness-everything/issues/325)) ([cffe1d2](https://github.com/dyphn1/Harness-everything/commit/cffe1d277375adc318f3d0d52267e94d3f3253f0))
10
+
11
+ ## [0.36.4](https://github.com/dyphn1/Harness-everything/compare/v0.36.3...v0.36.4) (2026-10-21)
12
+
5
13
  ## [0.36.3](https://github.com/dyphn1/Harness-everything/compare/v0.36.2...v0.36.3) (2026-10-20)
6
14
 
7
15
  ### Bug Fixes
@@ -69,8 +77,18 @@ All notable changes to this project are documented in this file.
69
77
 
70
78
  ## [Unreleased]
71
79
 
80
+ - Ship the S3 pure advisory provider suggestion function (`suggestDocProviders`) with strict validation and active-step filtering; it is not wired into workflow integration yet.
81
+
82
+ ### Documentation
83
+
84
+ * **doc-evidence:** define role-scoped read consistency, compatibility traces, and Phase 0 conformance limits
85
+ * **doc-evidence:** document the Phase 0C read-boundary enforcement method (isolation checks plus an AST structural supplement), its scope and its named compatibility exceptions
86
+ * **doc-workflow:** document #325 Phase 3b preparation contracts and fingerprint-qualified expected-RED fixtures; runtime remains gated on #341 E0
87
+
72
88
  ### Bug Fixes
73
89
 
90
+ * **doc-evidence:** isolate selected boundary controls from unrelated sensitivity subprocesses, use disposable checker/input snapshots to avoid pipe handoff stalls, and retain control failure assertions and exception details
91
+
74
92
  * **doc-obligations:** keep changed REQ citations in unknown sync scope and recognize indented Decision headings
75
93
  * **doc-obligations:** keep title-only REQ test edits out of new-test and assertion scope
76
94
  * **doc-obligations:** reject PRD revision identities not chained to the base declaration
@@ -0,0 +1,535 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "phase": "325-3b-S3",
4
+ "description": "S3 advisory provider suggestion cases. Expected outputs are hand-derived from docs/doc-workflow-reconciliation.md (S3 section) and are the RED oracle. The three contract examples live in reconciliation-prep/provider-contract.json and are read directly by the suite. Kinds: valid (exact output with suggestions and unavailable only), malformed (structured invalid-input result). Reason strings: 'active-step capability and host requirements match'; 'host lacks <sorted missing, joined with ', '>'; 'no available provider metadata for the active-step capability'; invalid-input.",
5
+ "cases": [
6
+ {
7
+ "id": "H2-future-step-not-suggested",
8
+ "kind": "valid",
9
+ "input": {
10
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
11
+ "neededCapabilities": ["outline-confirmation"],
12
+ "availableProviderMetadata": [
13
+ { "providerId": "fixture-future-outline", "capabilities": ["outline-confirmation"], "stepTypes": ["doc-change"], "requiresHostCapabilities": [], "locator": { "kind": "binding", "id": "to-spec" } }
14
+ ],
15
+ "hostCapabilities": []
16
+ },
17
+ "expected": {
18
+ "suggestions": [],
19
+ "unavailable": [{ "capability": "outline-confirmation", "reason": "no available provider metadata for the active-step capability" }]
20
+ }
21
+ },
22
+ {
23
+ "id": "H2-unneeded-capability-not-suggested",
24
+ "kind": "valid",
25
+ "input": {
26
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
27
+ "neededCapabilities": ["doc-lint"],
28
+ "availableProviderMetadata": [
29
+ { "providerId": "fixture-multi", "capabilities": ["doc-lint", "quality-review"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-multi" } }
30
+ ],
31
+ "hostCapabilities": []
32
+ },
33
+ "expected": {
34
+ "suggestions": [
35
+ { "capability": "doc-lint", "providerId": "fixture-multi", "availability": "available", "reason": "active-step capability and host requirements match" }
36
+ ],
37
+ "unavailable": []
38
+ }
39
+ },
40
+ {
41
+ "id": "multi-capability-record-one-suggestion-per-match",
42
+ "kind": "valid",
43
+ "input": {
44
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
45
+ "neededCapabilities": ["doc-lint", "quality-review"],
46
+ "availableProviderMetadata": [
47
+ { "providerId": "fixture-multi", "capabilities": ["doc-lint", "quality-review"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-multi" } }
48
+ ],
49
+ "hostCapabilities": []
50
+ },
51
+ "expected": {
52
+ "suggestions": [
53
+ { "capability": "doc-lint", "providerId": "fixture-multi", "availability": "available", "reason": "active-step capability and host requirements match" },
54
+ { "capability": "quality-review", "providerId": "fixture-multi", "availability": "available", "reason": "active-step capability and host requirements match" }
55
+ ],
56
+ "unavailable": []
57
+ }
58
+ },
59
+ {
60
+ "id": "host-unmet-multiple-requirements-sorted-reason",
61
+ "kind": "valid",
62
+ "input": {
63
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
64
+ "neededCapabilities": ["doc-lint"],
65
+ "availableProviderMetadata": [
66
+ { "providerId": "fixture-two-host", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": ["independent-review-events", "execution-events"], "locator": { "kind": "tool", "id": "fixture-two-host" } }
67
+ ],
68
+ "hostCapabilities": []
69
+ },
70
+ "expected": {
71
+ "suggestions": [
72
+ { "capability": "doc-lint", "providerId": "fixture-two-host", "availability": "unavailable", "reason": "host lacks execution-events, independent-review-events" }
73
+ ],
74
+ "unavailable": [
75
+ { "capability": "doc-lint", "reason": "host lacks execution-events, independent-review-events" }
76
+ ]
77
+ }
78
+ },
79
+ {
80
+ "id": "host-all-requirements-present-available",
81
+ "kind": "valid",
82
+ "input": {
83
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
84
+ "neededCapabilities": ["doc-lint"],
85
+ "availableProviderMetadata": [
86
+ { "providerId": "fixture-two-host", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": ["execution-events", "independent-review-events"], "locator": { "kind": "tool", "id": "fixture-two-host" } }
87
+ ],
88
+ "hostCapabilities": ["execution-events", "independent-review-events"]
89
+ },
90
+ "expected": {
91
+ "suggestions": [
92
+ { "capability": "doc-lint", "providerId": "fixture-two-host", "availability": "available", "reason": "active-step capability and host requirements match" }
93
+ ],
94
+ "unavailable": []
95
+ }
96
+ },
97
+ {
98
+ "id": "two-candidates-one-blocked-one-available",
99
+ "kind": "valid",
100
+ "input": {
101
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
102
+ "neededCapabilities": ["doc-lint"],
103
+ "availableProviderMetadata": [
104
+ { "providerId": "fixture-open", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-open" } },
105
+ { "providerId": "fixture-blocked", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": ["execution-events"], "locator": { "kind": "tool", "id": "fixture-blocked" } }
106
+ ],
107
+ "hostCapabilities": []
108
+ },
109
+ "expected": {
110
+ "suggestions": [
111
+ { "capability": "doc-lint", "providerId": "fixture-blocked", "availability": "unavailable", "reason": "host lacks execution-events" },
112
+ { "capability": "doc-lint", "providerId": "fixture-open", "availability": "available", "reason": "active-step capability and host requirements match" }
113
+ ],
114
+ "unavailable": []
115
+ }
116
+ },
117
+ {
118
+ "id": "two-blocked-candidates-reasons-joined-distinct-sorted",
119
+ "kind": "valid",
120
+ "input": {
121
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
122
+ "neededCapabilities": ["doc-lint"],
123
+ "availableProviderMetadata": [
124
+ { "providerId": "fixture-a", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": ["execution-events"], "locator": { "kind": "tool", "id": "fixture-a" } },
125
+ { "providerId": "fixture-b", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": ["independent-review-events"], "locator": { "kind": "tool", "id": "fixture-b" } }
126
+ ],
127
+ "hostCapabilities": []
128
+ },
129
+ "expected": {
130
+ "suggestions": [
131
+ { "capability": "doc-lint", "providerId": "fixture-a", "availability": "unavailable", "reason": "host lacks execution-events" },
132
+ { "capability": "doc-lint", "providerId": "fixture-b", "availability": "unavailable", "reason": "host lacks independent-review-events" }
133
+ ],
134
+ "unavailable": [
135
+ { "capability": "doc-lint", "reason": "host lacks execution-events; host lacks independent-review-events" }
136
+ ]
137
+ }
138
+ },
139
+ {
140
+ "id": "no-metadata-each-needed-capability-sorted",
141
+ "kind": "valid",
142
+ "input": {
143
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
144
+ "neededCapabilities": ["quality-review", "doc-lint"],
145
+ "availableProviderMetadata": [],
146
+ "hostCapabilities": []
147
+ },
148
+ "expected": {
149
+ "suggestions": [],
150
+ "unavailable": [
151
+ { "capability": "doc-lint", "reason": "no available provider metadata for the active-step capability" },
152
+ { "capability": "quality-review", "reason": "no available provider metadata for the active-step capability" }
153
+ ]
154
+ }
155
+ },
156
+ {
157
+ "id": "H1-omit-all-providers-keeps-every-needed-capability",
158
+ "kind": "valid",
159
+ "input": {
160
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
161
+ "neededCapabilities": ["doc-lint", "quality-review"],
162
+ "availableProviderMetadata": [],
163
+ "hostCapabilities": ["execution-events"]
164
+ },
165
+ "expected": {
166
+ "suggestions": [],
167
+ "unavailable": [
168
+ { "capability": "doc-lint", "reason": "no available provider metadata for the active-step capability" },
169
+ { "capability": "quality-review", "reason": "no available provider metadata for the active-step capability" }
170
+ ]
171
+ }
172
+ },
173
+ {
174
+ "id": "empty-needed-is-valid-no-output",
175
+ "kind": "valid",
176
+ "input": {
177
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
178
+ "neededCapabilities": [],
179
+ "availableProviderMetadata": [
180
+ { "providerId": "fixture-lint-a", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-lint-a" } }
181
+ ],
182
+ "hostCapabilities": []
183
+ },
184
+ "expected": { "suggestions": [], "unavailable": [] }
185
+ },
186
+ {
187
+ "id": "all-empty-is-valid-no-output",
188
+ "kind": "valid",
189
+ "input": {
190
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
191
+ "neededCapabilities": [],
192
+ "availableProviderMetadata": [],
193
+ "hostCapabilities": []
194
+ },
195
+ "expected": { "suggestions": [], "unavailable": [] }
196
+ },
197
+ {
198
+ "id": "capability-match-is-case-sensitive",
199
+ "kind": "valid",
200
+ "input": {
201
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
202
+ "neededCapabilities": ["doc-lint"],
203
+ "availableProviderMetadata": [
204
+ { "providerId": "fixture-case", "capabilities": ["Doc-Lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-case" } }
205
+ ],
206
+ "hostCapabilities": []
207
+ },
208
+ "expected": {
209
+ "suggestions": [],
210
+ "unavailable": [{ "capability": "doc-lint", "reason": "no available provider metadata for the active-step capability" }]
211
+ }
212
+ },
213
+ {
214
+ "id": "step-type-match-is-case-sensitive",
215
+ "kind": "valid",
216
+ "input": {
217
+ "activeStep": { "id": "verify-docs", "stepType": "Verification" },
218
+ "neededCapabilities": ["doc-lint"],
219
+ "availableProviderMetadata": [
220
+ { "providerId": "fixture-case", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-case" } }
221
+ ],
222
+ "hostCapabilities": []
223
+ },
224
+ "expected": {
225
+ "suggestions": [],
226
+ "unavailable": [{ "capability": "doc-lint", "reason": "no available provider metadata for the active-step capability" }]
227
+ }
228
+ },
229
+ {
230
+ "id": "extra-fields-confer-no-capability-or-authority",
231
+ "kind": "valid",
232
+ "input": {
233
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
234
+ "neededCapabilities": ["quality-review"],
235
+ "availableProviderMetadata": [
236
+ { "providerId": "fixture-extra", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-extra" }, "extraCapabilities": ["quality-review"], "authority": "granted" }
237
+ ],
238
+ "hostCapabilities": []
239
+ },
240
+ "expected": {
241
+ "suggestions": [],
242
+ "unavailable": [{ "capability": "quality-review", "reason": "no available provider metadata for the active-step capability" }]
243
+ }
244
+ },
245
+ {
246
+ "id": "malformed-input-null",
247
+ "kind": "malformed",
248
+ "input": null,
249
+ "expected": { "unavailable": [], "diagnosticPathPrefixes": ["input"] }
250
+ },
251
+ {
252
+ "id": "malformed-activeStep-missing-retains-needed",
253
+ "kind": "malformed",
254
+ "input": {
255
+ "neededCapabilities": ["doc-lint"],
256
+ "availableProviderMetadata": [],
257
+ "hostCapabilities": []
258
+ },
259
+ "expected": {
260
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
261
+ "diagnosticPathPrefixes": ["activeStep"]
262
+ }
263
+ },
264
+ {
265
+ "id": "malformed-activeStep-id-whitespace",
266
+ "kind": "malformed",
267
+ "input": {
268
+ "activeStep": { "id": " ", "stepType": "verification" },
269
+ "neededCapabilities": ["doc-lint"],
270
+ "availableProviderMetadata": [],
271
+ "hostCapabilities": []
272
+ },
273
+ "expected": {
274
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
275
+ "diagnosticPathPrefixes": ["activeStep"]
276
+ }
277
+ },
278
+ {
279
+ "id": "malformed-neededCapabilities-not-array-empties-unavailable",
280
+ "kind": "malformed",
281
+ "input": {
282
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
283
+ "neededCapabilities": "doc-lint",
284
+ "availableProviderMetadata": [],
285
+ "hostCapabilities": []
286
+ },
287
+ "expected": {
288
+ "unavailable": [],
289
+ "diagnosticPathPrefixes": ["neededCapabilities"]
290
+ }
291
+ },
292
+ {
293
+ "id": "malformed-neededCapabilities-duplicate-empties-unavailable",
294
+ "kind": "malformed",
295
+ "input": {
296
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
297
+ "neededCapabilities": ["doc-lint", "doc-lint"],
298
+ "availableProviderMetadata": [],
299
+ "hostCapabilities": []
300
+ },
301
+ "expected": {
302
+ "unavailable": [],
303
+ "diagnosticPathPrefixes": ["neededCapabilities"]
304
+ }
305
+ },
306
+ {
307
+ "id": "malformed-hostCapabilities-missing-retains-needed",
308
+ "kind": "malformed",
309
+ "input": {
310
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
311
+ "neededCapabilities": ["doc-lint"],
312
+ "availableProviderMetadata": []
313
+ },
314
+ "expected": {
315
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
316
+ "diagnosticPathPrefixes": ["hostCapabilities"]
317
+ }
318
+ },
319
+ {
320
+ "id": "malformed-hostCapabilities-null-retains-needed",
321
+ "kind": "malformed",
322
+ "input": {
323
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
324
+ "neededCapabilities": ["doc-lint"],
325
+ "availableProviderMetadata": [],
326
+ "hostCapabilities": null
327
+ },
328
+ "expected": {
329
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
330
+ "diagnosticPathPrefixes": ["hostCapabilities"]
331
+ }
332
+ },
333
+ {
334
+ "id": "malformed-hostCapabilities-string-retains-needed",
335
+ "kind": "malformed",
336
+ "input": {
337
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
338
+ "neededCapabilities": ["doc-lint"],
339
+ "availableProviderMetadata": [],
340
+ "hostCapabilities": "execution-events"
341
+ },
342
+ "expected": {
343
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
344
+ "diagnosticPathPrefixes": ["hostCapabilities"]
345
+ }
346
+ },
347
+ {
348
+ "id": "malformed-hostCapabilities-duplicate-retains-needed",
349
+ "kind": "malformed",
350
+ "input": {
351
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
352
+ "neededCapabilities": ["doc-lint"],
353
+ "availableProviderMetadata": [],
354
+ "hostCapabilities": ["execution-events", "execution-events"]
355
+ },
356
+ "expected": {
357
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
358
+ "diagnosticPathPrefixes": ["hostCapabilities"]
359
+ }
360
+ },
361
+ {
362
+ "id": "malformed-metadata-entry-null",
363
+ "kind": "malformed",
364
+ "input": {
365
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
366
+ "neededCapabilities": ["doc-lint"],
367
+ "availableProviderMetadata": [null],
368
+ "hostCapabilities": []
369
+ },
370
+ "expected": {
371
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
372
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
373
+ }
374
+ },
375
+ {
376
+ "id": "malformed-locator-kind-command",
377
+ "kind": "malformed",
378
+ "input": {
379
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
380
+ "neededCapabilities": ["doc-lint"],
381
+ "availableProviderMetadata": [
382
+ { "providerId": "fixture-cmd", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "command", "id": "npm run lint" } }
383
+ ],
384
+ "hostCapabilities": []
385
+ },
386
+ "expected": {
387
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
388
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
389
+ }
390
+ },
391
+ {
392
+ "id": "malformed-providerId-number-no-coercion",
393
+ "kind": "malformed",
394
+ "input": {
395
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
396
+ "neededCapabilities": ["doc-lint"],
397
+ "availableProviderMetadata": [
398
+ { "providerId": 42, "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-num" } }
399
+ ],
400
+ "hostCapabilities": []
401
+ },
402
+ "expected": {
403
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
404
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
405
+ }
406
+ },
407
+ {
408
+ "id": "malformed-providerId-whitespace",
409
+ "kind": "malformed",
410
+ "input": {
411
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
412
+ "neededCapabilities": ["doc-lint"],
413
+ "availableProviderMetadata": [
414
+ { "providerId": " ", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-ws" } }
415
+ ],
416
+ "hostCapabilities": []
417
+ },
418
+ "expected": {
419
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
420
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
421
+ }
422
+ },
423
+ {
424
+ "id": "malformed-metadata-capabilities-duplicate",
425
+ "kind": "malformed",
426
+ "input": {
427
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
428
+ "neededCapabilities": ["doc-lint"],
429
+ "availableProviderMetadata": [
430
+ { "providerId": "fixture-dup", "capabilities": ["doc-lint", "doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-dup" } }
431
+ ],
432
+ "hostCapabilities": []
433
+ },
434
+ "expected": {
435
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
436
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
437
+ }
438
+ },
439
+ {
440
+ "id": "malformed-requiresHostCapabilities-null",
441
+ "kind": "malformed",
442
+ "input": {
443
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
444
+ "neededCapabilities": ["doc-lint"],
445
+ "availableProviderMetadata": [
446
+ { "providerId": "fixture-null", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": null, "locator": { "kind": "tool", "id": "fixture-null" } }
447
+ ],
448
+ "hostCapabilities": []
449
+ },
450
+ "expected": {
451
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
452
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
453
+ }
454
+ },
455
+ {
456
+ "id": "malformed-stepTypes-not-array",
457
+ "kind": "malformed",
458
+ "input": {
459
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
460
+ "neededCapabilities": ["doc-lint"],
461
+ "availableProviderMetadata": [
462
+ { "providerId": "fixture-str", "capabilities": ["doc-lint"], "stepTypes": "verification", "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-str" } }
463
+ ],
464
+ "hostCapabilities": []
465
+ },
466
+ "expected": {
467
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
468
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
469
+ }
470
+ },
471
+ {
472
+ "id": "malformed-capability-empty-string",
473
+ "kind": "malformed",
474
+ "input": {
475
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
476
+ "neededCapabilities": ["doc-lint"],
477
+ "availableProviderMetadata": [
478
+ { "providerId": "fixture-empty", "capabilities": [""], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-empty" } }
479
+ ],
480
+ "hostCapabilities": []
481
+ },
482
+ "expected": {
483
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
484
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
485
+ }
486
+ },
487
+ {
488
+ "id": "malformed-partly-valid-emits-no-suggestions",
489
+ "kind": "malformed",
490
+ "input": {
491
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
492
+ "neededCapabilities": ["doc-lint"],
493
+ "availableProviderMetadata": [
494
+ { "providerId": "fixture-good", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-good" } },
495
+ { "providerId": "", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-bad" } }
496
+ ],
497
+ "hostCapabilities": []
498
+ },
499
+ "expected": {
500
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
501
+ "diagnosticPathPrefixes": ["availableProviderMetadata"]
502
+ }
503
+ },
504
+ {
505
+ "id": "malformed-unrelated-values-not-exposed-in-diagnostics",
506
+ "kind": "malformed",
507
+ "input": {
508
+ "activeStep": { "id": "verify-docs", "stepType": "verification" },
509
+ "neededCapabilities": ["doc-lint"],
510
+ "availableProviderMetadata": [
511
+ { "providerId": "", "capabilities": ["doc-lint"], "stepTypes": ["verification"], "requiresHostCapabilities": [], "locator": { "kind": "tool", "id": "fixture-sentinel" }, "secretNote": "SENTINEL-XYZ-42" }
512
+ ],
513
+ "hostCapabilities": []
514
+ },
515
+ "expected": {
516
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
517
+ "diagnosticPathPrefixes": ["availableProviderMetadata"],
518
+ "forbiddenText": ["SENTINEL-XYZ-42"]
519
+ }
520
+ },
521
+ {
522
+ "id": "malformed-multiple-errors-diagnostics-ordered-by-path",
523
+ "kind": "malformed",
524
+ "input": {
525
+ "neededCapabilities": ["doc-lint"],
526
+ "availableProviderMetadata": []
527
+ },
528
+ "expected": {
529
+ "unavailable": [{ "capability": "doc-lint", "reason": "invalid-input" }],
530
+ "diagnosticPathPrefixes": ["activeStep", "hostCapabilities"],
531
+ "minDiagnostics": 2
532
+ }
533
+ }
534
+ ]
535
+ }