@webex/http-core 3.12.0-next.7 → 3.12.0-next.9
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/.repo-context.json +590 -0
- package/.sdd/manifest.json +362 -0
- package/AGENTS.md +219 -0
- package/docs/adr/0001-fork-xhr-for-frozen-object-environments.md +111 -0
- package/docs/adr/index.md +26 -0
- package/docs/architecture.md +335 -0
- package/docs/getting-started.md +108 -0
- package/docs/index.md +46 -0
- package/docs/specs/README.md +79 -0
- package/package.json +8 -8
- package/schemas/repo-context.schema.json +796 -0
- package/src/docs/README.md +485 -0
- package/src/request/docs/README.md +481 -0
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./schemas/repo-context.schema.json",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"repository": {
|
|
5
|
+
"name": "@webex/http-core",
|
|
6
|
+
"purpose": "Promise-based core HTTP client for the Cisco Webex JS SDK: request execution through an interceptor pipeline, interchangeable Node and browser transports, an HTTP status to error-class taxonomy, upload/download progress events, and buffer file-type detection."
|
|
7
|
+
},
|
|
8
|
+
"commands": {
|
|
9
|
+
"compile": "yarn workspace @webex/http-core build:src",
|
|
10
|
+
"unit-test": "yarn workspace @webex/http-core test:unit",
|
|
11
|
+
"integration-test": "yarn workspace @webex/http-core test:integration",
|
|
12
|
+
"browser-test": "yarn workspace @webex/http-core test:browser",
|
|
13
|
+
"lint": "yarn workspace @webex/http-core test:style",
|
|
14
|
+
"test-all": "yarn workspace @webex/http-core test",
|
|
15
|
+
"deploy": "yarn workspace @webex/http-core deploy:npm",
|
|
16
|
+
"build": "[NEEDS HUMAN INPUT] -- no committed command runs the build and its tests together; `build` delegates to `build:src` (compile only) and `test` chains the style/unit/integration/browser tiers without building. Absence confirmed by the repository owner during bootstrap."
|
|
17
|
+
},
|
|
18
|
+
"public_interfaces": [
|
|
19
|
+
{
|
|
20
|
+
"name": "@webex/http-core package exports",
|
|
21
|
+
"kind": "package_export",
|
|
22
|
+
"source": "src/index.js",
|
|
23
|
+
"entrypoints": [
|
|
24
|
+
"request",
|
|
25
|
+
"defaults",
|
|
26
|
+
"protoprepareFetchOptions",
|
|
27
|
+
"setTimingsAndFetch",
|
|
28
|
+
"Interceptor",
|
|
29
|
+
"HttpStatusInterceptor",
|
|
30
|
+
"HttpError",
|
|
31
|
+
"ProgressEvent",
|
|
32
|
+
"detect"
|
|
33
|
+
],
|
|
34
|
+
"audience": "Other Webex JS SDK packages that make network calls",
|
|
35
|
+
"notes": "Verify names against src/index.js; the package ships no TypeScript declarations, so there is no generated API report to diff."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "npm package entry points",
|
|
39
|
+
"kind": "package_export",
|
|
40
|
+
"source": "package.json",
|
|
41
|
+
"entrypoints": [
|
|
42
|
+
"dist/index.js (main)",
|
|
43
|
+
"src/index.js (devMain)",
|
|
44
|
+
"dist/request/request.shim.js (browser override)"
|
|
45
|
+
],
|
|
46
|
+
"audience": "npm consumers and bundlers",
|
|
47
|
+
"notes": "The browser field substitutes the browser transport for the Node one at build time."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "package scripts",
|
|
51
|
+
"kind": "npm_scripts",
|
|
52
|
+
"source": "package.json",
|
|
53
|
+
"entrypoints": [
|
|
54
|
+
"build",
|
|
55
|
+
"build:src",
|
|
56
|
+
"test",
|
|
57
|
+
"test:unit",
|
|
58
|
+
"test:integration",
|
|
59
|
+
"test:browser",
|
|
60
|
+
"test:style",
|
|
61
|
+
"deploy:npm"
|
|
62
|
+
],
|
|
63
|
+
"audience": "Contributors and CI",
|
|
64
|
+
"notes": "Address each through the yarn workspace form, naming @webex/http-core and then the script key."
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"source_of_truth": [
|
|
68
|
+
{
|
|
69
|
+
"surface": "package export surface",
|
|
70
|
+
"paths": [
|
|
71
|
+
"src/index.js"
|
|
72
|
+
],
|
|
73
|
+
"generated_artifacts": [],
|
|
74
|
+
"refresh_with": [
|
|
75
|
+
"yarn workspace @webex/http-core build:src"
|
|
76
|
+
],
|
|
77
|
+
"validate_with": [
|
|
78
|
+
"yarn workspace @webex/http-core test:unit"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"surface": "HTTP error taxonomy",
|
|
83
|
+
"paths": [
|
|
84
|
+
"src/http-error.js",
|
|
85
|
+
"src/http-error-subtypes.js"
|
|
86
|
+
],
|
|
87
|
+
"generated_artifacts": [],
|
|
88
|
+
"refresh_with": [],
|
|
89
|
+
"validate_with": [
|
|
90
|
+
"yarn workspace @webex/http-core test:integration"
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"surface": "request pipeline and transports",
|
|
95
|
+
"paths": [
|
|
96
|
+
"src/request/index.js",
|
|
97
|
+
"src/request/utils.ts",
|
|
98
|
+
"src/request/request.js",
|
|
99
|
+
"src/request/request.shim.js"
|
|
100
|
+
],
|
|
101
|
+
"generated_artifacts": [],
|
|
102
|
+
"refresh_with": [],
|
|
103
|
+
"validate_with": [
|
|
104
|
+
"yarn workspace @webex/http-core test:unit",
|
|
105
|
+
"yarn workspace @webex/http-core test:integration",
|
|
106
|
+
"yarn workspace @webex/http-core test:browser"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"surface": "vendored XHR fork",
|
|
111
|
+
"paths": [
|
|
112
|
+
"src/lib/xhr.js"
|
|
113
|
+
],
|
|
114
|
+
"generated_artifacts": [],
|
|
115
|
+
"refresh_with": [],
|
|
116
|
+
"validate_with": [
|
|
117
|
+
"yarn workspace @webex/http-core test:browser"
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"surface": "module and repository specifications",
|
|
122
|
+
"paths": [
|
|
123
|
+
"docs",
|
|
124
|
+
"src/docs/README.md",
|
|
125
|
+
"src/request/docs/README.md",
|
|
126
|
+
".sdd/manifest.json"
|
|
127
|
+
],
|
|
128
|
+
"generated_artifacts": [],
|
|
129
|
+
"refresh_with": [
|
|
130
|
+
"Run the Repo Annotation coverage-review skill from the active installation"
|
|
131
|
+
],
|
|
132
|
+
"validate_with": [
|
|
133
|
+
"Run the Repo Annotation spec-validator skill from the active installation"
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"generated_artifacts": [
|
|
138
|
+
{
|
|
139
|
+
"path": "dist",
|
|
140
|
+
"generated_from": "src",
|
|
141
|
+
"refresh_with": "yarn workspace @webex/http-core build:src"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"path": ".sdd/templates/repo-standards/template-map.json",
|
|
145
|
+
"generated_from": "WebexTools/repo-standards@d89a7fe59126ae3ad9bac9ca352aa7f12b4c85dc",
|
|
146
|
+
"refresh_with": "Run the Repo Annotation template setup from the active plugin installation to re-resolve the bundled Repo Standards snapshot"
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"validation_matrix": [
|
|
150
|
+
{
|
|
151
|
+
"paths": [
|
|
152
|
+
"src/**"
|
|
153
|
+
],
|
|
154
|
+
"minimum": [
|
|
155
|
+
"yarn workspace @webex/http-core test:unit"
|
|
156
|
+
],
|
|
157
|
+
"recommended": [
|
|
158
|
+
"yarn workspace @webex/http-core test:style",
|
|
159
|
+
"yarn workspace @webex/http-core test:integration"
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"paths": [
|
|
164
|
+
"src/request/request.js",
|
|
165
|
+
"src/request/request.shim.js"
|
|
166
|
+
],
|
|
167
|
+
"minimum": [
|
|
168
|
+
"yarn workspace @webex/http-core test:unit"
|
|
169
|
+
],
|
|
170
|
+
"recommended": [
|
|
171
|
+
"yarn workspace @webex/http-core test:integration",
|
|
172
|
+
"yarn workspace @webex/http-core test:browser"
|
|
173
|
+
]
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"paths": [
|
|
177
|
+
"src/lib/xhr.js"
|
|
178
|
+
],
|
|
179
|
+
"minimum": [
|
|
180
|
+
"yarn workspace @webex/http-core test:browser"
|
|
181
|
+
],
|
|
182
|
+
"recommended": [
|
|
183
|
+
"yarn workspace @webex/http-core test:integration"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"paths": [
|
|
188
|
+
"package.json"
|
|
189
|
+
],
|
|
190
|
+
"minimum": [
|
|
191
|
+
"yarn workspace @webex/http-core build:src"
|
|
192
|
+
],
|
|
193
|
+
"recommended": [
|
|
194
|
+
"yarn workspace @webex/http-core test"
|
|
195
|
+
]
|
|
196
|
+
}
|
|
197
|
+
],
|
|
198
|
+
"change_impact": [
|
|
199
|
+
{
|
|
200
|
+
"paths": [
|
|
201
|
+
"src/request/request.js"
|
|
202
|
+
],
|
|
203
|
+
"affects": [
|
|
204
|
+
"Node transport behavior only; the browser transport is a separate file"
|
|
205
|
+
],
|
|
206
|
+
"refresh_with": [],
|
|
207
|
+
"validate_with": [
|
|
208
|
+
"yarn workspace @webex/http-core test:integration"
|
|
209
|
+
],
|
|
210
|
+
"avoid_direct_edits": [
|
|
211
|
+
"dist/request/request.js"
|
|
212
|
+
],
|
|
213
|
+
"notes": "Mirror the change in src/request/request.shim.js or the platforms diverge silently."
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"paths": [
|
|
217
|
+
"src/request/request.shim.js"
|
|
218
|
+
],
|
|
219
|
+
"affects": [
|
|
220
|
+
"Browser transport behavior only"
|
|
221
|
+
],
|
|
222
|
+
"refresh_with": [],
|
|
223
|
+
"validate_with": [
|
|
224
|
+
"yarn workspace @webex/http-core test:browser"
|
|
225
|
+
],
|
|
226
|
+
"avoid_direct_edits": [
|
|
227
|
+
"dist/request/request.shim.js"
|
|
228
|
+
],
|
|
229
|
+
"notes": "Mirror the change in src/request/request.js or the platforms diverge silently."
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"paths": [
|
|
233
|
+
"src/http-error-subtypes.js"
|
|
234
|
+
],
|
|
235
|
+
"affects": [
|
|
236
|
+
"Every consuming package that branches on an HttpError subtype"
|
|
237
|
+
],
|
|
238
|
+
"refresh_with": [],
|
|
239
|
+
"validate_with": [
|
|
240
|
+
"yarn workspace @webex/http-core test:integration"
|
|
241
|
+
],
|
|
242
|
+
"avoid_direct_edits": [
|
|
243
|
+
"dist/http-error-subtypes.js"
|
|
244
|
+
],
|
|
245
|
+
"notes": "Renaming or reparenting a subtype is a breaking change for consumers."
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"paths": [
|
|
249
|
+
"src/index.js"
|
|
250
|
+
],
|
|
251
|
+
"affects": [
|
|
252
|
+
"The published export surface consumed by six sibling workspace packages"
|
|
253
|
+
],
|
|
254
|
+
"refresh_with": [
|
|
255
|
+
"yarn workspace @webex/http-core build:src"
|
|
256
|
+
],
|
|
257
|
+
"validate_with": [
|
|
258
|
+
"yarn workspace @webex/http-core test:unit"
|
|
259
|
+
],
|
|
260
|
+
"avoid_direct_edits": [
|
|
261
|
+
"dist/index.js"
|
|
262
|
+
],
|
|
263
|
+
"notes": "No declaration file exists, so export changes are visible only by reading the source."
|
|
264
|
+
}
|
|
265
|
+
],
|
|
266
|
+
"glossary": [
|
|
267
|
+
{
|
|
268
|
+
"term": "interceptor",
|
|
269
|
+
"definition": "An object with any of onRequest, onRequestError, onResponse, onResponseError, folded over each request in both directions.",
|
|
270
|
+
"notes": "Base class at src/lib/interceptor.js; the fold lives in src/request/utils.ts."
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"term": "transport",
|
|
274
|
+
"definition": "The platform-specific function that performs network I/O.",
|
|
275
|
+
"notes": "One of src/request/request.js or src/request/request.shim.js, selected by the browser field in package.json."
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"term": "statusCode 0",
|
|
279
|
+
"definition": "The package's normalized representation of a transport, network, or CORS failure.",
|
|
280
|
+
"notes": "Not an HTTP status; maps to NetworkOrCORSError."
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"term": "subtype",
|
|
284
|
+
"definition": "An HttpError descendant selected from a status code by select().",
|
|
285
|
+
"notes": "An unmapped status falls back to the category default, such as 400 for an unmapped 4xx."
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"term": "defaults()",
|
|
289
|
+
"definition": "A curried client factory that returns a new request function with the given options merged underneath per-call options.",
|
|
290
|
+
"notes": "Not an options object."
|
|
291
|
+
}
|
|
292
|
+
],
|
|
293
|
+
"evidence_rules": [
|
|
294
|
+
{
|
|
295
|
+
"claim_category": "command_name",
|
|
296
|
+
"sources": [
|
|
297
|
+
"package.json"
|
|
298
|
+
],
|
|
299
|
+
"requirement": "The script key must exist in package.json and must be addressed through the yarn workspace form naming @webex/http-core.",
|
|
300
|
+
"notes": "No command runs the build and its tests together."
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"claim_category": "import_path",
|
|
304
|
+
"sources": [
|
|
305
|
+
"src"
|
|
306
|
+
],
|
|
307
|
+
"requirement": "The file must exist under src/ as written, including its extension.",
|
|
308
|
+
"notes": "src/request/utils.ts is the only TypeScript source."
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"claim_category": "behavior_claim",
|
|
312
|
+
"sources": [
|
|
313
|
+
"src",
|
|
314
|
+
"test"
|
|
315
|
+
],
|
|
316
|
+
"requirement": "Cite a source file and, where one exists, a test that invokes or observes the behavior.",
|
|
317
|
+
"notes": "Commit history is not acceptable evidence for this repository."
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"claim_category": "placeholder_token",
|
|
321
|
+
"sources": [
|
|
322
|
+
"src",
|
|
323
|
+
"package.json"
|
|
324
|
+
],
|
|
325
|
+
"requirement": "Resolve every placeholder against a real repository value before emitting it.",
|
|
326
|
+
"notes": "Resolve against package.json or the source file; never emit a bracketed token."
|
|
327
|
+
}
|
|
328
|
+
],
|
|
329
|
+
"negative_guidance": [
|
|
330
|
+
{
|
|
331
|
+
"rule": "Do not cite commit messages or pull requests as rationale.",
|
|
332
|
+
"why": "History for this path begins at the 2022 workspace migration while the code predates it, so it cannot explain why current behavior exists."
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"rule": "Do not assume a 404 always fails.",
|
|
336
|
+
"why": "src/interceptors/http-status.js resolves two redirect body shapes as successes."
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"rule": "Do not treat a resolved promise as a successful request.",
|
|
340
|
+
"why": "Transports resolve a statusCode 0 response for network failures instead of rejecting."
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"rule": "Do not change one transport without the other.",
|
|
344
|
+
"why": "package.json swaps them at build time, so divergence is invisible on the platform you are testing."
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"rule": "Do not infer a coverage threshold for this package.",
|
|
348
|
+
"why": "The repository owner confirmed no coverage gate applies; the shared Jest config sets collectCoverage false."
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"rule": "Do not reformat src/lib/xhr.js to repository style.",
|
|
352
|
+
"why": "It is a vendored fork deliberately held close to upstream, with a whole-file eslint-disable."
|
|
353
|
+
}
|
|
354
|
+
],
|
|
355
|
+
"confidence_policy": {
|
|
356
|
+
"high": {
|
|
357
|
+
"action": "update",
|
|
358
|
+
"expectation": "A source file and a test both support the claim."
|
|
359
|
+
},
|
|
360
|
+
"medium": {
|
|
361
|
+
"action": "narrow-scope",
|
|
362
|
+
"expectation": "Source supports the claim but no test does; state the gap rather than implying coverage."
|
|
363
|
+
},
|
|
364
|
+
"low": {
|
|
365
|
+
"action": "noop",
|
|
366
|
+
"expectation": "Neither source nor tests settle it; record a gap and ask rather than inferring."
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
"repository_topology": {
|
|
370
|
+
"main_entrypoints": [
|
|
371
|
+
{
|
|
372
|
+
"name": "package entry",
|
|
373
|
+
"path": "src/index.js",
|
|
374
|
+
"purpose": "Builds the exported clients and re-exports the public surface.",
|
|
375
|
+
"notes": "Published as dist/index.js."
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"name": "request pipeline",
|
|
379
|
+
"path": "src/request/index.js",
|
|
380
|
+
"purpose": "Applies interceptors around a transport.",
|
|
381
|
+
"notes": "Internal to the package."
|
|
382
|
+
}
|
|
383
|
+
],
|
|
384
|
+
"workspace_packages": [
|
|
385
|
+
{
|
|
386
|
+
"name": "@webex/http-core",
|
|
387
|
+
"paths": [
|
|
388
|
+
"."
|
|
389
|
+
],
|
|
390
|
+
"notes": "One workspace member of the webex-js-sdk monorepo; onboarded standalone."
|
|
391
|
+
}
|
|
392
|
+
],
|
|
393
|
+
"source_surfaces": [
|
|
394
|
+
{
|
|
395
|
+
"name": "package surface",
|
|
396
|
+
"paths": [
|
|
397
|
+
"src/index.js",
|
|
398
|
+
"src/http-error.js",
|
|
399
|
+
"src/http-error-subtypes.js",
|
|
400
|
+
"src/progress-event.js",
|
|
401
|
+
"src/lib"
|
|
402
|
+
],
|
|
403
|
+
"notes": "Specified at src/docs/README.md."
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"name": "request pipeline",
|
|
407
|
+
"paths": [
|
|
408
|
+
"src/request"
|
|
409
|
+
],
|
|
410
|
+
"notes": "Specified at src/request/docs/README.md."
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"name": "tests",
|
|
414
|
+
"paths": [
|
|
415
|
+
"test/unit",
|
|
416
|
+
"test/integration"
|
|
417
|
+
],
|
|
418
|
+
"notes": "Unit runs on Jest; integration runs on Mocha and, via Karma, in a browser."
|
|
419
|
+
}
|
|
420
|
+
],
|
|
421
|
+
"generated_surfaces": [
|
|
422
|
+
{
|
|
423
|
+
"name": "build output",
|
|
424
|
+
"paths": [
|
|
425
|
+
"dist"
|
|
426
|
+
],
|
|
427
|
+
"generated_from": "src",
|
|
428
|
+
"refresh_with": "yarn workspace @webex/http-core build:src",
|
|
429
|
+
"notes": "Not committed; do not edit."
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
"name": "Repo Standards template snapshot",
|
|
433
|
+
"paths": [
|
|
434
|
+
".sdd/templates/repo-standards"
|
|
435
|
+
],
|
|
436
|
+
"generated_from": "WebexTools/repo-standards@d89a7fe59126ae3ad9bac9ca352aa7f12b4c85dc",
|
|
437
|
+
"refresh_with": "Run the Repo Annotation template setup from the active plugin installation to re-resolve the bundled Repo Standards snapshot",
|
|
438
|
+
"notes": "Bundled, checksum-verified snapshot resolved by Repo Annotation setup. Authoring templates stay hidden here and are never published into docs/."
|
|
439
|
+
}
|
|
440
|
+
],
|
|
441
|
+
"sync_paths": [
|
|
442
|
+
{
|
|
443
|
+
"source": "src/request/request.js",
|
|
444
|
+
"targets": [
|
|
445
|
+
"src/request/request.shim.js"
|
|
446
|
+
],
|
|
447
|
+
"mechanism": "Manual; the browser field in package.json selects between them at build time.",
|
|
448
|
+
"notes": "Behavioral parity between the two transports is this package's primary constraint."
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"source": "WebexTools/repo-standards@d89a7fe59126ae3ad9bac9ca352aa7f12b4c85dc",
|
|
452
|
+
"targets": [
|
|
453
|
+
".sdd/templates/repo-standards"
|
|
454
|
+
],
|
|
455
|
+
"mechanism": "Run the Repo Annotation template setup from the active plugin installation to re-resolve the bundled Repo Standards snapshot",
|
|
456
|
+
"notes": "One-way: the upstream snapshot is resolved into the target. Local edits to the snapshot are overwritten on the next resolve."
|
|
457
|
+
}
|
|
458
|
+
],
|
|
459
|
+
"validation_entrypoints": [
|
|
460
|
+
{
|
|
461
|
+
"name": "unit",
|
|
462
|
+
"command": "yarn workspace @webex/http-core test:unit",
|
|
463
|
+
"scope": "test/unit on Jest",
|
|
464
|
+
"notes": "Self-contained; no external dependencies."
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"name": "integration",
|
|
468
|
+
"command": "yarn workspace @webex/http-core test:integration",
|
|
469
|
+
"scope": "test/integration on Mocha",
|
|
470
|
+
"notes": "Needs a local fixture server and provisioned Webex test users."
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"name": "browser",
|
|
474
|
+
"command": "yarn workspace @webex/http-core test:browser",
|
|
475
|
+
"scope": "test/integration on Karma",
|
|
476
|
+
"notes": "Exercises the browser transport."
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"name": "lint",
|
|
480
|
+
"command": "yarn workspace @webex/http-core test:style",
|
|
481
|
+
"scope": "eslint over src",
|
|
482
|
+
"notes": "src/lib/xhr.js is intentionally exempt."
|
|
483
|
+
}
|
|
484
|
+
]
|
|
485
|
+
},
|
|
486
|
+
"folder_readme_contract": {
|
|
487
|
+
"required_sections": [
|
|
488
|
+
"purpose and boundary",
|
|
489
|
+
"structure and key files",
|
|
490
|
+
"public surface",
|
|
491
|
+
"verification"
|
|
492
|
+
],
|
|
493
|
+
"rules": [
|
|
494
|
+
"Orient before detailing: say what the module owns and what it does not before describing internals.",
|
|
495
|
+
"Cite a repository-relative file path for every claim.",
|
|
496
|
+
"Keep behavior owned by a sub-module in that sub-module's document and reference it by contract."
|
|
497
|
+
],
|
|
498
|
+
"example_policy": "Include an example only when it is copied from a test or source file that exists.",
|
|
499
|
+
"fallback": "When neither source nor tests settle a question, record it as a gap instead of writing prose that implies coverage."
|
|
500
|
+
},
|
|
501
|
+
"regression_feedback_rules": [
|
|
502
|
+
{
|
|
503
|
+
"trigger": "A defect appears on one platform because only one transport was changed.",
|
|
504
|
+
"required_followups": [
|
|
505
|
+
"Mirror the fix in the sibling transport",
|
|
506
|
+
"Add a test on the previously uncovered side",
|
|
507
|
+
"Record the parity requirement in src/request/docs/README.md"
|
|
508
|
+
],
|
|
509
|
+
"notes": "This is the package's most likely defect class."
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"trigger": "A consumer breaks on an HttpError subtype change.",
|
|
513
|
+
"required_followups": [
|
|
514
|
+
"Restore the subtype name and parent",
|
|
515
|
+
"Add a regression test in test/integration/spec/http-error.js",
|
|
516
|
+
"Treat the change as breaking in release notes"
|
|
517
|
+
],
|
|
518
|
+
"notes": "Subtype identity is a published contract."
|
|
519
|
+
}
|
|
520
|
+
],
|
|
521
|
+
"surface_owners": [
|
|
522
|
+
{
|
|
523
|
+
"surface": "package export surface",
|
|
524
|
+
"owner": "Cisco Webex for Developers",
|
|
525
|
+
"edit_boundary": "src/index.js and the files it re-exports; changes are breaking for six sibling packages."
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"surface": "request pipeline and transports",
|
|
529
|
+
"owner": "Cisco Webex for Developers",
|
|
530
|
+
"edit_boundary": "src/request; both transports must change together."
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"surface": "vendored XHR fork",
|
|
534
|
+
"owner": "Upstream naugtur/xhr, vendored",
|
|
535
|
+
"edit_boundary": "src/lib/xhr.js; port upstream changes as discrete diffs and do not reformat."
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"surface": "shared build, lint, and test configuration",
|
|
539
|
+
"owner": "webex-js-sdk workspace",
|
|
540
|
+
"edit_boundary": "Change upstream in the workspace config packages, not in the local passthrough files."
|
|
541
|
+
}
|
|
542
|
+
],
|
|
543
|
+
"do_not_edit": [
|
|
544
|
+
"dist",
|
|
545
|
+
"node_modules",
|
|
546
|
+
".generated"
|
|
547
|
+
],
|
|
548
|
+
"marker_scopes": {
|
|
549
|
+
"sdd-generated": [
|
|
550
|
+
"AGENTS.md",
|
|
551
|
+
"docs",
|
|
552
|
+
"src/docs/README.md",
|
|
553
|
+
"src/request/docs/README.md"
|
|
554
|
+
]
|
|
555
|
+
},
|
|
556
|
+
"fallback_rules": [
|
|
557
|
+
"When a command is not in package.json, stop and ask rather than inventing one.",
|
|
558
|
+
"When only one transport's behavior is known, state the platform explicitly instead of generalizing.",
|
|
559
|
+
"When rationale is not in the code or tests, record a gap; commit history is not a substitute.",
|
|
560
|
+
"When a change touches both transports, run the unit, integration, and browser tiers before reporting done."
|
|
561
|
+
],
|
|
562
|
+
"downstream_context_pack": {
|
|
563
|
+
"required_human_surfaces": [
|
|
564
|
+
"AGENTS.md",
|
|
565
|
+
"docs/index.md",
|
|
566
|
+
"docs/architecture.md",
|
|
567
|
+
"docs/specs/README.md",
|
|
568
|
+
"src/docs/README.md",
|
|
569
|
+
"src/request/docs/README.md"
|
|
570
|
+
],
|
|
571
|
+
"required_agent_operational_surfaces": [
|
|
572
|
+
"commands",
|
|
573
|
+
"validation_matrix",
|
|
574
|
+
"change_impact",
|
|
575
|
+
"negative_guidance"
|
|
576
|
+
],
|
|
577
|
+
"required_machine_readable_surface": ".sdd/manifest.json",
|
|
578
|
+
"recommended_machine_readable_sections": [
|
|
579
|
+
"public_interfaces",
|
|
580
|
+
"change_impact",
|
|
581
|
+
"glossary",
|
|
582
|
+
"evidence_rules",
|
|
583
|
+
"negative_guidance",
|
|
584
|
+
"confidence_policy",
|
|
585
|
+
"repository_topology",
|
|
586
|
+
"folder_readme_contract",
|
|
587
|
+
"regression_feedback_rules"
|
|
588
|
+
]
|
|
589
|
+
}
|
|
590
|
+
}
|