PluginProbe
404 Solution / trunk
404 Solution vtrunk
4.3.5 4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.2.0 4.1.19 4.1.18 4.1.17 4.1.16 4.1.15 4.1.13 4.1.12 4.1.11 4.1.10 4.1.9 4.1.8 4.1.7 4.1.6 4.1.5 4.1.4 4.1.3 trunk 2.30.0 All 109 releases
404-solution / contracts / contracts.json

contracts.json in 404 Solution trunk, at contracts/contracts.json

770 lines 26.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 {
2 "$schema": "~/.claude/templates/quality-gates/shared/contracts.schema.json",
3 "contracts": [
4 {
5 "id": "error-report",
6 "description": "Plugin error report with diagnostic context including debug log",
7 "schema": "schemas/report.schema.json",
8 "direction": "client-to-server",
9 "producer": {
10 "file": "includes/FeedbackTransport.php",
11 "test": [
12 "tests/FeedbackTransportSupportPayloadTest.php",
13 "tests/FeedbackPayloadSchemaContractTest.php"
14 ]
15 },
16 "consumer": {
17 "file": "src/routes/reports.js",
18 "test": "tests/FeedbackPayloadSchemaContractTest.php"
19 },
20 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
21 "fixtures": {
22 "valid": [
23 "fixtures/error-report.valid.json"
24 ],
25 "invalid": [
26 "fixtures/error-report.invalid-missing-debug-log.json"
27 ]
28 }
29 },
30 {
31 "id": "heartbeat",
32 "description": "Periodic health check from plugin to server",
33 "schema": "schemas/report.schema.json",
34 "direction": "client-to-server",
35 "producer": {
36 "file": "includes/FeedbackTransport.php",
37 "test": "tests/FeedbackPayloadSchemaContractTest.php"
38 },
39 "consumer": {
40 "file": "src/routes/reports.js",
41 "test": "tests/FeedbackPayloadSchemaContractTest.php"
42 },
43 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
44 "fixtures": {
45 "valid": [
46 "fixtures/heartbeat.valid.json"
47 ],
48 "invalid": [
49 "fixtures/heartbeat.invalid-missing-version.json"
50 ]
51 }
52 },
53 {
54 "id": "uninstall-report",
55 "description": "Plugin uninstall feedback with reason and optional contact email",
56 "schema": "schemas/report.schema.json",
57 "direction": "client-to-server",
58 "producer": {
59 "file": "includes/FeedbackTransport.php",
60 "test": "tests/FeedbackPayloadSchemaContractTest.php"
61 },
62 "consumer": {
63 "file": "src/routes/reports.js",
64 "test": "tests/FeedbackPayloadSchemaContractTest.php"
65 },
66 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
67 "fixtures": {
68 "valid": [
69 "fixtures/uninstall-report.valid.json"
70 ],
71 "invalid": [
72 "fixtures/uninstall-report.invalid-missing-version.json"
73 ]
74 }
75 },
76 {
77 "id": "support-request",
78 "description": "User support request with message, reply email, and debug log excerpt",
79 "schema": "schemas/report.schema.json",
80 "direction": "client-to-server",
81 "producer": {
82 "file": "includes/ajax/Ajax_SupportRequest.php",
83 "test": [
84 "tests/FeedbackTransportSupportRequestPayloadTest.php",
85 "tests/FeedbackPayloadSchemaContractTest.php"
86 ]
87 },
88 "consumer": {
89 "file": "src/routes/reports.js",
90 "test": "tests/FeedbackPayloadSchemaContractTest.php"
91 },
92 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
93 "fixtures": {
94 "valid": [
95 "fixtures/support-request.valid.json"
96 ],
97 "invalid": [
98 "fixtures/support-request.invalid-missing-user-message.json"
99 ]
100 }
101 },
102 {
103 "id": "ajax-update-pagination",
104 "description": "Admin table pagination AJAX request",
105 "schema": "schemas/ajax-update-pagination.schema.json",
106 "direction": "client-to-server",
107 "producer": {
108 "file": "includes/ajax/view_updater_pagination.js",
109 "test": "tests-js/ajax-response-validation.test.js"
110 },
111 "consumer": {
112 "file": "includes/ajax/ViewUpdater.php",
113 "test": "tests-js/ajax-response-validation.test.js"
114 },
115 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
116 "fixtures": {
117 "valid": [
118 "fixtures/ajax-update-pagination.valid.json"
119 ],
120 "invalid": [
121 "fixtures/ajax-update-pagination.invalid-missing-subpage.json"
122 ]
123 }
124 },
125 {
126 "id": "ajax-refresh-stats-dashboard",
127 "description": "Dashboard stats refresh AJAX request",
128 "schema": "schemas/ajax-refresh-stats-dashboard.schema.json",
129 "direction": "client-to-server",
130 "producer": {
131 "file": "includes/ajax/view_updater_stats.js",
132 "test": "tests-js/ajax-response-validation.test.js"
133 },
134 "consumer": {
135 "file": "includes/ajax/ViewUpdater.php",
136 "test": "tests-js/ajax-response-validation.test.js"
137 },
138 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
139 "fixtures": {
140 "valid": [
141 "fixtures/ajax-refresh-stats.valid.json"
142 ],
143 "invalid": [
144 "fixtures/ajax-refresh-stats.invalid-missing-nonce.json"
145 ]
146 }
147 },
148 {
149 "id": "ajax-refresh-health-bar",
150 "description": "Health bar refresh AJAX request",
151 "schema": "schemas/ajax-refresh-health-bar.schema.json",
152 "direction": "client-to-server",
153 "producer": {
154 "file": "includes/ajax/view_updater_stats.js",
155 "test": "tests-js/ajax-response-validation.test.js"
156 },
157 "consumer": {
158 "file": "includes/ajax/ViewUpdater.php",
159 "test": "tests-js/ajax-response-validation.test.js"
160 },
161 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
162 "fixtures": {
163 "valid": [
164 "fixtures/ajax-refresh-health-bar.valid.json"
165 ],
166 "invalid": [
167 "fixtures/ajax-refresh-health-bar.invalid-missing-nonce.json"
168 ]
169 }
170 },
171 {
172 "id": "ajax-run-lazy-backfill",
173 "description": "Admin table page-load lazy denorm and sort-key backfill request",
174 "schema": "schemas/ajax-run-lazy-backfill.schema.json",
175 "direction": "client-to-server",
176 "producer": {
177 "file": "includes/ajax/view_updater_lazy_backfill.js",
178 "test": [
179 "tests/HealthBarAjaxDecouplingTest.php",
180 "tests-js/lazy-backfill-polling.test.js"
181 ]
182 },
183 "consumer": {
184 "file": "includes/ajax/Ajax_RunLazyBackfill.php",
185 "test": [
186 "tests/RedirectsDenormBackfillIntegrationTest.php",
187 "tests/AjaxRuntimeContractValidationTest.php"
188 ]
189 },
190 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
191 "fixtures": {
192 "valid": [
193 "fixtures/ajax-run-lazy-backfill.valid.json"
194 ],
195 "invalid": [
196 "fixtures/ajax-run-lazy-backfill.invalid-missing-nonce.json"
197 ]
198 }
199 },
200 {
201 "id": "ajax-support-request",
202 "description": "Support request FormData AJAX from admin modal",
203 "schema": "schemas/ajax-support-request.schema.json",
204 "direction": "client-to-server",
205 "producer": {
206 "file": "includes/ajax/SupportRequest.js",
207 "test": "tests-js/support-request-button.test.js"
208 },
209 "consumer": {
210 "file": "includes/ajax/Ajax_SupportRequest.php",
211 "test": "tests-js/support-request-button.test.js"
212 },
213 "parityTest": "tests-js/support-request-button.test.js",
214 "fixtures": {
215 "valid": [
216 "fixtures/ajax-support-request.valid.json"
217 ],
218 "invalid": [
219 "fixtures/ajax-support-request.invalid-bad-trigger.json"
220 ]
221 }
222 },
223 {
224 "id": "ajax-support-request-preview",
225 "description": "Support request preview read-only AJAX",
226 "schema": "schemas/ajax-support-request-preview.schema.json",
227 "direction": "client-to-server",
228 "producer": {
229 "file": "includes/ajax/SupportRequest.js",
230 "test": "tests-js/support-request-button.test.js"
231 },
232 "consumer": {
233 "file": "includes/ajax/Ajax_SupportRequestPreview.php",
234 "test": "tests-js/support-request-button.test.js"
235 },
236 "parityTest": "tests-js/support-request-button.test.js",
237 "fixtures": {
238 "valid": [
239 "fixtures/ajax-support-request-preview.valid.json"
240 ],
241 "invalid": [
242 "fixtures/ajax-support-request-preview.invalid-missing-trigger.json"
243 ]
244 }
245 },
246 {
247 "id": "ajax-cross-plugin-preview",
248 "description": "Cross-Plugin Importer preview AJAX from admin stats page",
249 "schema": "schemas/ajax-cross-plugin-preview.schema.json",
250 "direction": "client-to-server",
251 "producer": {
252 "file": "includes/ViewTrait_Stats.php",
253 "test": "tests/AjaxCrossPluginImporterContractTest.php"
254 },
255 "consumer": {
256 "file": "includes/ajax/Ajax_CrossPluginImporter.php",
257 "test": "tests/AjaxCrossPluginImporterContractTest.php"
258 },
259 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
260 "fixtures": {
261 "valid": [
262 "fixtures/ajax-cross-plugin-preview.valid.json"
263 ],
264 "invalid": [
265 "fixtures/ajax-cross-plugin-preview.invalid-bad-source.json"
266 ]
267 }
268 },
269 {
270 "id": "ajax-engine-profiles",
271 "description": "Engine Profile CRUD AJAX from admin engine profiles page",
272 "schema": "schemas/ajax-engine-profiles.schema.json",
273 "direction": "client-to-server",
274 "producer": {
275 "file": "includes/ajax/ajax-engine-profiles.js",
276 "test": "tests/AjaxEngineProfilesContractTest.php"
277 },
278 "consumer": {
279 "file": "includes/ajax/Ajax_EngineProfiles.php",
280 "test": "tests/AjaxEngineProfilesContractTest.php"
281 },
282 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
283 "fixtures": {
284 "valid": [
285 "fixtures/ajax-engine-profiles.valid.json"
286 ],
287 "invalid": [
288 "fixtures/ajax-engine-profiles.invalid-missing-nonce.json"
289 ]
290 }
291 },
292 {
293 "id": "ajax-update-options",
294 "description": "Plugin options update AJAX from admin settings page",
295 "schema": "schemas/ajax-update-options.schema.json",
296 "direction": "client-to-server",
297 "producer": {
298 "file": "includes/js/general.js",
299 "test": "tests/AjaxUpdateOptionsContractTest.php"
300 },
301 "consumer": {
302 "file": "includes/ajax/Ajax_Php.php",
303 "test": "tests/AjaxUpdateOptionsContractTest.php"
304 },
305 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
306 "fixtures": {
307 "valid": [
308 "fixtures/ajax-update-options.valid.json"
309 ],
310 "invalid": [
311 "fixtures/ajax-update-options.invalid-missing-nonce.json"
312 ]
313 }
314 },
315 {
316 "id": "ajax-restore-defaults",
317 "description": "Restore plugin settings to defaults AJAX from admin settings page",
318 "schema": "schemas/ajax-restore-defaults.schema.json",
319 "direction": "client-to-server",
320 "producer": {
321 "file": "includes/ajax/RestoreDefaults.js",
322 "test": "tests/SettingsRestoreDefaultsActionTest.php"
323 },
324 "consumer": {
325 "file": "includes/ajax/Ajax_RestoreDefaults.php",
326 "test": "tests/SettingsRestoreDefaultsActionTest.php"
327 },
328 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
329 "fixtures": {
330 "valid": [
331 "fixtures/ajax-restore-defaults.valid.json"
332 ],
333 "invalid": [
334 "fixtures/ajax-restore-defaults.invalid-missing-nonce.json"
335 ]
336 }
337 },
338 {
339 "id": "ajax-privacy-export",
340 "description": "Self-service diagnostic data export AJAX from the plugin privacy UI",
341 "schema": "schemas/ajax-privacy-export.schema.json",
342 "direction": "client-to-server",
343 "producer": {
344 "file": "includes/ajax/Ajax_PrivacyExport.php",
345 "test": "tests/AjaxPrivacyDsrTest.php"
346 },
347 "consumer": {
348 "file": "includes/ajax/Ajax_PrivacyExport.php",
349 "test": "tests/AjaxPrivacyDsrTest.php"
350 },
351 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
352 "fixtures": {
353 "valid": [
354 "fixtures/ajax-privacy-export.valid.json"
355 ],
356 "invalid": [
357 "fixtures/ajax-privacy-export.invalid-missing-nonce.json"
358 ]
359 }
360 },
361 {
362 "id": "ajax-privacy-delete",
363 "description": "Self-service diagnostic data deletion AJAX from the plugin privacy UI",
364 "schema": "schemas/ajax-privacy-delete.schema.json",
365 "direction": "client-to-server",
366 "producer": {
367 "file": "includes/ajax/Ajax_PrivacyDelete.php",
368 "test": "tests/AjaxPrivacyDsrTest.php"
369 },
370 "consumer": {
371 "file": "includes/ajax/Ajax_PrivacyDelete.php",
372 "test": "tests/AjaxPrivacyDsrTest.php"
373 },
374 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
375 "fixtures": {
376 "valid": [
377 "fixtures/ajax-privacy-delete.valid.json"
378 ],
379 "invalid": [
380 "fixtures/ajax-privacy-delete.invalid-missing-confirm.json"
381 ]
382 }
383 },
384 {
385 "id": "ajax-settings-mode-toggle",
386 "description": "Simple/Advanced settings mode toggle AJAX",
387 "schema": "schemas/ajax-settings-mode-toggle.schema.json",
388 "direction": "client-to-server",
389 "producer": {
390 "file": "includes/ajax/SettingsModeToggle.js",
391 "test": "tests/AjaxSettingsModeToggleTest.php"
392 },
393 "consumer": {
394 "file": "includes/ajax/Ajax_SettingsModeToggle.php",
395 "test": "tests/AjaxSettingsModeToggleTest.php"
396 },
397 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
398 "fixtures": {
399 "valid": [
400 "fixtures/ajax-settings-mode-toggle.valid.json"
401 ],
402 "invalid": [
403 "fixtures/ajax-settings-mode-toggle.invalid-bad-mode.json"
404 ]
405 }
406 },
407 {
408 "id": "ajax-suggestion-compute",
409 "description": "Background suggestion computation triggered server-side via wp_remote_post",
410 "schema": "schemas/ajax-suggestion-compute.schema.json",
411 "direction": "client-to-server",
412 "producer": {
413 "file": "includes/SpellChecker.php",
414 "test": "tests/AjaxSuggestionComputeContractTest.php"
415 },
416 "consumer": {
417 "file": "includes/ajax/Ajax_SuggestionCompute.php",
418 "test": "tests/AjaxSuggestionComputeContractTest.php"
419 },
420 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
421 "fixtures": {
422 "valid": [
423 "fixtures/ajax-suggestion-compute.valid.json"
424 ],
425 "invalid": [
426 "fixtures/ajax-suggestion-compute.invalid-missing-token.json"
427 ]
428 }
429 },
430 {
431 "id": "ajax-suggestion-polling",
432 "description": "Public-facing 404 page suggestion polling AJAX",
433 "schema": "schemas/ajax-suggestion-polling.schema.json",
434 "direction": "client-to-server",
435 "producer": {
436 "file": "includes/ajax/SuggestionPolling.js",
437 "test": "tests/AjaxSuggestionPollingJsonContractTest.php"
438 },
439 "consumer": {
440 "file": "includes/ajax/Ajax_SuggestionPolling.php",
441 "test": "tests/AjaxSuggestionPollingJsonContractTest.php"
442 },
443 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
444 "fixtures": {
445 "valid": [
446 "fixtures/ajax-suggestion-polling.valid.json"
447 ],
448 "invalid": [
449 "fixtures/ajax-suggestion-polling.invalid-missing-url.json"
450 ]
451 }
452 },
453 {
454 "id": "ajax-trash-link",
455 "description": "Trash/restore redirect AJAX from admin redirects table",
456 "schema": "schemas/ajax-trash-link.schema.json",
457 "direction": "client-to-server",
458 "producer": {
459 "file": "includes/ajax/trash_link_ajax.js",
460 "test": "tests/AjaxTrashLinkContractTest.php"
461 },
462 "consumer": {
463 "file": "includes/ajax/Ajax_TrashLink.php",
464 "test": "tests/AjaxTrashLinkContractTest.php"
465 },
466 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
467 "fixtures": {
468 "valid": [
469 "fixtures/ajax-trash-link.valid.json"
470 ],
471 "invalid": [
472 "fixtures/ajax-trash-link.invalid-missing-id.json"
473 ]
474 }
475 },
476 {
477 "id": "ajax-trend-data",
478 "description": "Trend analytics chart data AJAX from admin stats page",
479 "schema": "schemas/ajax-trend-data.schema.json",
480 "direction": "client-to-server",
481 "producer": {
482 "file": "includes/ViewTrait_Stats.php",
483 "test": "tests/AjaxTrendDataContractTest.php"
484 },
485 "consumer": {
486 "file": "includes/ajax/Ajax_TrendData.php",
487 "test": "tests/AjaxTrendDataContractTest.php"
488 },
489 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
490 "fixtures": {
491 "valid": [
492 "fixtures/ajax-trend-data.valid.json"
493 ],
494 "invalid": [
495 "fixtures/ajax-trend-data.invalid-missing-nonce.json"
496 ]
497 }
498 },
499 {
500 "id": "ajax-admin-endpoint-support-helper",
501 "description": "Shared admin AJAX response envelope emitted by AjaxAdminEndpointSupport for every admin endpoint",
502 "schema": "schemas/ajax-admin-endpoint-support-helper.schema.json",
503 "direction": "server-to-client",
504 "consumer": {
505 "file": "includes/ajax/AjaxAdminEndpointSupport.php",
506 "test": "tests/ViewQueryFailureDiagnosticsTest.php"
507 },
508 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
509 "fixtures": {
510 "valid": [
511 "fixtures/ajax-admin-endpoint-support-helper.valid.json"
512 ],
513 "invalid": [
514 "fixtures/ajax-admin-endpoint-support-helper.invalid-missing-success.json"
515 ]
516 }
517 },
518 {
519 "id": "ajax-get-pagination-links-handler",
520 "description": "Extracted PHP handler for admin table pagination AJAX",
521 "schema": "schemas/ajax-update-pagination.schema.json",
522 "direction": "client-to-server",
523 "producer": {
524 "file": "includes/ajax/view_updater_pagination.js",
525 "test": "tests-js/ajax-response-validation.test.js"
526 },
527 "consumer": {
528 "file": "includes/ajax/Ajax_GetPaginationLinks.php",
529 "test": "tests/ViewUpdaterAjaxFetchRenderContractTest.php"
530 },
531 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
532 "fixtures": {
533 "valid": [
534 "fixtures/ajax-update-pagination.valid.json"
535 ],
536 "invalid": [
537 "fixtures/ajax-update-pagination.invalid-missing-subpage.json"
538 ]
539 }
540 },
541 {
542 "id": "ajax-client-report-beacon",
543 "description": "Report-only telemetry beacon branch of ajaxUpdatePaginationLinks: same action, same nonce and same request schema as the table request, but the server journals the client's report and answers immediately instead of doing table work.",
544 "schema": "schemas/ajax-update-pagination.schema.json",
545 "direction": "client-to-server",
546 "producer": {
547 "file": "includes/ajax/view_updater_transport_telemetry_delivery.js",
548 "test": "tests-js/transport-telemetry-attempt-record.test.js"
549 },
550 "consumer": {
551 "file": "includes/ajax/AjaxClientReportBeaconResponder.php",
552 "test": "tests/ClientTransportBeaconTest.php"
553 },
554 "parityTest": "tests/ClientTransportBeaconTest.php",
555 "fixtures": {
556 "valid": [
557 "fixtures/ajax-client-report-beacon.valid.json"
558 ],
559 "invalid": [
560 "fixtures/ajax-client-report-beacon.invalid-bad-reported-attempt-id.json"
561 ]
562 }
563 },
564 {
565 "id": "ajax-refresh-admin-nonces-handler",
566 "description": "Extracted PHP handler for refreshing admin AJAX nonces",
567 "schema": "schemas/ajax-refresh-admin-nonces.schema.json",
568 "direction": "server-to-client",
569 "consumer": {
570 "file": "includes/ajax/Ajax_RefreshAdminNonces.php",
571 "test": "tests/AjaxRefreshAdminNoncesTest.php"
572 },
573 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
574 "fixtures": {
575 "valid": [
576 "fixtures/ajax-refresh-admin-nonces.valid.json"
577 ],
578 "invalid": [
579 "fixtures/ajax-refresh-admin-nonces.invalid-missing-data.json"
580 ]
581 }
582 },
583 {
584 "id": "ajax-refresh-health-bar-handler",
585 "description": "Extracted PHP handler for health bar refresh AJAX",
586 "schema": "schemas/ajax-refresh-health-bar.schema.json",
587 "direction": "client-to-server",
588 "producer": {
589 "file": "includes/ajax/view_updater_stats.js",
590 "test": "tests-js/ajax-response-validation.test.js"
591 },
592 "consumer": {
593 "file": "includes/ajax/Ajax_RefreshHealthBar.php",
594 "test": "tests/HealthBarAjaxDecouplingTest.php"
595 },
596 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
597 "fixtures": {
598 "valid": [
599 "fixtures/ajax-refresh-health-bar.valid.json"
600 ],
601 "invalid": [
602 "fixtures/ajax-refresh-health-bar.invalid-missing-nonce.json"
603 ]
604 }
605 },
606 {
607 "id": "ajax-refresh-stats-dashboard-handler",
608 "description": "Extracted PHP handler for dashboard stats refresh AJAX",
609 "schema": "schemas/ajax-refresh-stats-dashboard.schema.json",
610 "direction": "client-to-server",
611 "producer": {
612 "file": "includes/ajax/view_updater_stats.js",
613 "test": "tests-js/ajax-response-validation.test.js"
614 },
615 "consumer": {
616 "file": "includes/ajax/Ajax_RefreshStatsDashboard.php",
617 "test": "tests/ViewUpdaterAjaxRefreshStatsDashboardContractTest.php"
618 },
619 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
620 "fixtures": {
621 "valid": [
622 "fixtures/ajax-refresh-stats.valid.json"
623 ],
624 "invalid": [
625 "fixtures/ajax-refresh-stats.invalid-missing-nonce.json"
626 ]
627 }
628 },
629 {
630 "id": "ajax-uninstall-prefs-handler",
631 "description": "Extracted PHP handler for uninstall/deactivation preference AJAX",
632 "schema": "schemas/ajax-uninstall-prefs.schema.json",
633 "direction": "client-to-server",
634 "producer": {
635 "file": "includes/js/uninstall-modal.js",
636 "test": "tests-js/ajax-response-validation.test.js"
637 },
638 "consumer": {
639 "file": "includes/ajax/Ajax_UninstallPrefs.php",
640 "test": "tests/UninstallPreferencesMultisiteTest.php"
641 },
642 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
643 "fixtures": {
644 "valid": [
645 "fixtures/ajax-uninstall-prefs.valid.json"
646 ],
647 "invalid": [
648 "fixtures/ajax-uninstall-prefs.invalid-missing-nonce.json"
649 ]
650 }
651 },
652 {
653 "id": "ajax-load-gsc-section",
654 "description": "Deferred Google Search Console admin section AJAX. Loaded on demand from the Options page so the GSC OAuth + remote-fetch cost does not block initial admin render.",
655 "schema": "schemas/ajax-load-gsc-section.schema.json",
656 "direction": "client-to-server",
657 "producer": {
658 "file": "includes/js/settingsDeferred.js",
659 "test": "tests/AjaxNullParamsAdversarialTest.php"
660 },
661 "consumer": {
662 "file": "includes/ajax/Ajax_LoadGscSection.php",
663 "test": "tests/AjaxNullParamsAdversarialTest.php"
664 },
665 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
666 "fixtures": {
667 "valid": [
668 "fixtures/ajax-load-gsc-section.valid.json"
669 ],
670 "invalid": [
671 "fixtures/ajax-load-gsc-section.invalid-missing-nonce.json"
672 ]
673 }
674 },
675 {
676 "id": "ajax-redirect-destination-autocomplete",
677 "description": "Autocomplete suggestions for the redirect-destination dropdown in the redirect edit modal.",
678 "schema": "schemas/ajax-redirect-destination-autocomplete.schema.json",
679 "direction": "client-to-server",
680 "producer": {
681 "file": "includes/ajax/redirect_to_ajax.js",
682 "test": "tests/AjaxNullParamsAdversarialTest.php"
683 },
684 "consumer": {
685 "file": "includes/ajax/Ajax_RedirectDestinationAutocomplete.php",
686 "test": "tests/AjaxNullParamsAdversarialTest.php"
687 },
688 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
689 "fixtures": {
690 "valid": [
691 "fixtures/ajax-redirect-destination-autocomplete.valid.json"
692 ],
693 "invalid": [
694 "fixtures/ajax-redirect-destination-autocomplete.invalid-bad-include-flag.json"
695 ]
696 }
697 },
698 {
699 "id": "ajax-update-options-handler",
700 "description": "Admin-page options update AJAX (extracted from Ajax_Php for parity with other Ajax_*.php handlers).",
701 "schema": "schemas/ajax-update-options.schema.json",
702 "direction": "client-to-server",
703 "producer": {
704 "file": "includes/js/general.js",
705 "test": "tests/AjaxNullParamsAdversarialTest.php"
706 },
707 "consumer": {
708 "file": "includes/ajax/Ajax_UpdateOptions.php",
709 "test": "tests/AjaxNullParamsAdversarialTest.php"
710 },
711 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
712 "fixtures": {
713 "valid": [
714 "fixtures/ajax-update-options.valid.json"
715 ],
716 "invalid": [
717 "fixtures/ajax-update-options.invalid-missing-nonce.json"
718 ]
719 }
720 },
721 {
722 "id": "ajax-view-logs",
723 "description": "Per-redirect log view AJAX. Returns the formatted hit log for a specific redirect ID for the admin logs modal.",
724 "schema": "schemas/ajax-view-logs.schema.json",
725 "direction": "client-to-server",
726 "producer": {
727 "file": "includes/ajax/search_logs_ajax.js",
728 "test": "tests/AjaxNullParamsAdversarialTest.php"
729 },
730 "consumer": {
731 "file": "includes/ajax/Ajax_ViewLogs.php",
732 "test": "tests/AjaxNullParamsAdversarialTest.php"
733 },
734 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
735 "fixtures": {
736 "valid": [
737 "fixtures/ajax-view-logs.valid.json"
738 ],
739 "invalid": [
740 "fixtures/ajax-view-logs.invalid-missing-nonce.json"
741 ]
742 }
743 },
744 {
745 "id": "ajax-run-canary-step-handler",
746 "description": "Adaptive canary ladder AJAX step (Bruno timeout cause matrix, coverage req. 7): isolates browser/network, boot/auth, the rate limiter, query cost, response size, compression, and output buffering as candidate causes for a failed admin table request.",
747 "schema": "schemas/ajax-run-canary-step.schema.json",
748 "direction": "client-to-server",
749 "producer": {
750 "file": "includes/ajax/view_updater_canary_ladder.js",
751 "test": "tests-js/canary-ladder-runner.test.js"
752 },
753 "consumer": {
754 "file": "includes/ajax/Ajax_CanaryLadder.php",
755 "test": "tests/AjaxCanaryPayloadAndReceiptTest.php"
756 },
757 "parityTest": "tests/AjaxCanaryPayloadAndReceiptTest.php",
758 "fixtures": {
759 "valid": [
760 "fixtures/ajax-run-canary-step.valid.json",
761 "fixtures/ajax-run-canary-step.valid-with-step-receipts.json"
762 ],
763 "invalid": [
764 "fixtures/ajax-run-canary-step.invalid-missing-nonce.json"
765 ]
766 }
767 }
768 ]
769 }
770