{
    "generated": "php tests/tools/api-docs.php",
    "classes": [
        {
            "name": "Minn\\Admin\\ActivityChart",
            "short": "ActivityChart",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/ActivityChart.php",
            "lines": 65,
            "doc": "The overview's activity chart: published posts and pages plus every\ncomment, counted per bar. A window over 45 days is drawn in weeks,\nanything shorter in days; each bar carries the (from, to] GMT bounds\nthe drill-down asks for.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Admin\\Dashboard",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 22
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "bars",
                    "static": false,
                    "visibility": "public",
                    "signature": "bars(int $days, int $now): array",
                    "doc": "The bars for a window of days, counted from the database.",
                    "shapes": [
                        "@return list<array{label: string, value: int, from: string, to: string}>"
                    ],
                    "params": [
                        {
                            "name": "days",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "bucket",
                    "static": true,
                    "visibility": "public",
                    "signature": "bucket(array $dates, int $days, int $now, int $offset): array",
                    "doc": "GMT stamps into bars, oldest first. Labels are site-local: the day\nfor daily bars, \"Week of\" the bar's first day for weekly ones.",
                    "shapes": [
                        "@param list<string> $dates \"Y-m-d H:i:s\" in GMT",
                        "@return list<array{label: string, value: int, from: string, to: string}>"
                    ],
                    "params": [
                        {
                            "name": "dates",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "\"Y-m-d H:i:s\" in GMT"
                        },
                        {
                            "name": "days",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 79
                }
            ]
        },
        {
            "name": "Minn\\Admin\\ActivityFeed",
            "short": "ActivityFeed",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/ActivityFeed.php",
            "lines": 212,
            "doc": "What happened lately, as the overview and the bell tell it: the caller's\nown recent posts and the latest comments, and the events behind one\nchart bar. Also the visibility rule every comment row is put through.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\Format",
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\Texturize",
                "Minn\\Content\\Users",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\Notifications",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Users $users, Minn\\Auth\\Capabilities $capabilities)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "recent",
                    "static": false,
                    "visibility": "public",
                    "signature": "recent(int $userId, int $now, int $offset): array",
                    "doc": "The overview's four most recent items, times already worded (\"2 hours ago\").\n\nOracle-caught quirk: the reference's recent-activity query runs with a\nmulti-type post_type plus perm=editable, and on that combination it\nrestricts EVERY status to post_author = caller, admins included,\npublished posts included. Authorless posts appear for nobody. The\nengine reproduces the observed behavior, not the intent.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "between",
                    "static": false,
                    "visibility": "public",
                    "signature": "between(int $userId, string $from, string $to, int $now): array",
                    "doc": "The events behind one chart bar, (from, to] GMT, newest first. Post\nrows decode the RAW stored title; comment rows decode the texturized\none (the reference's asymmetry, kept).",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "commentVisible",
                    "static": false,
                    "visibility": "public",
                    "signature": "commentVisible(int $userId, int $postId): bool",
                    "doc": "May this caller see a comment row that names its post?",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "postTitle",
                    "static": false,
                    "visibility": "public",
                    "signature": "postTitle(int $postId): string",
                    "doc": "A post's stored title, empty when the post is gone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "displayName",
                    "static": false,
                    "visibility": "public",
                    "signature": "displayName(int $userId): string",
                    "doc": "A user's display name, empty when the user is gone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "ownPosts",
                    "static": false,
                    "visibility": "private",
                    "signature": "ownPosts(int $userId, int $offset): array",
                    "doc": "The caller's own posts, merged from a by-modified and a by-date window.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "latestComments",
                    "static": false,
                    "visibility": "private",
                    "signature": "latestComments(int $userId): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "publishedBetween",
                    "static": false,
                    "visibility": "private",
                    "signature": "publishedBetween(string $from, string $to): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "commentsBetween",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentsBetween(int $userId, string $from, string $to): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 227
                }
            ]
        },
        {
            "name": "Minn\\Admin\\AdminTypes",
            "short": "AdminTypes",
            "namespace": "Minn\\Admin",
            "kind": "final class",
            "file": "public/minn/src/Minn/Admin/AdminTypes.php",
            "lines": 85,
            "doc": "Admin-facing type facts (viewable, labels, supports, the edit gate) live\nbeside, not inside, the wp/v2 registry, so the types route's payload\nstays byte-faithful.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Json",
                "Minn\\Rest\\Types"
            ],
            "usedBy": [
                "Minn\\Admin\\V1Controller",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Types $types, Minn\\Auth\\Capabilities $capabilities)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 20,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "extra",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "extra",
                    "static": false,
                    "visibility": "public",
                    "signature": "extra(): array",
                    "doc": "The types beyond post and page the app may show, with their labels.",
                    "shapes": [],
                    "params": [],
                    "line": 27,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "section",
                    "static": false,
                    "visibility": "public",
                    "signature": "section(int $userId): array",
                    "doc": "The boot-status types section: edit-visible types for this user, slimmed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "restBaseOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "restBaseOf(string $slug): string",
                    "doc": "The rest_base of a type slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "singularOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "singularOf(string $slug): string",
                    "doc": "A type's singular label.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "editable",
                    "static": false,
                    "visibility": "public",
                    "signature": "editable(): array",
                    "doc": "The viewable types a person edits in the app: slug => rest base. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 83,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "commentsEnabled",
                    "static": false,
                    "visibility": "public",
                    "signature": "commentsEnabled(): bool",
                    "doc": "Whether a UI post type still supports comments.",
                    "shapes": [],
                    "params": [],
                    "line": 95,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Admin\\App",
            "short": "App",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/App.php",
            "lines": 100,
            "doc": "The Minn Admin app on disk: the symlinked dev copy the engine serves the\nshell and assets from. Minn Admin is MIT, so reading its files is fine.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Support\\FileHeaders",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\Translations",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(string $dir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "dir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 29
            },
            "cases": [],
            "constants": [
                {
                    "name": "ASSET_TYPES",
                    "value": "array (   'css' => 'text/css',   'js' => 'application/javascript',   'woff2' => 'font/woff2',   'woff' => 'font/woff',   'svg' => 'image/svg+xml',   'png' => 'image/png',   'json' => 'application/json', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "dir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "switchedOff",
                    "static": true,
                    "visibility": "public",
                    "signature": "switchedOff(string $contentDir, Minn\\Content\\Site $site): bool",
                    "doc": "Whether the site has switched Minn Admin off: its plugin folder is in\nwp-content/plugins (the record the reference keeps) and active_plugins\ndoes not name it. A site that carries only the engine's bundle has no\nsuch record and keeps its admin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "dir",
                    "static": false,
                    "visibility": "public",
                    "signature": "dir(): string",
                    "doc": "Where the bundle sits on disk.",
                    "shapes": [],
                    "params": [],
                    "line": 46,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "installed",
                    "static": false,
                    "visibility": "public",
                    "signature": "installed(): bool",
                    "doc": "Whether the bundle is on disk.",
                    "shapes": [],
                    "params": [],
                    "line": 52,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "version",
                    "static": false,
                    "visibility": "public",
                    "signature": "version(): string",
                    "doc": "The bundle's version from its plugin header.",
                    "shapes": [],
                    "params": [],
                    "line": 58,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "file",
                    "static": false,
                    "visibility": "public",
                    "signature": "file(string $relative): ?string",
                    "doc": "The absolute path of a readable file inside the app, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "assetVersion",
                    "static": false,
                    "visibility": "public",
                    "signature": "assetVersion(string $relative): string",
                    "doc": "A self-busting asset version: app version plus file mtime.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "asset",
                    "static": false,
                    "visibility": "public",
                    "signature": "asset(string $relative): ?array",
                    "doc": "The absolute path and content type of an asset inside the app, or\nnull for anything missing or outside it.",
                    "shapes": [
                        "@return array{0: string, 1: string}|null"
                    ],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 113
                }
            ]
        },
        {
            "name": "Minn\\Admin\\AppController",
            "short": "AppController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/AppController.php",
            "lines": 149,
            "doc": "Serves Minn Admin from the engine: the path-routed shell (every\nsub-path renders the same page) and the app's assets. The nonce refresh\napp.js asks admin-ajax.php for is the reference's own rest-nonce action\n(Runtime\\AjaxController).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\App",
                "Minn\\Admin\\BootPayload",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\SiteIcon",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Json",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Admin\\App $app, Minn\\Admin\\BootPayload $payload, Minn\\Auth\\Authenticator $authenticator, Minn\\Auth\\Capabilities $capabilities, Minn\\Front\\Permalinks $permalinks, string $engineVersion, Minn\\Content\\SiteIcon $icon, bool $off = false)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "app",
                        "type": "Minn\\Admin\\App",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "payload",
                        "type": "Minn\\Admin\\BootPayload",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "authenticator",
                        "type": "Minn\\Auth\\Authenticator",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engineVersion",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "icon",
                        "type": "Minn\\Content\\SiteIcon",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "off",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 41
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "app",
                    "type": "Minn\\Admin\\App",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "payload",
                    "type": "Minn\\Admin\\BootPayload",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "authenticator",
                    "type": "Minn\\Auth\\Authenticator",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "engineVersion",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "icon",
                    "type": "Minn\\Content\\SiteIcon",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "off",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "the site has deactivated the Minn Admin plugin: the engine runs without an admin",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin (public)",
                        "GET /minn-admin/{rest*} (public)"
                    ],
                    "name": "shell",
                    "static": false,
                    "visibility": "public",
                    "signature": "shell(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Requires a signed-in user who can edit content; otherwise the login form.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 64
                },
                {
                    "routes": [
                        "GET /minn/admin/assets/{path*} (public)"
                    ],
                    "name": "asset",
                    "static": false,
                    "visibility": "public",
                    "signature": "asset(Minn\\Http\\Request $request, string $path): Minn\\Http\\Response",
                    "doc": "One file of the app bundle, with its content type and caching headers.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "offPage",
                    "static": false,
                    "visibility": "private",
                    "signature": "offPage(): string",
                    "doc": "The engine without an admin: the site keeps serving; the command that brings the admin back is named.",
                    "shapes": [],
                    "params": [],
                    "line": 67,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "favicon",
                    "static": false,
                    "visibility": "private",
                    "signature": "favicon(): string",
                    "doc": "The tab's icon, chosen as Minn Admin's own shell chooses it: the site\nicon when there is one, else a brand mark a theme or plugin offers on\nminn_admin_favicon, else Minn's \"m\" in the viewer's accent (Minn\nAdmin's own drawing when it runs as code, its default accent if not).\nWithout one the browser asks for /favicon.ico.",
                    "shapes": [],
                    "params": [],
                    "line": 91,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "private",
                    "signature": "render(array $boot): string",
                    "doc": "The shell reproduces the structure of Minn Admin's own template.php\n(an MIT file): pre-paint theme, inline window.MINN, mount point, app.js.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "boot",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 175
                }
            ]
        },
        {
            "name": "Minn\\Admin\\Appearance",
            "short": "Appearance",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/Appearance.php",
            "lines": 82,
            "doc": "A person's Minn Admin appearance: the colour scheme and its custom\ntoken maps, stored where the app stores them (user meta\nminn_admin_appearance, a serialized array) so the choice survives an\neject. The two WordPress-era switches, \"Minn is the default admin\" and\n\"Minn admin bar on the site\", are always on here: there is no other\nadmin and no other bar, so the engine reports them true and ignores\nwrites to them.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Users",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 42,
                "end": 44
            },
            "cases": [],
            "constants": [
                {
                    "name": "META",
                    "value": "'minn_admin_appearance'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SCHEMES",
                    "value": "array (   0 => 'minn',   1 => 'ocean',   2 => 'forest',   3 => 'amber',   4 => 'rose',   5 => 'coral',   6 => 'teal',   7 => 'slate',   8 => 'dusk', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SLOTS",
                    "value": "array (   0 => 'bg',   1 => 'bg2',   2 => 'panel',   3 => 'panel2',   4 => 'hover',   5 => 'border',   6 => 'border2',   7 => 'text',   8 => 'text2',   9 => 'text3',   10 => 'accent',   11 => 'accent2',   12 => 'accentFg', )",
                    "doc": "Scheme slots in the order the app lists them.",
                    "visibility": "public"
                },
                {
                    "name": "BASE",
                    "value": "array (   'dark' =>    array (     'bg' => '#0b0b0d',     'bg2' => '#101013',     'panel' => '#151518',     'panel2' => '#1b1b1f',     'hover' => '#202027',     'border' => '#242429',     'border2' => '#31313a',     'text' => '#ececed',     'text2' => '#9d9da7',     'text3' => '#63636d',     'accent' => '#6e62f5',     'accent2' => '#8a80f8',     'accentFg' => '#ffffff',   ),   'light' =>    array (     'bg' => '#f6f6f7',     'bg2' => '#ffffff',     'panel' => '#ffffff',     'panel2' => '#f4f4f6',     'hover' => '#eeeef1',     'border' => '#e7e7ea',     'border2' => '#dadade',     'text' => '#1a1a1f',     'text2' => '#5e5e69',     'text3' => '#9696a0',     'accent' => '#6a5ef2',     'accent2' => '#5a4ef0',     'accentFg' => '#ffffff',   ), )",
                    "doc": "The app's own Minn tokens, the fill for incomplete custom maps.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": false,
                    "visibility": "public",
                    "signature": "read(int $userId): array",
                    "doc": "A user's saved appearance, normalised.",
                    "shapes": [
                        "@return array{scheme: string, custom: array, defaultAdmin: bool, frontBar: bool, font: string}"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "save",
                    "static": false,
                    "visibility": "public",
                    "signature": "save(int $userId, array $raw): array",
                    "doc": "Merges the given keys over the stored map and writes it back; returns the normalised result.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "raw",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "normalise",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalise(array $raw): array",
                    "doc": "The appearance with every field valid and every missing one defaulted.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "hex",
                    "static": true,
                    "visibility": "public",
                    "signature": "hex(string $value): string",
                    "doc": "#rgb or #rrggbb to lowercase #rrggbb, or '' for anything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Admin\\BootPayload",
            "short": "BootPayload",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/BootPayload.php",
            "lines": 245,
            "doc": "The window.MINN boot payload, assembled from the engine: the keys app.js\nneeds to boot and drive the wp/v2 surface, with capabilities from the\nengine's own model.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\App",
                "Minn\\Admin\\Appearance",
                "Minn\\Admin\\HiddenIntegrations",
                "Minn\\Admin\\Translations",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\Nonce",
                "Minn\\Content\\Site",
                "Minn\\Content\\SiteIcon",
                "Minn\\Front\\Permalinks",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Auth\\Capabilities $capabilities, Minn\\Admin\\App $app, string $engineVersion, Minn\\Admin\\Appearance $appearance, Minn\\Admin\\HiddenIntegrations $hidden, Minn\\Content\\SiteIcon $icon, bool $blockTheme = false, ?Minn\\Admin\\Translations $translations = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "app",
                        "type": "Minn\\Admin\\App",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engineVersion",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "appearance",
                        "type": "Minn\\Admin\\Appearance",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "hidden",
                        "type": "Minn\\Admin\\HiddenIntegrations",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "icon",
                        "type": "Minn\\Content\\SiteIcon",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "blockTheme",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    },
                    {
                        "name": "translations",
                        "type": "?Minn\\Admin\\Translations",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 38
            },
            "cases": [],
            "constants": [
                {
                    "name": "PLUGIN_KEYS_WITHHELD",
                    "value": "array (   0 => 'notices', )",
                    "doc": "Boot keys the plugin computes that point the app at wp-admin pages the engine does not serve.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "app",
                    "type": "Minn\\Admin\\App",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "engineVersion",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "appearance",
                    "type": "Minn\\Admin\\Appearance",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "hidden",
                    "type": "Minn\\Admin\\HiddenIntegrations",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "icon",
                    "type": "Minn\\Content\\SiteIcon",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "blockTheme",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "translations",
                    "type": "?Minn\\Admin\\Translations",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "siteName",
                    "static": false,
                    "visibility": "public",
                    "signature": "siteName(): string",
                    "doc": "The site's name, or Site when it has none.",
                    "shapes": [],
                    "params": [],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": false,
                    "visibility": "public",
                    "signature": "build(Minn\\Auth\\Authenticated $session): array",
                    "doc": "The window.MINN payload the app boots from, for one signed-in session.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "session",
                            "type": "Minn\\Auth\\Authenticated",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "userSlice",
                    "static": false,
                    "visibility": "private",
                    "signature": "userSlice(Minn\\Auth\\Authenticated $session, string $role): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "session",
                            "type": "Minn\\Auth\\Authenticated",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "role",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "siteSlice",
                    "static": false,
                    "visibility": "private",
                    "signature": "siteSlice(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 108,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "commerce",
                    "static": true,
                    "visibility": "private",
                    "signature": "commerce(?array $plugin): bool",
                    "doc": "Whether WooCommerce is running: the plugin's own answer when it gave one,\nelse whether the runtime loaded the class.",
                    "shapes": [
                        "@param array<string, mixed>|null $plugin"
                    ],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "caps",
                    "static": false,
                    "visibility": "private",
                    "signature": "caps(int $userId, ?array $plugin): array",
                    "doc": "What the app may show, each key a capability the reference gates the\nsame view on. The commerce caps mirror the plugin's own conditions:\nWC loaded, the WC capability, and for coupons the store having them enabled.",
                    "shapes": [
                        "@return array<string, bool>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plugin",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "pluginPayload",
                    "static": false,
                    "visibility": "private",
                    "signature": "pluginPayload(): ?array",
                    "doc": "What Minn Admin's own boot_payload() computes when the plugin runs as\ncode on the runtime, so the app boots with the same keys on both\nstacks (connectors, discussion defaults, roles, post formats, the\nadapter flags). Engine-owned keys win; the withheld ones would send\nthe app to a wp-admin page the engine does not have.",
                    "shapes": [],
                    "params": [],
                    "line": 205,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "standHomeQuery",
                    "static": false,
                    "visibility": "private",
                    "signature": "standHomeQuery(): void",
                    "doc": "The reference serves the app shell from the home query, so the global\npost is the newest post while the payload is built; the comments\nfeature check reads it through the comments_open filter (a site that\ncloses comments on old posts reports the feature off when its newest\npost is old).",
                    "shapes": [],
                    "params": [],
                    "line": 227,
                    "end": 238
                },
                {
                    "routes": [],
                    "name": "adapterSlices",
                    "static": false,
                    "visibility": "private",
                    "signature": "adapterSlices(): array",
                    "doc": "What Minn Admin's own adapters contribute when the plugin runs as code\non the runtime: plugin surfaces (Tools), editor panels, design\nsources, editor commands, block forms. Absent, the app's fallbacks apply.",
                    "shapes": [],
                    "params": [],
                    "line": 245,
                    "end": 264
                }
            ]
        },
        {
            "name": "Minn\\Admin\\BundleController",
            "short": "BundleController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/BundleController.php",
            "lines": 45,
            "doc": "What the app bundle answers for: the user guide it carries, the\ntranslation offers (none: the engine polls no translation channel), and\nthe two changelogs, Minn Admin's and the engine's, read from GitHub\nbecause a release carries neither.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\App",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Ops\\Changelog",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Admin\\App $app, Minn\\Rest\\Caller $caller, Minn\\Ops\\Changelog $adminChangelog, Minn\\Ops\\Changelog $engineChangelog)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "app",
                        "type": "Minn\\Admin\\App",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "adminChangelog",
                        "type": "Minn\\Ops\\Changelog",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engineChangelog",
                        "type": "Minn\\Ops\\Changelog",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 31
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "app",
                    "type": "Minn\\Admin\\App",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "adminChangelog",
                    "type": "Minn\\Ops\\Changelog",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "engineChangelog",
                    "type": "Minn\\Ops\\Changelog",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/translations (floor edit_posts)"
                    ],
                    "name": "translations",
                    "static": false,
                    "visibility": "public",
                    "signature": "translations(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The translation offers; none on the engine.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/changelog (floor edit_posts)"
                    ],
                    "name": "changelog",
                    "static": false,
                    "visibility": "public",
                    "signature": "changelog(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Minn Admin's changelog, released sections only, beside the bundle's version.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/engine-changelog (floor edit_posts)"
                    ],
                    "name": "engineChangelog",
                    "static": false,
                    "visibility": "public",
                    "signature": "engineChangelog(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The engine's own changelog, kept in its repository and not in a release, shown beside the app's on Minn.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/guide (floor edit_posts)"
                    ],
                    "name": "guide",
                    "static": false,
                    "visibility": "public",
                    "signature": "guide(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The app's bundled user guide.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "bundled",
                    "static": false,
                    "visibility": "private",
                    "signature": "bundled(string $relative): array",
                    "doc": "",
                    "shapes": [
                        "@return array{version: string, markdown: string}"
                    ],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 66
                }
            ]
        },
        {
            "name": "Minn\\Admin\\Dashboard",
            "short": "Dashboard",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/Dashboard.php",
            "lines": 273,
            "doc": "The overview payload: stat cards, the activity chart, and the recent\nactivity feed, plus the per-bar activity drill-down.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\ActivityChart",
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\Format",
                "Minn\\Admin\\UploadsSize",
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\Site",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\OverviewController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Content\\Users $users, Minn\\Auth\\Capabilities $capabilities, Minn\\Admin\\ActivityChart $chart, Minn\\Admin\\ActivityFeed $feed, string $uploadsDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "chart",
                        "type": "Minn\\Admin\\ActivityChart",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "feed",
                        "type": "Minn\\Admin\\ActivityFeed",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "uploadsDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "chart",
                    "type": "Minn\\Admin\\ActivityChart",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "feed",
                    "type": "Minn\\Admin\\ActivityFeed",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "uploadsDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "overview",
                    "static": false,
                    "visibility": "public",
                    "signature": "overview(int $userId, int $days): array",
                    "doc": "The stat cards, the metric catalog and layout, the chart, and the feed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "days",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "metricLayout",
                    "static": false,
                    "visibility": "public",
                    "signature": "metricLayout(int $userId, array $catalog, array $stats): array",
                    "doc": "Which cards show: the user's saved picks over the site default over\nthe built-in layout, unknown keys dropped and slots refilled.",
                    "shapes": [
                        "@param list<array> $catalog",
                        "@param list<array> $stats",
                        "@return array{keys: list<string>, defaults: list<string>, custom: bool}"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "catalog",
                            "type": "array",
                            "shape": "list<array>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stats",
                            "type": "array",
                            "shape": "list<array>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "cleanMetricKeys",
                    "static": true,
                    "visibility": "public",
                    "signature": "cleanMetricKeys(mixed $keys): array",
                    "doc": "At most six unique sanitize_key metric ids; anything else drops.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "keys",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "activity",
                    "static": false,
                    "visibility": "public",
                    "signature": "activity(int $userId, string $from, string $to): array",
                    "doc": "The events behind one chart bar, (from, to] GMT.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 260,
                    "end": 263
                },
                {
                    "routes": [],
                    "name": "postsCard",
                    "static": false,
                    "visibility": "private",
                    "signature": "postsCard(array $posts, int $userId): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, int> $posts"
                    ],
                    "params": [
                        {
                            "name": "posts",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "pagesCard",
                    "static": false,
                    "visibility": "private",
                    "signature": "pagesCard(array $pages): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, int> $pages"
                    ],
                    "params": [
                        {
                            "name": "pages",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "usersCard",
                    "static": false,
                    "visibility": "private",
                    "signature": "usersCard(): array",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "commentsCard",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentsCard(array $comments, int $userId): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, int> $comments"
                    ],
                    "params": [
                        {
                            "name": "comments",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "mediaCard",
                    "static": false,
                    "visibility": "private",
                    "signature": "mediaCard(array $media, int $userId): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, int> $media"
                    ],
                    "params": [
                        {
                            "name": "media",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "metricCatalog",
                    "static": false,
                    "visibility": "private",
                    "signature": "metricCatalog(int $userId, array $stats, array $posts, array $pages, array $comments, array $media): array",
                    "doc": "The full metric catalog behind the Overview cards: the default layout\nfirst, then every cap-gated card the caller may pick. The store group\nneeds the WooCommerce runtime and is honestly absent.",
                    "shapes": [
                        "@param list<array> $stats",
                        "@param array<string, int> $posts",
                        "@param array<string, int> $pages",
                        "@param array<string, int> $comments",
                        "@param array<string, int> $media",
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stats",
                            "type": "array",
                            "shape": "list<array>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "posts",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pages",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "comments",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "media",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "overlayMetricKeys",
                    "static": true,
                    "visibility": "private",
                    "signature": "overlayMetricKeys(array $saved, array $fallback, array $allowed): array",
                    "doc": "Overlay saved keys onto a fallback of the same length, dropping keys\noutside $allowed and de-duplicating left to right.",
                    "shapes": [
                        "@param list<string> $saved",
                        "@param list<string> $fallback",
                        "@param array<string, true> $allowed",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "saved",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fallback",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "array",
                            "shape": "array<string, true>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 224,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "statusCounts",
                    "static": false,
                    "visibility": "private",
                    "signature": "statusCounts(string $type): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, int> counts by status for one post type"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 266,
                    "end": 274
                },
                {
                    "routes": [],
                    "name": "commentCounts",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentCounts(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{approved: int, moderated: int}"
                    ],
                    "params": [],
                    "line": 277,
                    "end": 288
                }
            ]
        },
        {
            "name": "Minn\\Admin\\EditorController",
            "short": "EditorController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/EditorController.php",
            "lines": 45,
            "doc": "The editor's helpers in minn-admin/v1: the edit lock, and the template\nand pattern lists (honestly empty: the engine carries no theme content).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostWriter",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\PostWriter $writer, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "writer",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "writer",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "POST /minn-admin/v1/posts/{id:\\d+}/lock (floor edit_posts)"
                    ],
                    "name": "lock",
                    "static": false,
                    "visibility": "public",
                    "signature": "lock(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Takes the edit lock on a post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 40
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/posts/{id:\\d+}/unlock (floor edit_posts)"
                    ],
                    "name": "unlock",
                    "static": false,
                    "visibility": "public",
                    "signature": "unlock(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Releases the edit lock on a post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 51
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/templates (floor edit_posts)"
                    ],
                    "name": "templates",
                    "static": false,
                    "visibility": "public",
                    "signature": "templates(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "No theme, no page templates: an honest empty set.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/patterns (floor edit_posts)"
                    ],
                    "name": "patterns",
                    "static": false,
                    "visibility": "public",
                    "signature": "patterns(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Theme patterns are GPL theme content the engine does not carry.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 65
                }
            ]
        },
        {
            "name": "Minn\\Admin\\Format",
            "short": "Format",
            "namespace": "Minn\\Admin",
            "kind": "final class",
            "file": "public/minn/src/Minn/Admin/Format.php",
            "lines": 51,
            "doc": "The dashboard's number, size, age, and title formatting.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Texturize"
            ],
            "usedBy": [
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\UploadsSize",
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "number",
                    "static": true,
                    "visibility": "public",
                    "signature": "number(int|float $value, int $decimals = 0): string",
                    "doc": "number_format_i18n for the default locale: comma thousands.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "int|float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "decimals",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 13,
                    "end": 16
                },
                {
                    "routes": [],
                    "name": "size",
                    "static": true,
                    "visibility": "public",
                    "signature": "size(int $bytes): string",
                    "doc": "size_format with one decimal: 1024-step units, comma thousands.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "humanTimeDiff",
                    "static": true,
                    "visibility": "public",
                    "signature": "humanTimeDiff(int $from, ?int $to = NULL): string",
                    "doc": "Humanized age, pinned by an oracle capture table: each unit rounds,\nfloors at 1, and hands off at the next unit boundary.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "plainTitle",
                    "static": true,
                    "visibility": "public",
                    "signature": "plainTitle(string $raw): string",
                    "doc": "A post title as the feed shows it: texturized, entities decoded, tags gone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Admin\\HiddenIntegrations",
            "short": "HiddenIntegrations",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/HiddenIntegrations.php",
            "lines": 94,
            "doc": "What a person hid from their own Minn Admin: the app's per-user map\n(user meta minn_admin_hidden_integrations, \"kind:id\" => hidden-at) read\nand written in the app's own shape so a choice made under WordPress\nsurvives the swap and vice versa. The engine registers the core views\nas hideable; plugin surfaces, editor panels, design sources, and slash\nnamespaces have no registry here, so hiding one is refused as\nunregistered and a stored hide of one is simply not listed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\Users",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Engine",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users, Minn\\Auth\\Capabilities $capabilities)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 48,
                "end": 50
            },
            "cases": [],
            "constants": [
                {
                    "name": "META",
                    "value": "'minn_admin_hidden_integrations'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "CORE",
                    "value": "array (   'content' =>    array (     0 => 'Content',     1 => 'edit_posts',   ),   'media' =>    array (     0 => 'Media',     1 => 'upload_files',   ),   'comments' =>    array (     0 => 'Comments',     1 => 'moderate_comments',   ),   'orders' =>    array (     0 => 'Orders',     1 => 'edit_shop_orders',   ),   'subscriptions' =>    array (     0 => 'Subscriptions',     1 => 'edit_shop_orders',   ),   'products' =>    array (     0 => 'Products',     1 => 'edit_products',   ),   'coupons' =>    array (     0 => 'Coupons',     1 => 'edit_shop_coupons',   ),   'customers' =>    array (     0 => 'Customers',     1 => 'list_users',   ),   'users' =>    array (     0 => 'Users',     1 => 'list_users',   ),   'terms' =>    array (     0 => 'Terms',     1 => 'manage_categories',   ),   'menus' =>    array (     0 => 'Menus',     1 => 'edit_theme_options',   ),   'widgets' =>    array (     0 => 'Widgets',     1 => 'edit_theme_options',   ),   'posttypes' =>    array (     0 => 'Structure',     1 => 'manage_options',   ),   'extensions' =>    array (     0 => 'Extensions',     1 => 'activate_plugins',   ),   'database' =>    array (     0 => 'Database',     1 => 'manage_options',   ),   'system' =>    array (     0 => 'System',     1 => 'manage_options',   ),   'settings' =>    array (     0 => 'Settings',     1 => 'manage_options',   ), )",
                    "doc": "Core view id => [label, the capability that shows the view].",
                    "visibility": "public"
                },
                {
                    "name": "CAP",
                    "value": "100",
                    "doc": "Newest hides kept when the map is capped.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(string $id): string",
                    "doc": "The id as the app sends it: lower-case, only word characters, colon, and dash.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "map",
                    "static": false,
                    "visibility": "public",
                    "signature": "map(int $userId): array",
                    "doc": "The views a user has hidden, by id.",
                    "shapes": [
                        "@return array<string, int> id => hidden-at"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "listFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "listFor(int $userId): array",
                    "doc": "The restore list: every hidden core view the person can still see. @return list<array{id: string, kind: string, label: string, sub: string}>",
                    "shapes": [
                        "@return list<array{id: string, kind: string, label: string, sub: string}>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "hide",
                    "static": false,
                    "visibility": "public",
                    "signature": "hide(int $userId, string $id): bool",
                    "doc": "False when the id names nothing this person could hide.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "unhide",
                    "static": false,
                    "visibility": "public",
                    "signature": "unhide(int $userId, string $id): void",
                    "doc": "Shows a hidden view again.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 112
                }
            ]
        },
        {
            "name": "Minn\\Admin\\LanguageChoices",
            "short": "LanguageChoices",
            "namespace": "Minn\\Admin",
            "kind": "final class",
            "file": "public/minn/src/Minn/Admin/LanguageChoices.php",
            "lines": 42,
            "doc": "The language picker's markup. English always leads the list and carries the\nempty value, because \"no locale\" and \"American English\" are the same choice.\nWhen the picker also offers what could be downloaded, the two halves split\ninto named groups; otherwise every option sits in one flat list.\n\nThe attribute order is not tidy and is not ours to tidy: the English option\ncarries `data-installed` before `selected`, an installed translation carries\nit after, and themes and plugins have been matching on that markup for\nyears.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ENGLISH",
                    "value": "'English (United States)'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "dropdown",
                    "static": true,
                    "visibility": "public",
                    "signature": "dropdown(string $name, string $id, array $installed, array $available, string $selected, bool $offerAvailable): string",
                    "doc": "The language select's HTML, installed languages first.",
                    "shapes": [
                        "@param list<string> $installed locale codes the site already holds",
                        "@param array<string, array{language: string, native_name: string, iso: array<int|string, string>}> $available every translation the directory offers, keyed by locale"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "installed",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "locale codes the site already holds"
                        },
                        {
                            "name": "available",
                            "type": "array",
                            "shape": "array<string, array{language: string, native_name: string, iso: array<int|string, string>}>",
                            "default": null,
                            "doc": "every translation the directory offers, keyed by locale"
                        },
                        {
                            "name": "selected",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offerAvailable",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "option",
                    "static": true,
                    "visibility": "private",
                    "signature": "option(string $locale, array $translation, string $selected, bool $installed): string",
                    "doc": "",
                    "shapes": [
                        "@param array{native_name: string, iso: array<int|string, string>} $translation"
                    ],
                    "params": [
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "translation",
                            "type": "array",
                            "shape": "array{native_name: string, iso: array<int|string, string>}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selected",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "installed",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 60
                }
            ]
        },
        {
            "name": "Minn\\Admin\\LanguageController",
            "short": "LanguageController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/LanguageController.php",
            "lines": 98,
            "doc": "Languages: what is installed, what a person reads in, what the site defaults to.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\Translations",
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\Site",
                "Minn\\Content\\Users",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Admin\\Translations $translations, Minn\\Content\\Users $users, Minn\\Content\\Site $site, Minn\\Auth\\Capabilities $capabilities, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "translations",
                        "type": "Minn\\Admin\\Translations",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "translations",
                    "type": "Minn\\Admin\\Translations",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/languages (floor edit_posts)"
                    ],
                    "name": "languages",
                    "static": false,
                    "visibility": "public",
                    "signature": "languages(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The languages a user may pick, installed and available.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 42
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/boot-locale (floor edit_posts)"
                    ],
                    "name": "bootLocale",
                    "static": false,
                    "visibility": "public",
                    "signature": "bootLocale(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The slice of the boot payload a language switch repaints from.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 59
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/me/language (floor edit_posts)"
                    ],
                    "name": "mine",
                    "static": false,
                    "visibility": "public",
                    "signature": "mine(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Sets the caller's own locale.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 66
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/users/{id:\\d+}/language (floor edit_posts)"
                    ],
                    "name": "user",
                    "static": false,
                    "visibility": "public",
                    "signature": "user(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Sets another user's locale.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 80
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/site/language (floor edit_posts + manage_options)"
                    ],
                    "name": "site",
                    "static": false,
                    "visibility": "public",
                    "signature": "site(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Sets the site's locale.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "setUserLocale",
                    "static": false,
                    "visibility": "private",
                    "signature": "setUserLocale(Minn\\Http\\Request $request, int $userId): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "ensure",
                    "static": false,
                    "visibility": "private",
                    "signature": "ensure(Minn\\Http\\Request $request): array",
                    "doc": "The requested locale, installed if it was not; '' means the site default. @return array{0: string, 1: bool}",
                    "shapes": [
                        "@return array{0: string, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 116
                }
            ]
        },
        {
            "name": "Minn\\Admin\\Notifications",
            "short": "Notifications",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/Notifications.php",
            "lines": 191,
            "doc": "The bell feed: pending and recent comments, translation offers and a\nnewer Minn, and new registrations. Plugin and theme update rows need an\nextension inventory the engine does not have\n(a recorded gap); on the reference database those sections are empty,\nso parity holds by construction.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\Format",
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\CommentRecord",
                "Minn\\Content\\Site",
                "Minn\\Content\\Texturize",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Ops\\Releases",
                "Minn\\Ops\\Updates",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\V1Controller",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Content\\Users $users, Minn\\Auth\\Capabilities $capabilities, Minn\\Admin\\ActivityFeed $feed, Minn\\Ops\\Updates $updates, Minn\\Ops\\Releases $releases)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "feed",
                        "type": "Minn\\Admin\\ActivityFeed",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "updates",
                        "type": "Minn\\Ops\\Updates",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "releases",
                        "type": "Minn\\Ops\\Releases",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 35
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "feed",
                    "type": "Minn\\Admin\\ActivityFeed",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "updates",
                    "type": "Minn\\Ops\\Updates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "releases",
                    "type": "Minn\\Ops\\Releases",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "items",
                    "static": false,
                    "visibility": "public",
                    "signature": "items(int $userId): array",
                    "doc": "The bell feed for a user, newest first, grouped and marked read or unread.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "markRead",
                    "static": false,
                    "visibility": "public",
                    "signature": "markRead(int $userId, string $id): void",
                    "doc": "An id marks one item read; an empty id marks everything read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 174,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "commentItems",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentItems(int $userId): array",
                    "doc": "Up to five pending comments for a moderator, then the three latest\napproved ones, each only when its post is visible to the caller.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "updateItems",
                    "static": false,
                    "visibility": "private",
                    "signature": "updateItems(int $userId, int $now): array",
                    "doc": "Plugin and theme offers for a caller who may apply them, stamped with\nthe last check, then the translation total.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "updateItem",
                    "static": true,
                    "visibility": "private",
                    "signature": "updateItem(string $id, string $title, int $time, array $update): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "time",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "update",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "coreItems",
                    "static": false,
                    "visibility": "private",
                    "signature": "coreItems(int $userId, int $now): array",
                    "doc": "A newer Minn on offer (Ops\\Releases). WordPress's own core offer and\nits auto-update notice are not shown: on Minn they could only speak\nof a parked copy, which is not what serves the site.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "registrationItems",
                    "static": false,
                    "visibility": "private",
                    "signature": "registrationItems(int $userId, int $now, int $offset): array",
                    "doc": "The two newest registrations of the last week, for a caller who lists users.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "commentItem",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentItem(Minn\\Content\\CommentRecord|array $comment, string $template): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "comment",
                            "type": "Minn\\Content\\CommentRecord|array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "template",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 187,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "translationCount",
                    "static": false,
                    "visibility": "private",
                    "signature": "translationCount(): int",
                    "doc": "Total translation offers across the three update transients.",
                    "shapes": [],
                    "params": [],
                    "line": 203,
                    "end": 213
                }
            ]
        },
        {
            "name": "Minn\\Admin\\OverviewController",
            "short": "OverviewController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/OverviewController.php",
            "lines": 140,
            "doc": "The Overview of minn-admin/v1: the payload, the drill-down behind one\nchart bar, and the pick of cards, the person's own and the site's default.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\Dashboard",
                "Minn\\Content\\Site",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Admin\\Dashboard $dashboard, Minn\\Content\\Users $users, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "dashboard",
                        "type": "Minn\\Admin\\Dashboard",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 34
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "dashboard",
                    "type": "Minn\\Admin\\Dashboard",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/overview (floor edit_posts)"
                    ],
                    "name": "overview",
                    "static": false,
                    "visibility": "public",
                    "signature": "overview(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The overview payload.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 42
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/overview/activity (floor edit_posts)"
                    ],
                    "name": "overviewActivity",
                    "static": false,
                    "visibility": "public",
                    "signature": "overviewActivity(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The events behind one chart bar.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 51
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/overview/metrics (floor edit_posts)"
                    ],
                    "name": "setOverviewMetrics",
                    "static": false,
                    "visibility": "public",
                    "signature": "setOverviewMetrics(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Saves the caller's pick of overview cards.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 65
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/overview/metric-defaults (floor edit_posts + manage_options)"
                    ],
                    "name": "setOverviewMetricDefaults",
                    "static": false,
                    "visibility": "public",
                    "signature": "setOverviewMetricDefaults(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Saves the site's default overview cards.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "metricKeysFrom",
                    "static": false,
                    "visibility": "private",
                    "signature": "metricKeysFrom(Minn\\Http\\Request $request): ?array",
                    "doc": "The cleaned keys, null when the caller asked for a clear; a missing or non-list keys member refuses.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "storedMetricLayout",
                    "static": false,
                    "visibility": "private",
                    "signature": "storedMetricLayout(int $userId): array",
                    "doc": "The stored layout, unfiltered by the catalog, so a save answers without a second Overview round trip.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "days",
                    "static": false,
                    "visibility": "private",
                    "signature": "days(Minn\\Http\\Request $request): int",
                    "doc": "?days must be an in-range integer; the reference's parameter errors otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "window",
                    "static": false,
                    "visibility": "private",
                    "signature": "window(Minn\\Http\\Request $request): array",
                    "doc": "Both bounds required, \"Y-m-d H:i:s\". @return array{0: string, 1: string}",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 131,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "parameterError",
                    "static": true,
                    "visibility": "private",
                    "signature": "parameterError(string $param, string $code, string $message, mixed $data): Minn\\RestError",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 163
                }
            ]
        },
        {
            "name": "Minn\\Admin\\PackagesController",
            "short": "PackagesController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/PackagesController.php",
            "lines": 113,
            "doc": "Adding and removing themes and extensions from the Extensions view.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Json",
                "Minn\\Ops\\Packages",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\ThemeSwitch"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Ops\\Packages $packages, Minn\\Content\\Site $site, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "packages",
                        "type": "Minn\\Ops\\Packages",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 27
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "packages",
                    "type": "Minn\\Ops\\Packages",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/themes/search (floor edit_posts + install_themes)"
                    ],
                    "name": "searchThemes",
                    "static": false,
                    "visibility": "public",
                    "signature": "searchThemes(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Searches the theme directory.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/themes/install (floor edit_posts + install_themes)"
                    ],
                    "name": "installTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "installTheme(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Installs a theme from the directory by slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 42
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/themes/upload (floor edit_posts + install_themes)"
                    ],
                    "name": "uploadTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "uploadTheme(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Installs a theme from an uploaded zip.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 50
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/themes/delete (floor edit_posts + delete_themes)"
                    ],
                    "name": "deleteTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteTheme(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Deletes an inactive theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 67
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/plugins/upload (floor edit_posts + install_plugins)"
                    ],
                    "name": "uploadPlugin",
                    "static": false,
                    "visibility": "public",
                    "signature": "uploadPlugin(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "A plugin zip: a WordPress plugin or a Minn extension.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 75
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/plugins/install-url (floor edit_posts + install_plugins)"
                    ],
                    "name": "installFromUrl",
                    "static": false,
                    "visibility": "public",
                    "signature": "installFromUrl(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "A zip URL, or a GitHub owner/repo whose latest release carries a zip asset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 107
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/plugins/search (floor edit_posts + install_plugins)"
                    ],
                    "name": "searchPlugins",
                    "static": false,
                    "visibility": "public",
                    "signature": "searchPlugins(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Searches the plugin directory.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 114
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/plugins/info (floor edit_posts + install_plugins)"
                    ],
                    "name": "pluginInfo",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginInfo(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "One directory plugin's details.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "uploaded",
                    "static": false,
                    "visibility": "private",
                    "signature": "uploaded(Minn\\Http\\Request $request, string $kind): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 133
                }
            ]
        },
        {
            "name": "Minn\\Admin\\PostListMarkup",
            "short": "PostListMarkup",
            "namespace": "Minn\\Admin",
            "kind": "final class",
            "file": "public/minn/src/Minn/Admin/PostListMarkup.php",
            "lines": 39,
            "doc": "The markup a post list writes beside each post, as the reference writes\nit (probe placeholders-admin): the states after a title (an em dash,\nthen each state in its span, a comma inside every span but the last),\nand the hidden fields quick edit reads, one div each, in its order.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "states",
                    "static": true,
                    "visibility": "public",
                    "signature": "states(array $states): string",
                    "doc": "The states after a post's title, or nothing when it has none.",
                    "shapes": [
                        "@param array<string|int, string> $states"
                    ],
                    "params": [
                        {
                            "name": "states",
                            "type": "array",
                            "shape": "array<string|int, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "inline",
                    "static": true,
                    "visibility": "public",
                    "signature": "inline(int $id, array $post, string $more): string",
                    "doc": "The quick edit fields: the escaped title and slug, the author, the two\ndiscussion statuses, the status, the date in its six parts and the\npassword, then what the caller adds (parent, template, order, terms,\nsticky, format) unbroken, and the closing tag.",
                    "shapes": [
                        "@param array{title: string, name: string, author: int, comments: string, pings: string, status: string, date: string, password: string} $post"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "array",
                            "shape": "array{title: string, name: string, author: int, comments: string, pings: string, status: string, date: string, password: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "more",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 50
                }
            ]
        },
        {
            "name": "Minn\\Admin\\PreferencesController",
            "short": "PreferencesController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/PreferencesController.php",
            "lines": 115,
            "doc": "A person's own settings in minn-admin/v1: their appearance, the views\nthey hid, and an administrator's reach into another person's, for the\nuser edit page.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\Appearance",
                "Minn\\Admin\\HiddenIntegrations",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Admin\\Appearance $appearance, Minn\\Admin\\HiddenIntegrations $hiddenIntegrations, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "appearance",
                        "type": "Minn\\Admin\\Appearance",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "hiddenIntegrations",
                        "type": "Minn\\Admin\\HiddenIntegrations",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 29
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "appearance",
                    "type": "Minn\\Admin\\Appearance",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "hiddenIntegrations",
                    "type": "Minn\\Admin\\HiddenIntegrations",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/me/appearance (floor edit_posts)"
                    ],
                    "name": "myAppearance",
                    "static": false,
                    "visibility": "public",
                    "signature": "myAppearance(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The caller's appearance.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/me/appearance (floor edit_posts)"
                    ],
                    "name": "saveMyAppearance",
                    "static": false,
                    "visibility": "public",
                    "signature": "saveMyAppearance(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Saves the caller's appearance.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/users/{id:\\d+}/appearance (cap edit_user on {id})"
                    ],
                    "name": "userAppearance",
                    "static": false,
                    "visibility": "public",
                    "signature": "userAppearance(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "A user's appearance, for one who may edit them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 50
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/users/{id:\\d+}/appearance (cap edit_user on {id})"
                    ],
                    "name": "saveUserAppearance",
                    "static": false,
                    "visibility": "public",
                    "signature": "saveUserAppearance(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Saves a user's appearance.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 57
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/users/{id:\\d+}/hidden (cap edit_user on {id})"
                    ],
                    "name": "hidden",
                    "static": false,
                    "visibility": "public",
                    "signature": "hidden(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "The target user's restore list, for the user edit page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 64
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/users/{id:\\d+}/integrations/unhide (cap edit_user on {id})"
                    ],
                    "name": "unhideForUser",
                    "static": false,
                    "visibility": "public",
                    "signature": "unhideForUser(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "An administrator restores something another person hid; hiding stays that person's own choice.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 77
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/integrations/hide (floor edit_posts)"
                    ],
                    "name": "hide",
                    "static": false,
                    "visibility": "public",
                    "signature": "hide(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Hides a view for the caller.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 88
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/integrations/unhide (floor edit_posts)"
                    ],
                    "name": "unhide",
                    "static": false,
                    "visibility": "public",
                    "signature": "unhide(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Shows a view again for the caller.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "integrationId",
                    "static": false,
                    "visibility": "private",
                    "signature": "integrationId(Minn\\Http\\Request $request): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "integrationState",
                    "static": false,
                    "visibility": "private",
                    "signature": "integrationState(int $userId): array",
                    "doc": "The boot slices a hide or unhide repaints from. The engine registers no\nplugin surfaces, editor panels, design sources, or block forms.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "appearanceBody",
                    "static": false,
                    "visibility": "private",
                    "signature": "appearanceBody(Minn\\Http\\Request $request): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "editableUser",
                    "static": false,
                    "visibility": "private",
                    "signature": "editableUser(string $id): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 135
                }
            ]
        },
        {
            "name": "Minn\\Admin\\RenderController",
            "short": "RenderController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/RenderController.php",
            "lines": 52,
            "doc": "The editor's island previews: block markup rendered by the same\nrenderer the public site uses, with the stylesheets that site loads\n(the engine's block stylesheet, the theme's, and the theme.json rules)\nso a preview looks like the page will.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Blocks",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\Caller $caller, string $themesDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "themesDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 33,
                "end": 41
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "themesDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "POST /minn-admin/v1/render-blocks (floor edit_posts)"
                    ],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Renders blocks for the editor's preview.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 56
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/editor-styles (floor edit_posts)"
                    ],
                    "name": "editorStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "editorStyles(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The stylesheets previews are scoped under: the engine's own, the theme's, and theme.json inline.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "styles",
                    "static": false,
                    "visibility": "private",
                    "signature": "styles(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{urls: list<string>, inline: string}"
                    ],
                    "params": [],
                    "line": 66,
                    "end": 80
                }
            ]
        },
        {
            "name": "Minn\\Admin\\SessionsController",
            "short": "SessionsController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/SessionsController.php",
            "lines": 72,
            "doc": "A person's sign-in sessions, read from the same session_tokens store\nthe login endpoint writes. Verifiers are the store's keys (the sha256\nof each cookie token), so the app can name one without ever seeing\nthe token. Expired rows are skipped, not garbage-collected here.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Sessions",
                "Minn\\Content\\Users",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users, Minn\\Auth\\Sessions $sessions, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "sessions",
                        "type": "Minn\\Auth\\Sessions",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "sessions",
                    "type": "Minn\\Auth\\Sessions",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/users/{id:\\d+}/sessions (cap edit_user on {id})"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "A user's sessions, the caller's own marked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 59
                },
                {
                    "routes": [
                        "DELETE /minn-admin/v1/users/{id:\\d+}/sessions (cap edit_user on {id})"
                    ],
                    "name": "destroyAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroyAll(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Signs the person out everywhere; a caller acting on themselves keeps the session they are using.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 72
                },
                {
                    "routes": [
                        "DELETE /minn-admin/v1/users/{id:\\d+}/sessions/{verifier:[a-f0-9]{40,64}} (cap edit_user on {id})"
                    ],
                    "name": "destroy",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroy(Minn\\Http\\Request $request, string $id, string $verifier): Minn\\Http\\Response",
                    "doc": "Signs one session out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "verifier",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "target",
                    "static": false,
                    "visibility": "private",
                    "signature": "target(string $id): int",
                    "doc": "The user from the path: the caller themselves, or anyone the caller may edit.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 96
                }
            ]
        },
        {
            "name": "Minn\\Admin\\SiteController",
            "short": "SiteController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/SiteController.php",
            "lines": 90,
            "doc": "The small Settings-view routes of minn-admin/v1: the site logo, the\npermalink structure, the spam queue, and the months the library spans.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Media\\Metadata",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply",
                "Minn\\Support\\Serialized",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 29,
                "end": 36
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/site-logo (floor edit_posts)"
                    ],
                    "name": "siteLogo",
                    "static": false,
                    "visibility": "public",
                    "signature": "siteLogo(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The site logo attachment.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 53
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/permalinks (floor edit_posts)"
                    ],
                    "name": "permalinks",
                    "static": false,
                    "visibility": "public",
                    "signature": "permalinks(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The permalink structure.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 84
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/spam (floor edit_posts)"
                    ],
                    "name": "spam",
                    "static": false,
                    "visibility": "public",
                    "signature": "spam(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The spam settings.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 104
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/media/months (floor edit_posts)"
                    ],
                    "name": "mediaMonths",
                    "static": false,
                    "visibility": "public",
                    "signature": "mediaMonths(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The months the library has uploads in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "logoUrl",
                    "static": false,
                    "visibility": "private",
                    "signature": "logoUrl(int $id): string",
                    "doc": "The custom logo's medium rendition, the size the app's card shows.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 66
                }
            ]
        },
        {
            "name": "Minn\\Admin\\StructureController",
            "short": "StructureController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/StructureController.php",
            "lines": 131,
            "doc": "The Structure view of minn-admin/v1: post types, taxonomies, and the\nterms switcher, each with its live counts, answered from the registries.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Json",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\Taxonomies",
                "Minn\\Rest\\Types"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Rest\\Types $types, Minn\\Rest\\Taxonomies $taxonomies, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "taxonomies",
                        "type": "Minn\\Rest\\Taxonomies",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "taxonomies",
                    "type": "Minn\\Rest\\Taxonomies",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/term-taxonomies (floor edit_posts)"
                    ],
                    "name": "termTaxonomies",
                    "static": false,
                    "visibility": "public",
                    "signature": "termTaxonomies(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The taxonomies of each public type, for the Structure view.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 66
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/post-types (floor edit_posts)"
                    ],
                    "name": "postTypes",
                    "static": false,
                    "visibility": "public",
                    "signature": "postTypes(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The Structure view's post types: core and site-declared, with their live counts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 108
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/taxonomies (floor edit_posts)"
                    ],
                    "name": "taxonomies",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomies(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Every taxonomy with its counts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "publicTypes",
                    "static": false,
                    "visibility": "private",
                    "signature": "publicTypes(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 137,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "termCount",
                    "static": false,
                    "visibility": "private",
                    "signature": "termCount(string $taxonomy): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "postCount",
                    "static": false,
                    "visibility": "private",
                    "signature": "postCount(string $type): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 153
                }
            ]
        },
        {
            "name": "Minn\\Admin\\SystemController",
            "short": "SystemController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/SystemController.php",
            "lines": 73,
            "doc": "The System view: diagnostics, the scheduled-post list, autoloaded options, and the logs.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Ops\\Diagnostics",
                "Minn\\Ops\\Logs",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Ops\\Diagnostics $diagnostics, Minn\\Ops\\Logs $logs, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "diagnostics",
                        "type": "Minn\\Ops\\Diagnostics",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "logs",
                        "type": "Minn\\Ops\\Logs",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "diagnostics",
                    "type": "Minn\\Ops\\Diagnostics",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "logs",
                    "type": "Minn\\Ops\\Logs",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/system (cap manage_options)"
                    ],
                    "name": "system",
                    "static": false,
                    "visibility": "public",
                    "signature": "system(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The System view's payload.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/system/cron (cap manage_options)"
                    ],
                    "name": "cron",
                    "static": false,
                    "visibility": "public",
                    "signature": "cron(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The scheduled posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/system/autoload (cap manage_options)"
                    ],
                    "name": "autoload",
                    "static": false,
                    "visibility": "public",
                    "signature": "autoload(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The autoloaded options.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/system/config (cap manage_options)"
                    ],
                    "name": "config",
                    "static": false,
                    "visibility": "public",
                    "signature": "config(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The engine never rewrites wp-config.php; the file is the site's, edited by hand.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/system/logs (cap manage_options)"
                    ],
                    "name": "logs",
                    "static": false,
                    "visibility": "public",
                    "signature": "logs(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The logs list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 59
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/system/logs/{id:[a-zA-Z0-9:_.\\-]+} (cap manage_options)"
                    ],
                    "name": "log",
                    "static": false,
                    "visibility": "public",
                    "signature": "log(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One log's tail.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 66
                },
                {
                    "routes": [
                        "DELETE /minn-admin/v1/system/logs/{id:[a-zA-Z0-9:_.\\-]+} (cap manage_options)"
                    ],
                    "name": "clearLog",
                    "static": false,
                    "visibility": "public",
                    "signature": "clearLog(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Empties one log.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 74
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/system/debug-log (cap manage_options)"
                    ],
                    "name": "debugLog",
                    "static": false,
                    "visibility": "public",
                    "signature": "debugLog(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The debug log's tail.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 81
                },
                {
                    "routes": [
                        "DELETE /minn-admin/v1/system/debug-log (cap manage_options)"
                    ],
                    "name": "clearDebugLog",
                    "static": false,
                    "visibility": "public",
                    "signature": "clearDebugLog(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Empties the debug log.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 89
                }
            ]
        },
        {
            "name": "Minn\\Admin\\ThemesController",
            "short": "ThemesController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/ThemesController.php",
            "lines": 99,
            "doc": "The theme inventory of minn-admin/v1: every theme on disk with its\nheaders, screenshot, and update offer, and the switch of the active one.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Ops\\AutoUpdates",
                "Minn\\Ops\\Updates",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\FileHeaders"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Ops\\Updates $updates, Minn\\Rest\\Caller $caller, string $contentDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "updates",
                        "type": "Minn\\Ops\\Updates",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 29,
                "end": 36
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "updates",
                    "type": "Minn\\Ops\\Updates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "contentDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/themes (floor edit_posts)"
                    ],
                    "name": "themes",
                    "static": false,
                    "visibility": "public",
                    "signature": "themes(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Every theme on disk with the active one marked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 67
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/themes/activate (floor edit_posts + switch_themes)"
                    ],
                    "name": "activateTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "activateTheme(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Switches the active theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "themeText",
                    "static": true,
                    "visibility": "private",
                    "signature": "themeText(string $value): string",
                    "doc": "A theme header as the reference serves it: tags stripped, a bare ampersand entity-encoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "themeFolders",
                    "static": false,
                    "visibility": "private",
                    "signature": "themeFolders(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, array<string, string>> slug => style.css headers"
                    ],
                    "params": [],
                    "line": 100,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "screenshot",
                    "static": false,
                    "visibility": "private",
                    "signature": "screenshot(string $slug): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 124
                }
            ]
        },
        {
            "name": "Minn\\Admin\\Translations",
            "short": "Translations",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/Translations.php",
            "lines": 237,
            "doc": "Languages for the admin. A person's locale is their `locale` user meta,\nelse the site's WPLANG, else en_US, exactly as the reference resolves it.\nThe app translates itself from a map of its source strings, read from the\nJED catalogs Minn Admin's language packs install under\nwp-content/languages/plugins (the bundle's own languages folder is the\nfallback). Installing a pack fetches the release asset the bundle's\nmanifest names for that locale, checks its hash, and unpacks only that\nlocale's files, so an eject leaves the files WordPress would have written.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\App",
                "Minn\\Content\\Site",
                "Minn\\Content\\Users",
                "Minn\\Http",
                "Minn\\Http\\Download",
                "Minn\\Json",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\LanguageController",
                "Minn\\Engine",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users, Minn\\Content\\Site $site, Minn\\Admin\\App $app, string $contentDir, Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "app",
                        "type": "Minn\\Admin\\App",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 35
            },
            "cases": [],
            "constants": [
                {
                    "name": "RTL",
                    "value": "array (   0 => 'ar',   1 => 'ary',   2 => 'azb',   3 => 'ckb',   4 => 'dv',   5 => 'fa_AF',   6 => 'fa_IR',   7 => 'haz',   8 => 'he_IL',   9 => 'ps',   10 => 'skr',   11 => 'ug_CN',   12 => 'ur', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "app",
                    "type": "Minn\\Admin\\App",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "contentDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "localeOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "localeOf(int $userId): string",
                    "doc": "The locale a person reads the admin in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "siteLocale",
                    "static": false,
                    "visibility": "public",
                    "signature": "siteLocale(): string",
                    "doc": "The site's locale from WPLANG, en_US by default.",
                    "shapes": [],
                    "params": [],
                    "line": 48,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "isRtl",
                    "static": true,
                    "visibility": "public",
                    "signature": "isRtl(string $locale): bool",
                    "doc": "Whether a locale reads right to left.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "catalog",
                    "static": false,
                    "visibility": "public",
                    "signature": "catalog(string $locale): array",
                    "doc": "The app's translation map for a locale: source string => translation,\nor the plural forms as a list. Later folders win, so the installed\npack lands over the bundle's fallback.",
                    "shapes": [
                        "@return array{0: array<string, string|list<string>>, 1: string} map and the Plural-Forms rule"
                    ],
                    "params": [
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "isInstalled",
                    "static": false,
                    "visibility": "public",
                    "signature": "isInstalled(string $locale): bool",
                    "doc": "Whether a locale has any files on this site: a core pack or Minn Admin's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "installed",
                    "static": false,
                    "visibility": "public",
                    "signature": "installed(): array",
                    "doc": "The locales with a pack on disk, the two defaults first.",
                    "shapes": [
                        "@return list<array{0: string, 1: string}> the site-default row, en_US, then every installed locale"
                    ],
                    "params": [],
                    "line": 100,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "payload",
                    "static": false,
                    "visibility": "public",
                    "signature": "payload(int $forUser): array",
                    "doc": "The languages route's payload; `current` is the raw meta of the user asked about.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "forUser",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "readOnlyPayload",
                    "static": false,
                    "visibility": "public",
                    "signature": "readOnlyPayload(int $forUser): array",
                    "doc": "The same payload for a caller who may switch languages but not install one: no available list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "forUser",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(string $locale): bool",
                    "doc": "Fetches and unpacks Minn Admin's language pack for a locale from the\nrelease the bundle's manifest names. True when files were written;\nfalse when the manifest offers no pack for the locale.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "languages",
                    "static": false,
                    "visibility": "private",
                    "signature": "languages(int $forUser, bool $canInstall): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "forUser",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "canInstall",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "catalogFiles",
                    "static": false,
                    "visibility": "private",
                    "signature": "catalogFiles(string $locale): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 216
                },
                {
                    "routes": [],
                    "name": "installedCodes",
                    "static": false,
                    "visibility": "private",
                    "signature": "installedCodes(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string> locale codes with a core pack or a Minn Admin pack on disk, sorted"
                    ],
                    "params": [],
                    "line": 219,
                    "end": 237
                },
                {
                    "routes": [],
                    "name": "names",
                    "static": false,
                    "visibility": "private",
                    "signature": "names(): array",
                    "doc": "Native names for every locale the registry lists, from the captured catalog. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 240,
                    "end": 250
                },
                {
                    "routes": [],
                    "name": "download",
                    "static": false,
                    "visibility": "private",
                    "signature": "download(string $url): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 252,
                    "end": 259
                }
            ]
        },
        {
            "name": "Minn\\Admin\\UpdatesController",
            "short": "UpdatesController",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/UpdatesController.php",
            "lines": 129,
            "doc": "The minn-admin/v1 update routes: offers, directory meta, the check, the installs, the auto-update lists.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Ops\\AutoUpdates",
                "Minn\\Ops\\CoreStatus",
                "Minn\\Ops\\Updates",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Ops\\Updates $updates, Minn\\Ops\\CoreStatus $core, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "updates",
                        "type": "Minn\\Ops\\Updates",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "core",
                        "type": "Minn\\Ops\\CoreStatus",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "updates",
                    "type": "Minn\\Ops\\Updates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "core",
                    "type": "Minn\\Ops\\CoreStatus",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/plugin-updates (signed in)"
                    ],
                    "name": "pluginUpdates",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginUpdates(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The plugin update offers.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 40
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/plugin-meta (signed in)"
                    ],
                    "name": "pluginMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginMeta(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Icons and details for the installed plugins.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 48
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/check-updates (signed in)"
                    ],
                    "name": "check",
                    "static": false,
                    "visibility": "public",
                    "signature": "check(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Asks the Minn update service again, now: for plugin and theme offers, and for Minn itself (its status answered as core).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 78
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/plugins/update (signed in)"
                    ],
                    "name": "updatePlugin",
                    "static": false,
                    "visibility": "public",
                    "signature": "updatePlugin(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Updates one plugin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 93
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/plugins/update-all (signed in)"
                    ],
                    "name": "updateAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateAll(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Updates every plugin with an offer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 114
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/themes/update (signed in)"
                    ],
                    "name": "updateTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateTheme(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Updates one theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 126
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/auto-updates"
                    ],
                    "name": "autoUpdates",
                    "static": false,
                    "visibility": "public",
                    "signature": "autoUpdates(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Turns auto-updates on or off for one asset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 147
                }
            ]
        },
        {
            "name": "Minn\\Admin\\UploadsSize",
            "short": "UploadsSize",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/UploadsSize.php",
            "lines": 93,
            "doc": "How much the uploads folder holds, as Minn Admin 0.43 works it out and\nshares it through the minn_admin_uploads_size transient: the cached\nfigure in either shape it has had ({bytes, partial}, or a bare count from\nbefore the budget), else a walk only an administrator may start, one at a\ntime behind a two-minute lock, stopped after four seconds and kept as\npartial for an hour instead of twelve.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\Format",
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\Site",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\Dashboard"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Auth\\Capabilities $capabilities, string $dir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "dir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 28
            },
            "cases": [],
            "constants": [
                {
                    "name": "CACHE",
                    "value": "'_transient_minn_admin_uploads_size'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "EXPIRES",
                    "value": "'_transient_timeout_minn_admin_uploads_size'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "LOCK",
                    "value": "'minn_admin_uploads_size_lock'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BUDGET",
                    "value": "4.0",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "dir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "label",
                    "static": false,
                    "visibility": "public",
                    "signature": "label(int $userId): string",
                    "doc": "The Media card's \"N used\" line, \"over N used\" for a walk cut short, or \"\" when the size is not known.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "measure",
                    "static": false,
                    "visibility": "public",
                    "signature": "measure(int $userId): ?array",
                    "doc": "The uploads size, cached or walked now.",
                    "shapes": [
                        "@return array{bytes: int, partial: bool}|null null when nothing is known and this caller may not find out"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "cached",
                    "static": false,
                    "visibility": "private",
                    "signature": "cached(): ?array",
                    "doc": "",
                    "shapes": [
                        "@return array{bytes: int, partial: bool}|null"
                    ],
                    "params": [],
                    "line": 62,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "lock",
                    "static": false,
                    "visibility": "private",
                    "signature": "lock(): bool",
                    "doc": "Whether this request may walk: no other has started one in the last two minutes.",
                    "shapes": [],
                    "params": [],
                    "line": 77,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "walk",
                    "static": false,
                    "visibility": "private",
                    "signature": "walk(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{bytes: int, partial: bool}"
                    ],
                    "params": [],
                    "line": 88,
                    "end": 110
                }
            ]
        },
        {
            "name": "Minn\\Admin\\V1Controller",
            "short": "V1Controller",
            "namespace": "Minn\\Admin",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Admin/V1Controller.php",
            "lines": 80,
            "doc": "The boot burst of minn-admin/v1: the bell feed and its read marker, the\ncore status, and the one-round-trip boot-status the app starts from.\nEvery route sits behind the same capability floor (edit_posts) the\nplugin declares.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\AdminTypes",
                "Minn\\Admin\\Notifications",
                "Minn\\Db",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Ops\\CoreStatus",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Admin\\Notifications $notifications, Minn\\Ops\\CoreStatus $core, Minn\\Admin\\AdminTypes $types, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "notifications",
                        "type": "Minn\\Admin\\Notifications",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "core",
                        "type": "Minn\\Ops\\CoreStatus",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Admin\\AdminTypes",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "notifications",
                    "type": "Minn\\Admin\\Notifications",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "core",
                    "type": "Minn\\Ops\\CoreStatus",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Admin\\AdminTypes",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/v1/notifications (floor edit_posts)"
                    ],
                    "name": "notifications",
                    "static": false,
                    "visibility": "public",
                    "signature": "notifications(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The bell feed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/notifications/read (floor edit_posts)"
                    ],
                    "name": "notificationsRead",
                    "static": false,
                    "visibility": "public",
                    "signature": "notificationsRead(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Body {id} marks one read; {} marks all read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 50
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/core (floor edit_posts)"
                    ],
                    "name": "core",
                    "static": false,
                    "visibility": "public",
                    "signature": "core(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Minn's version and any newer release; a day-old check of the update service runs once the answer is sent.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 58
                },
                {
                    "routes": [
                        "POST /minn-admin/v1/core/update (floor edit_posts + update_core)"
                    ],
                    "name": "coreUpdate",
                    "static": false,
                    "visibility": "public",
                    "signature": "coreUpdate(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Replaces the running engine with the release on offer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 65
                },
                {
                    "routes": [
                        "GET /minn-admin/v1/boot-status (floor edit_posts)"
                    ],
                    "name": "bootStatus",
                    "static": false,
                    "visibility": "public",
                    "signature": "bootStatus(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The app's one-round-trip boot burst. Absent sections are the\ncontract's own fallback: the client loads a missing section\nstandalone. The engine serves what it can honestly answer and omits\nthe plugin-inventory sections it has no installation for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "checkingReleases",
                    "static": false,
                    "visibility": "private",
                    "signature": "checkingReleases(Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "The answer, with the update service asked about Minn's releases after it is sent when the last check is a day old.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 102
                }
            ]
        },
        {
            "name": "Minn\\Auth\\ApplicationPasswords",
            "short": "ApplicationPasswords",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/ApplicationPasswords.php",
            "lines": 153,
            "doc": "Application passwords as the reference stores them: a serialized list in\nthe user's _application_passwords meta, each entry uuid, app_id, name,\npassword (a hash), created, last_used, last_ip. New passwords are 24\ncharacters shown in groups of four; the stored hash is the reference's\nown ($generic$, FastHash), so a password made on either stack works on\nthe other. Older hashes still verify, as the reference verifies them:\nphpass (WordPress before 6.8, and the engine before this) and $wp$.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\FastHash",
                "Minn\\Auth\\Password",
                "Minn\\Auth\\PortableHash",
                "Minn\\Content\\Users",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Auth\\Authenticator",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\Services",
                "Minn\\Runtime\\ApplicationPasswordEvents",
                "Minn\\Runtime\\ApplicationPasswordSignIn"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 25
            },
            "cases": [],
            "constants": [
                {
                    "name": "META",
                    "value": "'_application_passwords'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(int $userId): array",
                    "doc": "Every application password of a user, as stored records without the hash's plain text.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(int $userId, string $uuid): ?array",
                    "doc": "One record by uuid, or null.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(int $userId, string $name, string $appId): array",
                    "doc": "Mints a password, stores its hash, and returns the record with the plain text once.",
                    "shapes": [
                        "@return array{0: array<string, mixed>, 1: string} the stored record and the one-time plaintext"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "appId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "rename",
                    "static": false,
                    "visibility": "public",
                    "signature": "rename(int $userId, string $uuid, string $name): ?array",
                    "doc": "Renames one password; null when the uuid is unknown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "touch",
                    "static": false,
                    "visibility": "public",
                    "signature": "touch(int $userId, string $uuid, string $ip): ?array",
                    "doc": "Records a use: the time and the address it came from.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(int $userId, string $uuid): ?array",
                    "doc": "Removes one password and returns its record; null when unknown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "deleteAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteAll(int $userId): int",
                    "doc": "Removes every application password of a user and returns how many.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "verify",
                    "static": false,
                    "visibility": "public",
                    "signature": "verify(int $userId, string $password): ?array",
                    "doc": "The record a plaintext (spaces ignored) unlocks for the user, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "generate",
                    "static": true,
                    "visibility": "public",
                    "signature": "generate(): string",
                    "doc": "Twenty-four letters and digits.",
                    "shapes": [],
                    "params": [],
                    "line": 128,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "chunked",
                    "static": true,
                    "visibility": "public",
                    "signature": "chunked(string $plain): string",
                    "doc": "The plaintext as shown once: groups of four, space separated.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "change",
                    "static": false,
                    "visibility": "private",
                    "signature": "change(int $userId, string $uuid, array $fields): ?array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "save",
                    "static": false,
                    "visibility": "private",
                    "signature": "save(int $userId, array $list): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "list",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "uuid",
                    "static": true,
                    "visibility": "private",
                    "signature": "uuid(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 164,
                    "end": 170
                }
            ]
        },
        {
            "name": "Minn\\Auth\\AuthCookies",
            "short": "AuthCookies",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/AuthCookies.php",
            "lines": 107,
            "doc": "The three cookies a sign-in sets: the auth cookie on the admin and\nplugins paths (the secure variant over HTTPS, keyed off that scheme's\nsalt) and the logged_in cookie on the site root, which is the one REST\nreads. Every value shares the username|expiration|token|hmac shape.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\Password",
                "Minn\\Content\\UserRecord",
                "Minn\\Db",
                "Minn\\Http\\Response"
            ],
            "usedBy": [
                "Minn\\Auth\\SignIn",
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Auth\\Cookie $cookie)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "cookie",
                        "type": "Minn\\Auth\\Cookie",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 27
            },
            "cases": [],
            "constants": [
                {
                    "name": "DAY",
                    "value": "86400",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "HOUR",
                    "value": "3600",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "cookie",
                    "type": "Minn\\Auth\\Cookie",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "hash",
                    "static": false,
                    "visibility": "public",
                    "signature": "hash(): string",
                    "doc": "The hash suffixed onto every cookie name: md5 of the siteurl option.",
                    "shapes": [],
                    "params": [],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "settle",
                    "static": false,
                    "visibility": "public",
                    "signature": "settle(Minn\\Content\\UserRecord $user, int $days, bool $secure, bool $https, string $token = ''): array",
                    "doc": "The sign-in cookies as the reference settles them (suite login-hooks):\ntheir life through auth_cookie_expiration (two days, or fourteen when\nremembered, the cookies then kept twelve hours past it); the auth\ncookie's security through secure_auth_cookie, and the logged-in\ncookie's through secure_logged_in_cookie (secure only over HTTPS); a\nsession made for that life when none is given; then set_auth_cookie\nand set_logged_in_cookie told the values, and send_auth_cookies asked\nwhether to send them. Signing in always runs under the booted\nruntime (its sessions are WordPress's), so the hooks always run.",
                    "shapes": [
                        "@return array{expiration: int, expire: int, secure: bool, secureLoggedIn: bool, scheme: string, token: string, auth: string, loggedIn: string, send: bool}"
                    ],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "days",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "secure",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "https",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "attach",
                    "static": false,
                    "visibility": "public",
                    "signature": "attach(Minn\\Http\\Response $response, array $plan): Minn\\Http\\Response",
                    "doc": "The response with the settled cookies on it: the auth cookie on the\nadmin and plugins paths, the logged-in cookie on the site root; none\nwhen send_auth_cookies said not to.",
                    "shapes": [
                        "@param array{expire: int, secure: bool, secureLoggedIn: bool, auth: string, loggedIn: string, send: bool} $plan from settle()"
                    ],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plan",
                            "type": "array",
                            "shape": "array{expire: int, secure: bool, secureLoggedIn: bool, auth: string, loggedIn: string, send: bool}",
                            "default": null,
                            "doc": "from settle()"
                        }
                    ],
                    "line": 73,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "clearing",
                    "static": false,
                    "visibility": "public",
                    "signature": "clearing(): bool",
                    "doc": "Whether signing out clears the cookies: clear_auth_cookie told, then\nsend_auth_cookies asked with no cookie in hand, as the reference asks\nthem (suite login-hooks).",
                    "shapes": [],
                    "params": [],
                    "line": 93,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": false,
                    "visibility": "public",
                    "signature": "clear(Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "The response with every sign-in cookie expired.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "mint",
                    "static": true,
                    "visibility": "public",
                    "signature": "mint(Minn\\Content\\UserRecord $user, int $expiration, string $token, string $scheme): string",
                    "doc": "A cookie value under any scheme's salt (auth, secure_auth, logged_in).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expiration",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 122
                }
            ]
        },
        {
            "name": "Minn\\Auth\\AuthFailure",
            "short": "AuthFailure",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/AuthFailure.php",
            "lines": 26,
            "doc": "Why a request is not authenticated, as the reference's error code: a\nmissing or invalid cookie, or a good one sent without a nonce, is\nrest_not_logged_in (the request is simply anonymous); a good cookie with\na nonce that does not verify is rest_cookie_invalid_nonce. The reason\ntells a good cookie sent without its nonce apart: that request is\nnobody, whoever plugin code then names.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Auth\\Authenticator",
                "Minn\\Rest\\Caller"
            ],
            "constructor": {
                "signature": "__construct(string $code, string $reason = '')",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "code",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "reason",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 21
            },
            "cases": [],
            "constants": [
                {
                    "name": "COOKIE_WITHOUT_NONCE",
                    "value": "'a sign-in cookie without its nonce'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "code",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "reason",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "cookieWithoutNonce",
                    "static": true,
                    "visibility": "public",
                    "signature": "cookieWithoutNonce(): self",
                    "doc": "A good sign-in cookie sent without the nonce that would let it vouch for its user.",
                    "shapes": [],
                    "params": [],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "notLoggedIn",
                    "static": true,
                    "visibility": "public",
                    "signature": "notLoggedIn(): self",
                    "doc": "No usable session.",
                    "shapes": [],
                    "params": [],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "invalidNonce",
                    "static": true,
                    "visibility": "public",
                    "signature": "invalidNonce(): self",
                    "doc": "A session whose nonce did not verify.",
                    "shapes": [],
                    "params": [],
                    "line": 36,
                    "end": 39
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Authenticated",
            "short": "Authenticated",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/Authenticated.php",
            "lines": 16,
            "doc": "A validated session: the user row and the raw session token behind it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\UserRecord"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BootPayload",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\SignIn",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\Caller"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\UserRecord $user, string $token, ?array $applicationPassword = NULL)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed>|null $applicationPassword the record that authenticated this call, when Basic auth did"
                ],
                "params": [
                    {
                        "name": "user",
                        "type": "Minn\\Content\\UserRecord",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "token",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "applicationPassword",
                        "type": "?array",
                        "shape": "array<string, mixed>|null",
                        "default": "NULL",
                        "doc": "the record that authenticated this call, when Basic auth did"
                    }
                ],
                "visibility": "public",
                "line": 13,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "user",
                    "type": "Minn\\Content\\UserRecord",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "token",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "applicationPassword",
                    "type": "?array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "id",
                    "static": false,
                    "visibility": "public",
                    "signature": "id(): int",
                    "doc": "The signed-in user's id.",
                    "shapes": [],
                    "params": [],
                    "line": 21,
                    "end": 24
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Authenticator",
            "short": "Authenticator",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/Authenticator.php",
            "lines": 149,
            "doc": "Resolves the current user two ways. A page load carries the cookie alone;\na REST call must also carry a nonce bound to the same session.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\AuthFailure",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\Nonce",
                "Minn\\Auth\\Password",
                "Minn\\Auth\\Sessions",
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Http\\Request",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Engine",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Auth\\Cookie $cookie, Minn\\Content\\Users $users)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "cookie",
                        "type": "Minn\\Auth\\Cookie",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 23
            },
            "cases": [],
            "constants": [
                {
                    "name": "NOBODY",
                    "value": "'$wp$2y$10$q/tQZiHVAKXuCoJIeZTH0.rb6Otms4vDKv0NrPeGKdvracPiLPy4W'",
                    "doc": "A real hash of a password nobody knows, checked against when the user does not exist so the answer takes as long either way.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "cookie",
                    "type": "Minn\\Auth\\Cookie",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromDb",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromDb(Minn\\Db $db): self",
                    "doc": "An authenticator over the shared database door.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "session",
                    "static": false,
                    "visibility": "public",
                    "signature": "session(array $cookies): Minn\\Auth\\Authenticated|Minn\\Auth\\AuthFailure",
                    "doc": "The session the cookie jar carries, or why there is none.",
                    "shapes": [
                        "@param array<string, string> $cookies"
                    ],
                    "params": [
                        {
                            "name": "cookies",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "rest",
                    "static": false,
                    "visibility": "public",
                    "signature": "rest(array $cookies, ?string $nonce): Minn\\Auth\\Authenticated|Minn\\Auth\\AuthFailure",
                    "doc": "The session for a REST call: the cookie, then the nonce. A cookie sent\nwithout a nonce is no sign-in at all (the request goes on signed out,\nas the reference's cookie check makes it); one with a nonce that does\nnot verify is refused (suite auth, checked against the reference).",
                    "shapes": [
                        "@param array<string, string> $cookies"
                    ],
                    "params": [
                        {
                            "name": "cookies",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "nonce",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "restFromRequest",
                    "static": false,
                    "visibility": "public",
                    "signature": "restFromRequest(Minn\\Http\\Request $request): Minn\\Auth\\Authenticated|Minn\\Auth\\AuthFailure",
                    "doc": "A REST caller: the cookie session with its nonce first; failing that,\nHTTP Basic credentials carrying an application password, which need no\nnonce. A wrong Basic pair is reported as not logged in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "applicationPassword",
                    "static": false,
                    "visibility": "public",
                    "signature": "applicationPassword(Minn\\Http\\Request $request): ?Minn\\Auth\\Authenticated",
                    "doc": "The user an Authorization: Basic header's application password unlocks, with the use recorded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "basicCredentials",
                    "static": true,
                    "visibility": "public",
                    "signature": "basicCredentials(Minn\\Http\\Request $request): ?array",
                    "doc": "The login and password an Authorization: Basic header carries, or null.",
                    "shapes": [
                        "@return array{0: string, 1: string}|null"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "applicationPasswordsAvailable",
                    "static": true,
                    "visibility": "public",
                    "signature": "applicationPasswordsAvailable(Minn\\Http\\Request $request): bool",
                    "doc": "Application passwords need HTTPS, unless plugin code says otherwise through the reference's filter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "applicationPasswordsAvailableFor",
                    "static": true,
                    "visibility": "public",
                    "signature": "applicationPasswordsAvailableFor(Minn\\Content\\UserRecord $user): bool",
                    "doc": "Whether Basic auth may sign this user in; the runtime's filter has the last word.",
                    "shapes": [
                        "@param array<string, mixed> $user"
                    ],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "login",
                    "static": false,
                    "visibility": "public",
                    "signature": "login(string $username, string $password): ?Minn\\Content\\UserRecord",
                    "doc": "Username and password to a user row, an outdated hash replaced as the sign-in succeeds; no session is created here.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "username",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 164
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Capabilities",
            "short": "Capabilities",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/Capabilities.php",
            "lines": 277,
            "doc": "The capability engine: a user's roles from {prefix}capabilities usermeta,\nwhat those roles and the user's own capabilities grant, and the meta-capability mapping for\nedit_post, delete_post, and read_post.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\RegisteredCaps",
                "Minn\\Auth\\Roles",
                "Minn\\Auth\\TypeCapabilities",
                "Minn\\Content\\Posts",
                "Minn\\Content\\RowCache",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\AdminTypes",
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\HiddenIntegrations",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\UploadsSize",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Reader",
                "Minn\\Context",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Services",
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Users $users, Minn\\Auth\\Roles $roles)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "roles",
                        "type": "Minn\\Auth\\Roles",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "roles",
                    "type": "Minn\\Auth\\Roles",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromDb",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromDb(Minn\\Db $db): self",
                    "doc": "The capability engine over the shared database door.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "roles",
                    "static": false,
                    "visibility": "public",
                    "signature": "roles(): Minn\\Auth\\Roles",
                    "doc": "The role definitions.",
                    "shapes": [],
                    "params": [],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "capsOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "capsOf(int $userId): array",
                    "doc": "The capabilities stored on the user, as stored: role names and the\ncapabilities granted (or taken away) one by one.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "rolesOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "rolesOf(int $userId): array",
                    "doc": "The role slugs a user holds: each stored capability that names a\nregistered role, whatever it is set to (probe: the reference counts\n'editor' => false as a role). One a plugin granted but never\nregistered does not count.",
                    "shapes": [
                        "@return list<string> role slugs"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "allcapsOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "allcapsOf(int $userId): array",
                    "doc": "Everything a user holds, as the reference's allcaps: each role's\ncapabilities in turn, then the user's own over them, role names\nincluded, so a capability taken away one by one stays away and\ncurrent_user_can('administrator') is true for an administrator.\nValues are as stored.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "can",
                    "static": false,
                    "visibility": "public",
                    "signature": "can(int $userId, string $capability, ?int $postId = NULL): bool",
                    "doc": "Does the user hold every primitive the (possibly meta) capability maps to?",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "map",
                    "static": false,
                    "visibility": "public",
                    "signature": "map(string $capability, int $userId, ?int $postId = NULL): array",
                    "doc": "The primitives a capability requires, all of which must be held.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "fileModsAllowed",
                    "static": true,
                    "visibility": "private",
                    "signature": "fileModsAllowed(string $context): bool",
                    "doc": "Whether file changes are allowed for a capability check, as wp_is_file_mod_allowed() answers: DISALLOW_FILE_MODS, through file_mod_allowed with the check's context.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "mapMore",
                    "static": false,
                    "visibility": "private",
                    "signature": "mapMore(string $capability, int $userId, ?int $objectId): array",
                    "doc": "The rest of the reference's meta capabilities (captured with\nmap_meta_cap for an administrator, an editor and an author): each\nnames the primitive that decides it, refuses outright, or maps\nthrough the object it is about. A name it does not know is its own\nprimitive.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "mapCommentCapability",
                    "static": false,
                    "visibility": "private",
                    "signature": "mapCommentCapability(int $userId, int $commentId): array",
                    "doc": "A comment is edited as its post is (as editing posts, when the post is gone); a comment that does not exist, by no one. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "commentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 183,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "mapPostCapability",
                    "static": false,
                    "visibility": "private",
                    "signature": "mapPostCapability(string $capability, int $userId, int $postId): array",
                    "doc": "A post's meta capability as the reference maps it (probe post-caps):\nread_post needs read for a published post or one's own, the private\nread for a private one, and what editing needs for anything else\n(future, draft, pending, trash). Editing or deleting one's own post\nneeds the published capability while it is published or scheduled (or\nwas, before the trash), the plain one otherwise; someone else's, the\nothers capability, with the published one while it is published or\nscheduled and the private one while it is private. The privacy policy\npage needs manage_options as well.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 208,
                    "end": 250
                },
                {
                    "routes": [],
                    "name": "mapTermCapability",
                    "static": false,
                    "visibility": "private",
                    "signature": "mapTermCapability(string $capability, int $userId, ?int $termId): ?array",
                    "doc": "A term capability on a plugin's taxonomy as the reference maps it\n(probe rest-plugin-caps): the taxonomy's own name for it (edit_terms,\ndelete_terms, assign_terms), mapped in turn; nothing for a term that\ndoes not exist or a default term's deletion (in any taxonomy). Null\notherwise for the built-in taxonomies, whose mapping is fixed.",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 261,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "fold",
                    "static": true,
                    "visibility": "private",
                    "signature": "fold(string $type, array $required): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $required",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "required",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 282,
                    "end": 285
                },
                {
                    "routes": [],
                    "name": "trashedFrom",
                    "static": false,
                    "visibility": "private",
                    "signature": "trashedFrom(int $postId): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 287,
                    "end": 294
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Cookie",
            "short": "Cookie",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/Cookie.php",
            "lines": 92,
            "doc": "The sign-in cookies: username|expiration|token|hmac, with\nkey  = HMAC-md5(username|fragment|expiration|token, the scheme's salt)\nhmac = HMAC-sha256(username|expiration|token, key)\nand the session live in the user's session_tokens store. The engine's own\nsign-in reads the logged_in one; check() judges any scheme's the way\nwp_validate_auth_cookie reports it (probe auth-cookies).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Password",
                "Minn\\Auth\\Salts",
                "Minn\\Auth\\Sessions",
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Auth\\AuthCookies",
                "Minn\\Auth\\Authenticator",
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Users $users, Minn\\Auth\\Sessions $sessions)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "sessions",
                        "type": "Minn\\Auth\\Sessions",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "sessions",
                    "type": "Minn\\Auth\\Sessions",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "name",
                    "static": false,
                    "visibility": "public",
                    "signature": "name(): string",
                    "doc": "The cookie name this site uses: a hash of the siteurl option.",
                    "shapes": [],
                    "params": [],
                    "line": 29,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "mint",
                    "static": false,
                    "visibility": "public",
                    "signature": "mint(Minn\\Content\\UserRecord $user, int $expiration, string $token): string",
                    "doc": "A sign-in cookie value for a user, expiry, and session token.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expiration",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "validate",
                    "static": false,
                    "visibility": "public",
                    "signature": "validate(string $value): ?Minn\\Auth\\Authenticated",
                    "doc": "The session a logged_in cookie value proves, or null when any part fails.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "check",
                    "static": false,
                    "visibility": "public",
                    "signature": "check(string $username, string $expiration, string $token, string $hmac, string $scheme, int $grace = 0): array",
                    "doc": "A cookie's parts judged under a scheme, in the reference's order:\nexpired (past its expiration plus $grace), bad_username, bad_hash (an\nunknown scheme never matches), bad_session_token, else valid with its\nuser.",
                    "shapes": [
                        "@return array{string, ?UserRecord}"
                    ],
                    "params": [
                        {
                            "name": "username",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expiration",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hmac",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "grace",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "fromJar",
                    "static": false,
                    "visibility": "public",
                    "signature": "fromJar(array $cookies): ?string",
                    "doc": "The logged_in cookie from a request's cookie jar: the canonical name\nfirst, then any logged_in cookie, since tooling may send a name\nderived from a different host.",
                    "shapes": [
                        "@param array<string, string> $cookies"
                    ],
                    "params": [
                        {
                            "name": "cookies",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "signature",
                    "static": true,
                    "visibility": "public",
                    "signature": "signature(string $username, string $fragment, int $expiration, string $token, string $scheme = 'logged_in'): ?string",
                    "doc": "A cookie's hmac under a scheme's salt, or null for a scheme with none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "username",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fragment",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expiration",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": "'logged_in'",
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 109
                }
            ]
        },
        {
            "name": "Minn\\Auth\\FastHash",
            "short": "FastHash",
            "namespace": "Minn\\Auth",
            "kind": "final class",
            "file": "public/minn/src/Minn/Auth/FastHash.php",
            "lines": 23,
            "doc": "The reference's hash for high-entropy secrets (\"$generic$\", WordPress 6.8\nand later): a 30-byte keyed BLAKE2b digest (sodium's generic hash, keyed\nby the scheme's fixed label) in URL-safe base64 without padding. Reset\nkeys and application passwords are stored this way, so a secret minted\non either stack verifies on the other. Pinned against hashes the\nreference made (tests/unit/auth-hashes.php). Without the sodium\nextension nothing can be hashed or verified this way.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\PasswordReset"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "PREFIX",
                    "value": "'$generic$'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "KEY",
                    "value": "'wp_fast_hash_6.8+'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "available",
                    "static": true,
                    "visibility": "public",
                    "signature": "available(): bool",
                    "doc": "Whether this PHP can make and check these hashes (the sodium extension).",
                    "shapes": [],
                    "params": [],
                    "line": 22,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "hash",
                    "static": true,
                    "visibility": "public",
                    "signature": "hash(string $secret): string",
                    "doc": "The \"$generic$\" hash of a secret.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "secret",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "verify",
                    "static": true,
                    "visibility": "public",
                    "signature": "verify(string $secret, string $hash): bool",
                    "doc": "Whether a secret matches a \"$generic$\" hash; false for any other kind of hash.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "secret",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hash",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                }
            ]
        },
        {
            "name": "Minn\\Auth\\LoginThrottle",
            "short": "LoginThrottle",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/LoginThrottle.php",
            "lines": 82,
            "doc": "Failed sign-ins per address, so a password guesser meets a wall: twenty\nfailures in fifteen minutes and the address waits out the window. The\ncounters live in the options table (autoload off), one row per address,\nas \"window start:count\"; a successful sign-in clears the row. An IPv6\naddress counts as its /64, the block one subscriber is handed, so\nstepping through it buys no fresh tries; each failure is counted in one\nstatement, so failures arriving together are all counted.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Auth\\SignIn",
                "Minn\\Cron\\Cron",
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 27
            },
            "cases": [],
            "constants": [
                {
                    "name": "LIMIT",
                    "value": "20",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "WINDOW",
                    "value": "900",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "PREFIX",
                    "value": "'minn_login_throttle_'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "retryAfter",
                    "static": false,
                    "visibility": "public",
                    "signature": "retryAfter(string $address, ?int $now = NULL): ?int",
                    "doc": "Seconds the address must wait, or null when it may try.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "recordFailure",
                    "static": false,
                    "visibility": "public",
                    "signature": "recordFailure(string $address, ?int $now = NULL): void",
                    "doc": "Counts one failed sign-in from an address within the current window.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": false,
                    "visibility": "public",
                    "signature": "clear(string $address): void",
                    "doc": "Forgets an address's failures.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "sweep",
                    "static": true,
                    "visibility": "public",
                    "signature": "sweep(Minn\\Db $db, int $now): int",
                    "doc": "Drops counters whose window has passed, at most a thousand in one\nstatement, however many addresses have failed; the number dropped.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": false,
                    "visibility": "private",
                    "signature": "read(string $address): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: int, 1: int} window start and failure count"
                    ],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "key",
                    "static": true,
                    "visibility": "private",
                    "signature": "key(string $address): string",
                    "doc": "The counter's option: the address's, or an IPv6 address's /64. An\naddress whose first 64 bits are zero (an IPv4 client a dual-stack\nserver shows as ::ffff:a.b.c.d) keeps its whole address, or every IPv4\nvisitor would share one counter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Nonce",
            "short": "Nonce",
            "namespace": "Minn\\Auth",
            "kind": "final class",
            "file": "public/minn/src/Minn/Auth/Nonce.php",
            "lines": 46,
            "doc": "The wp_rest nonce: ten characters of HMAC-md5(tick|wp_rest|uid|token)\nunder the nonce salt, accepted for the current tick and the one before.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Salts",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\BootPayload",
                "Minn\\Auth\\Authenticator",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\Resolver",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\RevisionsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "LIFETIME",
                    "value": "86400",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "lifetime",
                    "static": true,
                    "visibility": "public",
                    "signature": "lifetime(string|int $action): int",
                    "doc": "How long a nonce for an action lives, in seconds (nonce_life, handed\nthe action as the caller gave it; probe filter-inputs-3). A plugin's\nfilter reaches every nonce the engine makes and checks once plugins\nhave loaded; a lifetime under a second keeps the default.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "action",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "tick",
                    "static": true,
                    "visibility": "public",
                    "signature": "tick(string|int $action = -1): float",
                    "doc": "The current half-life tick a nonce for an action is bound to.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "action",
                            "type": "string|int",
                            "shape": "",
                            "default": "-1",
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": true,
                    "visibility": "public",
                    "signature": "create(int $userId, string $token, string|int $action = 'wp_rest'): string",
                    "doc": "A wp_rest nonce for a user and session token at the current tick.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string|int",
                            "shape": "",
                            "default": "'wp_rest'",
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "verify",
                    "static": true,
                    "visibility": "public",
                    "signature": "verify(string $nonce, int $userId, string $token, string $action = 'wp_rest'): bool",
                    "doc": "Whether a nonce is valid at this tick or the one before.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "nonce",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": "'wp_rest'",
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "at",
                    "static": true,
                    "visibility": "public",
                    "signature": "at(float $tick, int $userId, string $token, string $action): string",
                    "doc": "The nonce for a given tick.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tick",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 57
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Password",
            "short": "Password",
            "namespace": "Minn\\Auth",
            "kind": "final class",
            "file": "public/minn/src/Minn/Auth/Password.php",
            "lines": 71,
            "doc": "The stored password scheme. A modern \"$wp$2y$...\" value is bcrypt over\nbase64(HMAC-sha384(password, \"wp-sha384\")) at PHP's default cost (10 up\nto PHP 8.3, 12 from 8.4) unless the site's options say otherwise; under\nanother algorithm (argon2id) the hash is that algorithm's own. Legacy\nphpass \"$P$\" hashes and any other password_hash() value still verify, and\na sign-in replaces whatever needsRehash() says is outdated (probe\npassword-rehash).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\PortableHash"
            ],
            "usedBy": [
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\AuthCookies",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Cookie",
                "Minn\\Cli\\UserCommand",
                "Minn\\Content\\Users",
                "Minn\\Rest\\UsersController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "verify",
                    "static": true,
                    "visibility": "public",
                    "signature": "verify(string $password, string $hash): bool",
                    "doc": "Whether a password matches a stored hash: the \"$wp$\" scheme, legacy\nphpass, or any hash password_hash() makes. A password over 4,096\ncharacters never matches and costs no hashing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hash",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "hash",
                    "static": true,
                    "visibility": "public",
                    "signature": "hash(string $password, string $algorithm = Minn\\Auth\\PASSWORD_BCRYPT, array $options = array ( )): string",
                    "doc": "A stored hash: bcrypt in the \"$wp$\" scheme over the pre-hash, or, under\nany other algorithm, that algorithm's own hash of the password.",
                    "shapes": [
                        "@param array<string, mixed> $options password_hash() options (cost, ...); PHP's defaults when empty"
                    ],
                    "params": [
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "algorithm",
                            "type": "string",
                            "shape": "",
                            "default": "Minn\\Auth\\PASSWORD_BCRYPT",
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": "array ( )",
                            "doc": "password_hash() options (cost, ...); PHP's defaults when empty"
                        }
                    ],
                    "line": 43,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "needsRehash",
                    "static": true,
                    "visibility": "public",
                    "signature": "needsRehash(string $hash, string $algorithm = Minn\\Auth\\PASSWORD_BCRYPT, array $options = array ( )): bool",
                    "doc": "Whether a stored hash is not the one these settings would make: under\nbcrypt, anything outside the \"$wp$\" scheme or at another cost; under\nanother algorithm, whatever PHP says is outdated for it.",
                    "shapes": [
                        "@param array<string, mixed> $options"
                    ],
                    "params": [
                        {
                            "name": "hash",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "algorithm",
                            "type": "string",
                            "shape": "",
                            "default": "Minn\\Auth\\PASSWORD_BCRYPT",
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "fragment",
                    "static": true,
                    "visibility": "public",
                    "signature": "fragment(string $hash): string",
                    "doc": "The four characters of the hash the cookie key is derived from:\noffset 8 for legacy phpass (\"$P$\") and plain bcrypt (\"$2y$\"), the LAST\nfour for anything else (\"$wp$\", argon2, whose offset 8 is the same for\nevery password). Getting this wrong yields a cookie that verifies\nnowhere while every other check passes, so the branches are pinned by\nthe auth suite and the 2026-10-13 audit's probe.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hash",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "prehash",
                    "static": true,
                    "visibility": "private",
                    "signature": "prehash(string $password): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 72
                }
            ]
        },
        {
            "name": "Minn\\Auth\\PasswordReset",
            "short": "PasswordReset",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/PasswordReset.php",
            "lines": 78,
            "doc": "Password reset keys in the reference's storage shape: user_activation_key\nholds \"time:hash\", the key itself travels in the email link and is good\nfor a day. The hash is the reference's own ($generic$, FastHash), so a\nlink either stack sent works on the other. Older shapes still verify: a\nphpass hash (WordPress before 6.8) and the engine's former $minn$ HMAC.\nA matching key stored without its time (or, older still, stored as\nitself) is expired, as the reference treats it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\FastHash",
                "Minn\\Auth\\PortableHash",
                "Minn\\Auth\\Salts",
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Cli\\UserCommand",
                "Minn\\Engine",
                "Minn\\Login\\LoginController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 26
            },
            "cases": [],
            "constants": [
                {
                    "name": "LIFETIME",
                    "value": "86400",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "issue",
                    "static": false,
                    "visibility": "public",
                    "signature": "issue(Minn\\Content\\UserRecord $user): string",
                    "doc": "Mints a key, stores its hash, returns the key for the link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "mint",
                    "static": true,
                    "visibility": "public",
                    "signature": "mint(): array",
                    "doc": "A new key and the value that stores it (the time it was issued and its\nhash), for a caller that saves it itself.",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [],
                    "line": 42,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "verify",
                    "static": false,
                    "visibility": "public",
                    "signature": "verify(Minn\\Content\\UserRecord $user, string $key): bool",
                    "doc": "True when the key matches the stored hash and has not expired: a day, or what password_reset_expiration makes it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": false,
                    "visibility": "public",
                    "signature": "status(Minn\\Content\\UserRecord $user, string $key, int $lifetime = self::LIFETIME): string",
                    "doc": "\"valid\", \"expired\" (a matching key past its lifetime, a day unless\ngiven), \"unstamped\" (a matching key stored without a time, which the\nreference counts expired after asking password_reset_key_expired), or\n\"invalid\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lifetime",
                            "type": "int",
                            "shape": "",
                            "default": "self::LIFETIME",
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": false,
                    "visibility": "public",
                    "signature": "clear(Minn\\Content\\UserRecord $user): void",
                    "doc": "Forgets a user's reset key.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "hash",
                    "static": true,
                    "visibility": "private",
                    "signature": "hash(string $key): string",
                    "doc": "The stored hash for a new key: the reference's own, or phpass (which it also reads) without sodium.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "matches",
                    "static": true,
                    "visibility": "private",
                    "signature": "matches(string $key, string $hash): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hash",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 96
                }
            ]
        },
        {
            "name": "Minn\\Auth\\PortableHash",
            "short": "PortableHash",
            "namespace": "Minn\\Auth",
            "kind": "final class",
            "file": "public/minn/src/Minn/Auth/PortableHash.php",
            "lines": 86,
            "doc": "The portable phpass hash (\"$P$\"), from the published algorithm: an\niteration count character, an eight character salt, and MD5 iterated\nover salt and password, encoded in phpass's own base64 alphabet. The\nreference stores it in the post-password cookie (2^13 iterations, and it\naccepts nothing weaker there), and still verifies it for application\npasswords and reset keys made before its fast hash, which is why both\ndirections of each are accepted. Its pieces are public for phpass's own\nclass, PasswordHash (probe identity-internals): the base64 encoding,\nboth kinds of salt, and the hash with phpass's failure markers.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\Password",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Content\\PasswordGate",
                "Minn\\Login\\LoginController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ALPHABET",
                    "value": "'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "BLOWFISH_ALPHABET",
                    "value": "'./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'",
                    "doc": "bcrypt's own base64 alphabet.",
                    "visibility": "private"
                },
                {
                    "name": "MAX_LENGTH",
                    "value": "4096",
                    "doc": "The longest password hashed; a longer one is refused before any work, as the reference refuses it.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "hash",
                    "static": true,
                    "visibility": "public",
                    "signature": "hash(string $password, int $countLog2 = 13): string",
                    "doc": "A portable hash of a password, 2^$countLog2 iterations (the reference's cookies carry 2^13); \"*\" for one too long.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "countLog2",
                            "type": "int",
                            "shape": "",
                            "default": "13",
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "salt",
                    "static": true,
                    "visibility": "public",
                    "signature": "salt(string $input, int $countLog2): string",
                    "doc": "A portable setting: \"$P$\", the count's character, and six bytes of salt encoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "input",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "countLog2",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "blowfishSalt",
                    "static": true,
                    "visibility": "public",
                    "signature": "blowfishSalt(string $input, int $countLog2): string",
                    "doc": "A bcrypt setting: \"$2a$\", the two-digit cost, and the first sixteen bytes in bcrypt's base64.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "input",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "countLog2",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "verify",
                    "static": true,
                    "visibility": "public",
                    "signature": "verify(string $password, string $hash): bool",
                    "doc": "Whether a password matches a portable hash from the published algorithm.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hash",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "crypt",
                    "static": true,
                    "visibility": "public",
                    "signature": "crypt(string $password, string $setting): string",
                    "doc": "The hash for a setting; for a setting it cannot use (\"$P$\" or \"$H$\",\na count from 7 to 30, eight characters of salt) phpass's marker \"*0\",\nor \"*1\" when the setting is itself \"*0\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "setting",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "public",
                    "signature": "encode(string $input, int $count): string",
                    "doc": "phpass's base64: little-endian groups of three bytes, $count bytes of the input.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "input",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 102
                }
            ]
        },
        {
            "name": "Minn\\Auth\\RegisteredCaps",
            "short": "RegisteredCaps",
            "namespace": "Minn\\Auth",
            "kind": "final class",
            "file": "public/minn/src/Minn/Auth/RegisteredCaps.php",
            "lines": 24,
            "doc": "The capability names a plugin's post type or taxonomy registered, read\nfrom the runtime's registry once plugins are loaded (probe\nrest-plugin-caps): a type's cap object (create_posts, edit_posts,\npublish_posts...) and whether it maps meta capabilities, a taxonomy's\nterm capabilities. A built-in type's too (patterns, menu items,\ntemplates), all but posts and pages, whose families the engine knows;\nnull for those and when no runtime is up.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\TypeCapabilities",
                "Minn\\Rest\\TermsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "ofType",
                    "static": true,
                    "visibility": "public",
                    "signature": "ofType(string $type): ?WP_Post_Type",
                    "doc": "A post type's registered object (any but post and page), or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "ofTaxonomy",
                    "static": true,
                    "visibility": "public",
                    "signature": "ofTaxonomy(string $taxonomy): ?WP_Taxonomy",
                    "doc": "A plugin's taxonomy, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 40
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Roles",
            "short": "Roles",
            "namespace": "Minn\\Auth",
            "kind": "final class",
            "file": "public/minn/src/Minn/Auth/Roles.php",
            "lines": 68,
            "doc": "Role definitions from the site's {prefix}user_roles option, parsed by a\nbounded scan of the serialized blob, with the seeded contract copy as the\nfallback for a fresh install.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Cli\\UserCommand",
                "Minn\\Content\\Users",
                "Minn\\Rest\\UsersController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 23
            },
            "cases": [],
            "constants": [
                {
                    "name": "LEVELS",
                    "value": "array (   'administrator' => 10,   'editor' => 7,   'author' => 2,   'contributor' => 1,   'subscriber' => 0, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "roles",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "level",
                    "static": true,
                    "visibility": "public",
                    "signature": "level(string $role): int",
                    "doc": "The wp_user_level stored beside the capabilities meta.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "role",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "serializeSingle",
                    "static": true,
                    "visibility": "public",
                    "signature": "serializeSingle(string $role): string",
                    "doc": "The {role: true} capabilities meta in its serialized form.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "role",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "forget",
                    "static": false,
                    "visibility": "public",
                    "signature": "forget(): void",
                    "doc": "Drops the parsed map so the next read sees a rewritten option.",
                    "shapes": [],
                    "params": [],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every role with its name and capabilities, from the option or the shipped defaults.",
                    "shapes": [],
                    "params": [],
                    "line": 50,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(?string $blob): ?array",
                    "doc": "Each role is a string key over a two-entry array of \"name\" and\n\"capabilities\"; the capabilities map is {cap: bool}. Null when the\nblob has another shape, so the caller can fall back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Salts",
            "short": "Salts",
            "namespace": "Minn\\Auth",
            "kind": "final class",
            "file": "public/minn/src/Minn/Auth/Salts.php",
            "lines": 41,
            "doc": "The site's own secret material, read from the constants wp-config.php\ndefines, so the engine keys off exactly what the install used.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\Nonce",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Engine"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SCHEMES",
                    "value": "array (   'logged_in' =>    array (     0 => 'LOGGED_IN_KEY',     1 => 'LOGGED_IN_SALT',   ),   'nonce' =>    array (     0 => 'NONCE_KEY',     1 => 'NONCE_SALT',   ),   'auth' =>    array (     0 => 'AUTH_KEY',     1 => 'AUTH_SALT',   ),   'secure_auth' =>    array (     0 => 'SECURE_AUTH_KEY',     1 => 'SECURE_AUTH_SALT',   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "configured",
                    "static": true,
                    "visibility": "public",
                    "signature": "configured(): bool",
                    "doc": "True when every key and salt is defined and none is the installer's placeholder.",
                    "shapes": [],
                    "params": [],
                    "line": 21,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "knows",
                    "static": true,
                    "visibility": "public",
                    "signature": "knows(string $scheme): bool",
                    "doc": "Whether a scheme has a key and salt of its own (auth, secure_auth, logged_in, nonce).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "for",
                    "static": true,
                    "visibility": "public",
                    "signature": "for(string $scheme): string",
                    "doc": "The key and salt of a scheme joined, as the reference feeds them to its HMACs.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "hash",
                    "static": true,
                    "visibility": "public",
                    "signature": "hash(string $data, string $scheme): string",
                    "doc": "HMAC-md5 under the scheme's salt: the primitive every cookie and nonce is built from.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 50
                }
            ]
        },
        {
            "name": "Minn\\Auth\\Sessions",
            "short": "Sessions",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/Sessions.php",
            "lines": 173,
            "doc": "The session_tokens usermeta store: {sha256(token): {expiration, ip, ua,\nlogin}}. Read by a bounded scan of the serialized blob and written by\nserializing it ourselves, so stored data is never executed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Users"
            ],
            "usedBy": [
                "Minn\\Admin\\SessionsController",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Cookie",
                "Minn\\Engine",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "generateToken",
                    "static": true,
                    "visibility": "public",
                    "signature": "generateToken(): string",
                    "doc": "A 43-character token; only sha256(token) is ever stored or compared.",
                    "shapes": [],
                    "params": [],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "isLive",
                    "static": false,
                    "visibility": "public",
                    "signature": "isLive(int $userId, string $token): bool",
                    "doc": "Whether a session token is still stored and unexpired for a user.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(int $userId, int $expiration, string $ip, string $userAgent): string",
                    "doc": "Creates a session, pruning expired ones, and returns the raw token.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expiration",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": true,
                    "visibility": "public",
                    "signature": "plain(string $value): string",
                    "doc": "A request-supplied field (the address, the user agent) as the store\nkeeps it: the store is read back by shape, so it carries nothing that\nlooks like the shape, and no more than 255 characters.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "destroyAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroyAll(int $userId): void",
                    "doc": "Ends every session of the user (a password change).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "destroy",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroy(int $userId, string $token): bool",
                    "doc": "Removes one session; true when it existed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "destroyKey",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroyKey(int $userId, string $key): bool",
                    "doc": "Removes the session stored under a key (the sha256 of its token); true when it existed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "destroyOthers",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroyOthers(int $userId, string $keepKey): void",
                    "doc": "Ends every session of the user except the one stored under the given key.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "keepKey",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": false,
                    "visibility": "public",
                    "signature": "read(int $userId): array",
                    "doc": "Every stored session of a user, keyed by token hash. Each entry keeps\nits stored text under raw, so writing the store back leaves sessions\nthis request did not make exactly as they were, including anything a\nplugin attached to them.",
                    "shapes": [
                        "@return array<string, array{expiration: int, ip: string, ua: string, login: int, raw: string}>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "serialize",
                    "static": true,
                    "visibility": "public",
                    "signature": "serialize(array $sessions): string",
                    "doc": "The map in PHP's serialized form: stored entries as they were read, new ones key by key in the order given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sessions",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 170
                },
                {
                    "routes": [],
                    "name": "parseEntry",
                    "static": true,
                    "visibility": "private",
                    "signature": "parseEntry(string $inner): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "inner",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "prune",
                    "static": false,
                    "visibility": "private",
                    "signature": "prune(array $sessions): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sessions",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": false,
                    "visibility": "private",
                    "signature": "write(int $userId, array $sessions): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sessions",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "entry",
                    "static": true,
                    "visibility": "private",
                    "signature": "entry(array $entry): string",
                    "doc": "One new session: integers for the times, strings for the rest. @param array<string, int|string> $entry",
                    "shapes": [
                        "@param array<string, int|string> $entry"
                    ],
                    "params": [
                        {
                            "name": "entry",
                            "type": "array",
                            "shape": "array<string, int|string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 173,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "string",
                    "static": true,
                    "visibility": "private",
                    "signature": "string(string $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 185
                }
            ]
        },
        {
            "name": "Minn\\Auth\\SignIn",
            "short": "SignIn",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/SignIn.php",
            "lines": 65,
            "doc": "The door itself: what a sign-in surface needs beyond checking a\npassword. Sessions are minted here, the three cookies ride out on the\nresponse, and the failure counter behind the throttle is kept in one\nplace with the session store and the cookie jar it protects.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\AuthCookies",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\LoginThrottle",
                "Minn\\Content\\UserRecord",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Login\\LoginController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Auth\\AuthCookies $cookies, Minn\\Auth\\LoginThrottle $throttle)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "cookies",
                        "type": "Minn\\Auth\\AuthCookies",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "throttle",
                        "type": "Minn\\Auth\\LoginThrottle",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 23
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "cookies",
                    "type": "Minn\\Auth\\AuthCookies",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "throttle",
                    "type": "Minn\\Auth\\LoginThrottle",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "retryAfter",
                    "static": false,
                    "visibility": "public",
                    "signature": "retryAfter(string $address): ?int",
                    "doc": "Seconds this address must wait before another attempt, or null when it may try now.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "recordFailure",
                    "static": false,
                    "visibility": "public",
                    "signature": "recordFailure(string $address): void",
                    "doc": "Counts one failed attempt from an address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "hash",
                    "static": false,
                    "visibility": "public",
                    "signature": "hash(): string",
                    "doc": "The cookie-name hash the sign-in cookies, the postpass cookie, and the reset cookie share.",
                    "shapes": [],
                    "params": [],
                    "line": 38,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "establish",
                    "static": false,
                    "visibility": "public",
                    "signature": "establish(Minn\\Http\\Response $response, Minn\\Content\\UserRecord $user, Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Signs a user in for two days: a new session, and the response with the cookies attached for the browser session.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "remember",
                    "static": false,
                    "visibility": "public",
                    "signature": "remember(Minn\\Http\\Response $response, Minn\\Content\\UserRecord $user, Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Signs a user in for fourteen days, the cookies kept past the browser session: \"remember me\", and the one-time login link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "end",
                    "static": false,
                    "visibility": "public",
                    "signature": "end(Minn\\Http\\Response $response, Minn\\Auth\\Authenticated $session): Minn\\Http\\Response",
                    "doc": "Ends one session and clears the cookies from the response, unless send_auth_cookies says not to (AuthCookies::clearing).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "session",
                            "type": "Minn\\Auth\\Authenticated",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "endAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "endAll(Minn\\Http\\Response $response, int $userId): Minn\\Http\\Response",
                    "doc": "Ends every session of a user (a password reset) and clears the cookies from the response.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": false,
                    "visibility": "public",
                    "signature": "clear(Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "The response with the sign-in cookies cleared.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": false,
                    "visibility": "private",
                    "signature": "open(Minn\\Http\\Response $response, Minn\\Content\\UserRecord $user, Minn\\Http\\Request $request, int $days): Minn\\Http\\Response",
                    "doc": "A session longer than the two-day default is one to keep past the browser session, as the reference's remember-me does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "days",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 60
                }
            ]
        },
        {
            "name": "Minn\\Auth\\TypeCapabilities",
            "short": "TypeCapabilities",
            "namespace": "Minn\\Auth",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Auth/TypeCapabilities.php",
            "lines": 51,
            "doc": "The capability names a post type's permissions are built from. Posts and\npages own their families (edit_posts, edit_others_pages, ...). Navigation\nmenus fold every one of them onto edit_theme_options, which is why an\neditor may read a menu and only an administrator may change one; the\nreference's own registration says the same thing. A plugin's type\nanswers with the names it registered.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\RegisteredCaps"
            ],
            "usedBy": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FOLDED",
                    "value": "array (   'wp_navigation' => 'edit_theme_options', )",
                    "doc": "Types whose whole cap family collapses to a single name.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $type, string $capability): string",
                    "doc": "A cap name built from the post/page family, folded when the type folds, or the plugin type's own name for it (probe rest-plugin-caps).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": true,
                    "visibility": "public",
                    "signature": "create(string $type): string",
                    "doc": "The capability creating a post of the type needs: the edit capability, or a plugin type's create_posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "plural",
                    "static": true,
                    "visibility": "public",
                    "signature": "plural(string $type): string",
                    "doc": "The capability stem of a type: pages for page, posts for everything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "edit",
                    "static": true,
                    "visibility": "public",
                    "signature": "edit(string $type): string",
                    "doc": "The edit capability of a type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "editOthers",
                    "static": true,
                    "visibility": "public",
                    "signature": "editOthers(string $type): string",
                    "doc": "The edit-others capability of a type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "publish",
                    "static": true,
                    "visibility": "public",
                    "signature": "publish(string $type): string",
                    "doc": "The publish capability of a type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "readPrivate",
                    "static": true,
                    "visibility": "public",
                    "signature": "readPrivate(string $type): string",
                    "doc": "The read-private capability of a type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 64
                }
            ]
        },
        {
            "name": "Minn\\Autoloader",
            "short": "Autoloader",
            "namespace": "Minn",
            "kind": "final class",
            "file": "public/minn/src/Minn/Autoloader.php",
            "lines": 16,
            "doc": "PSR-4 for the Minn namespace: Minn\\Http\\Request lives at src/Minn/Http/Request.php.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Request"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(): void",
                    "doc": "Registers the PSR-4 loader for the Minn namespace.",
                    "shapes": [],
                    "params": [],
                    "line": 11,
                    "end": 22
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Attributes",
            "short": "Attributes",
            "namespace": "Minn\\Blocks",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Attributes.php",
            "lines": 30,
            "doc": "The JSON object a block delimiter carries, read in place. Rewriting one\nblock's attributes must not disturb the rest of the markup, so callers\ntake the object's exact substring rather than reserializing the document.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Theme\\TemplatePartTheme",
                "Minn\\Theme\\TemplatePatterns"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "objectAt",
                    "static": true,
                    "visibility": "public",
                    "signature": "objectAt(string $markup, int $at): ?string",
                    "doc": "The JSON object starting at $at, brace-matched through any strings; null when there is none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 40
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Bindings",
            "short": "Bindings",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Bindings.php",
            "lines": 138,
            "doc": "Block bindings (probe block-bindings): a block attribute bound to a\nsource registered with register_block_bindings_source takes the source's\nvalue as the block renders. Only the attributes a block supports bind\n(SUPPORTED, widened by block_bindings_supported_attributes and its\nper-block form); a \"__default\" pattern-overrides binding stands for every\none of them. A static block's saved HTML takes the values (rich text,\nkses'd, inside the element its definition selects; plain values set as\nthe selected element's attribute); a dynamic block renders with them.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SUPPORTED",
                    "value": "array (   'core/paragraph' =>    array (     0 => 'content',   ),   'core/heading' =>    array (     0 => 'content',   ),   'core/image' =>    array (     0 => 'id',     1 => 'url',     2 => 'title',     3 => 'alt',     4 => 'caption',   ),   'core/button' =>    array (     0 => 'url',     1 => 'text',     2 => 'linkTarget',     3 => 'rel',   ),   'core/post-date' =>    array (     0 => 'datetime',   ),   'core/navigation-link' =>    array (     0 => 'url',   ),   'core/navigation-submenu' =>    array (     0 => 'url',   ), )",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "supported",
                    "static": true,
                    "visibility": "public",
                    "signature": "supported(string $name): array",
                    "doc": "The attributes a block may bind (get_block_bindings_supported_attributes). @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "values",
                    "static": true,
                    "visibility": "public",
                    "signature": "values(Minn\\Blocks\\Block $block, array $context): array",
                    "doc": "The bound attributes' values for a block about to render, as the\nsources answer them for a WP_Block made with the context given (each\nsource also seeing the context it uses); the expanded bindings ride\nalong under metadata for a pattern-overrides default. Empty when\nnothing is bound or nothing answered.",
                    "shapes": [
                        "@param array<string, mixed> $context",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(string $html, string $blockName, array $values): string",
                    "doc": "A static block's HTML with the bound values in place, by its type's\nattribute definitions: rich text and html replace what the selected\nelement holds; an attribute source sets the selected element's\nattribute; anything else is left alone.",
                    "shapes": [
                        "@param array<string, mixed> $values"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "blockName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "values",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "inner",
                    "static": true,
                    "visibility": "private",
                    "signature": "inner(string $html, array $selectors, string $value): string",
                    "doc": "What the first element matching a selector holds (the block's first element counts), replaced. @param list<string> $selectors",
                    "shapes": [
                        "@param list<string> $selectors"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selectors",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "closing",
                    "static": true,
                    "visibility": "private",
                    "signature": "closing(string $html, string $tag, int $from): ?int",
                    "doc": "Where the element opened before $from closes: the offset of its \"</tag\", nested ones of the same name skipped.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "opening",
                    "static": true,
                    "visibility": "private",
                    "signature": "opening(string $name): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "attribute",
                    "static": true,
                    "visibility": "private",
                    "signature": "attribute(string $html, string $selector, string $name, mixed $value): string",
                    "doc": "The first element matching the selector, with an attribute set to the value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 155
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Block",
            "short": "Block",
            "namespace": "Minn\\Blocks",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Block.php",
            "lines": 63,
            "doc": "One parsed block. A null name is freeform HTML between blocks. The\ninnerContent list holds the block's own HTML chunks in order, with a\nnull placeholder wherever an inner block sits.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Blocks\\Bindings",
                "Minn\\Blocks\\Dynamic\\Archives",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\SyncedPattern",
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Serializer",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\ContentScan",
                "Minn\\Content\\Excerpt",
                "Minn\\Content\\Menus",
                "Minn\\Extension\\SeamRunner",
                "Minn\\Extension\\Seams",
                "Minn\\Runtime\\BlockFilters",
                "Minn\\Support\\Kses",
                "Minn\\Theme\\TemplatePatterns"
            ],
            "constructor": {
                "signature": "__construct(?string $name, array $attrs, array $innerBlocks, string $innerHtml, array $innerContent)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "name",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "attrs",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "innerBlocks",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "innerHtml",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "innerContent",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 17,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "name",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "attrs",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "innerBlocks",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "innerHtml",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "innerContent",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "freeform",
                    "static": true,
                    "visibility": "public",
                    "signature": "freeform(string $html): self",
                    "doc": "A block-less run of HTML, as the parser reads it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "fromArray",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromArray(array $block): self",
                    "doc": "A block as parse_blocks hands it out, as the value object. @param array<string, mixed> $block",
                    "shapes": [
                        "@param array<string, mixed> $block"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "withAttrs",
                    "static": false,
                    "visibility": "public",
                    "signature": "withAttrs(array $attrs): self",
                    "doc": "The same block with other attributes. @param array<string, mixed> $attrs",
                    "shapes": [
                        "@param array<string, mixed> $attrs"
                    ],
                    "params": [
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "toArray(): array",
                    "doc": "The block as parse_blocks hands it to plugin code.",
                    "shapes": [
                        "@return array{blockName: ?string, attrs: array<string, mixed>, innerBlocks: list<array<string, mixed>>, innerHTML: string, innerContent: list<string|null>}"
                    ],
                    "params": [],
                    "line": 55,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "attr",
                    "static": false,
                    "visibility": "public",
                    "signature": "attr(string $key, mixed $default = NULL): mixed",
                    "doc": "One attribute, or the default.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "mixed",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "className",
                    "static": false,
                    "visibility": "public",
                    "signature": "className(): string",
                    "doc": "The class names declared on the block's own attributes (className).",
                    "shapes": [],
                    "params": [],
                    "line": 73,
                    "end": 76
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\BlockName",
            "short": "BlockName",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/BlockName.php",
            "lines": 17,
            "doc": "The block name rules: a string, lower-case, `namespace/name`.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "refuse",
                    "static": true,
                    "visibility": "public",
                    "signature": "refuse(mixed $name): ?Minn\\Runtime\\Refusal",
                    "doc": "Why a block name is invalid, or null when it is fine.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 13,
                    "end": 25
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\BlockStream",
            "short": "BlockStream",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/BlockStream.php",
            "lines": 285,
            "doc": "Block markup read one token at a time, as the reference's streaming\nblock processor reads it (probe block-processor). A delimiter is an HTML\ncomment: whitespace after \"<!--\", an optional \"/\" (the closing flag),\n\"wp:\", a name (lowercase, an optional namespace), whitespace, optional\nJSON object attributes followed by whitespace, then \"-->\" or \"/-->\"\n(void). Any other comment is HTML. The HTML between delimiters comes out\nas its own token, reported as void (freeform at the top, inner HTML in a\nblock) before the delimiter that ends it, which is already read, so the\nclosing flag shows that delimiter's. Quirks kept on purpose:\n- trailing HTML after the last delimiter is dropped when it holds a\ncomment;\n- an unterminated comment is incomplete input only when it could\nstill become a delimiter, otherwise reading just stops;\n- attributes are parsed only when asked, and only that sets the JSON\nerror.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $text)",
                "doc": "A stream over block markup, before its first token.",
                "shapes": [],
                "params": [
                    {
                        "name": "text",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 54,
                "end": 56
            },
            "cases": [],
            "constants": [
                {
                    "name": "CLOSER",
                    "value": "'closer'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "OPENER",
                    "value": "'opener'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "VOID",
                    "value": "'void'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "READY",
                    "value": "'processor-ready'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "MATCHED",
                    "value": "'processor-matched'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "HTML_SPAN",
                    "value": "'processor-html-span'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "INCOMPLETE_INPUT",
                    "value": "'incomplete-input'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COMPLETE",
                    "value": "'processor-complete'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "WHITESPACE",
                    "value": "' \t \r\f'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "DELIMITER",
                    "value": "'#^[ \\\\t\\\\n\\\\r\\\\f]+(/)?wp:([a-z][a-z0-9_-]*(?:/[a-z][a-z0-9_-]*)?)[ \\\\t\\\\n\\\\r\\\\f]+(?:(\\\\{.*\\\\})[ \\\\t\\\\n\\\\r\\\\f]+)?(/)?$#s'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "state",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "error",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "jsonError",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "cursor",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "delimiter",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "html",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "delimiterWaiting",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "popNext",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "open",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "text",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "normalize",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalize(string $name): string",
                    "doc": "The name with core/ in front when it has no namespace.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "next",
                    "static": false,
                    "visibility": "public",
                    "signature": "next(): bool",
                    "doc": "Moves to the next token, HTML or delimiter; false at the end or on incomplete input.",
                    "shapes": [],
                    "params": [],
                    "line": 65,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "state",
                    "static": false,
                    "visibility": "public",
                    "signature": "state(): string",
                    "doc": "The current token's state: one of the class constants.",
                    "shapes": [],
                    "params": [],
                    "line": 82,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "error",
                    "static": false,
                    "visibility": "public",
                    "signature": "error(): ?string",
                    "doc": "incomplete-input when the text ran out inside what could be a delimiter, else null.",
                    "shapes": [],
                    "params": [],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "jsonError",
                    "static": false,
                    "visibility": "public",
                    "signature": "jsonError(): int",
                    "doc": "The JSON error from the last time attributes were asked for.",
                    "shapes": [],
                    "params": [],
                    "line": 94,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "delimiterType",
                    "static": false,
                    "visibility": "public",
                    "signature": "delimiterType(): ?string",
                    "doc": "opener, closer or void for a delimiter, void for HTML, null otherwise.",
                    "shapes": [],
                    "params": [],
                    "line": 100,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "closing",
                    "static": false,
                    "visibility": "public",
                    "signature": "closing(): bool",
                    "doc": "The last delimiter read had the closing flag.",
                    "shapes": [],
                    "params": [],
                    "line": 110,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "blockType",
                    "static": false,
                    "visibility": "public",
                    "signature": "blockType(): ?string",
                    "doc": "The delimiter's block type, null for anything else.",
                    "shapes": [],
                    "params": [],
                    "line": 116,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "printableType",
                    "static": false,
                    "visibility": "public",
                    "signature": "printableType(): ?string",
                    "doc": "The block type, or core/freeform for top-level HTML and #innerHTML for HTML inside a block.",
                    "shapes": [],
                    "params": [],
                    "line": 122,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "isHtml",
                    "static": false,
                    "visibility": "public",
                    "signature": "isHtml(): bool",
                    "doc": "Whether the token is HTML between delimiters.",
                    "shapes": [],
                    "params": [],
                    "line": 132,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "htmlContent",
                    "static": false,
                    "visibility": "public",
                    "signature": "htmlContent(): ?string",
                    "doc": "The HTML span's text, null for anything else.",
                    "shapes": [],
                    "params": [],
                    "line": 138,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "nonWhitespaceHtml",
                    "static": false,
                    "visibility": "public",
                    "signature": "nonWhitespaceHtml(): bool",
                    "doc": "Whether the token is HTML with something other than whitespace in it.",
                    "shapes": [],
                    "params": [],
                    "line": 144,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "breadcrumbs",
                    "static": false,
                    "visibility": "public",
                    "signature": "breadcrumbs(): array",
                    "doc": "The open block types, outermost first, with #html for an HTML span. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 150,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "opens",
                    "static": false,
                    "visibility": "public",
                    "signature": "opens(?string $type): bool",
                    "doc": "Whether this token opens a block (of the type, when given): never after a closer, and HTML only at the top.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "isType",
                    "static": false,
                    "visibility": "public",
                    "signature": "isType(string $type): bool",
                    "doc": "Whether the token is of the type; * matches anything.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 175
                },
                {
                    "routes": [],
                    "name": "span",
                    "static": false,
                    "visibility": "public",
                    "signature": "span(): ?array",
                    "doc": "The token's start and length in the text, null when there is no token. @return array{0: int, 1: int}|null",
                    "shapes": [
                        "@return array{0: int, 1: int}|null"
                    ],
                    "params": [],
                    "line": 178,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": false,
                    "visibility": "public",
                    "signature": "attributes(): ?array",
                    "doc": "The delimiter's attributes, parsed now (setting the JSON error), or null. @return array<mixed>|null",
                    "shapes": [
                        "@return array<mixed>|null"
                    ],
                    "params": [],
                    "line": 188,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "scan",
                    "static": false,
                    "visibility": "private",
                    "signature": "scan(): bool",
                    "doc": "From where the last token ended: the HTML before the next delimiter, the delimiter, or the end.",
                    "shapes": [],
                    "params": [],
                    "line": 206,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "emitHtml",
                    "static": false,
                    "visibility": "private",
                    "signature": "emitHtml(int $at, int $length): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 224,
                    "end": 232
                },
                {
                    "routes": [],
                    "name": "matchDelimiter",
                    "static": false,
                    "visibility": "private",
                    "signature": "matchDelimiter(): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 234,
                    "end": 245
                },
                {
                    "routes": [],
                    "name": "finish",
                    "static": false,
                    "visibility": "private",
                    "signature": "finish(?string $error): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 247,
                    "end": 252
                },
                {
                    "routes": [],
                    "name": "nextDelimiter",
                    "static": false,
                    "visibility": "private",
                    "signature": "nextDelimiter(int $from): array|false|null",
                    "doc": "The next delimiter from a position; null when there is none and no\ncomment came first (the rest is HTML), false when reading stops there\n(a comment came first, or one is cut off; cut off where a delimiter\ncould still begin is incomplete input).",
                    "shapes": [
                        "@return array{at: int, length: int, type: string, closing: bool, name: string, json: ?string}|false|null"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 279
                },
                {
                    "routes": [],
                    "name": "commentEnd",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentEnd(int $at): ?int",
                    "doc": "Where a comment starting here ends (just past it), or null when it never does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 282,
                    "end": 291
                },
                {
                    "routes": [],
                    "name": "couldBeDelimiter",
                    "static": false,
                    "visibility": "private",
                    "signature": "couldBeDelimiter(int $at): bool",
                    "doc": "Whether a comment cut off by the end of the text could still have become a delimiter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 294,
                    "end": 310
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Context",
            "short": "Context",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Context.php",
            "lines": 76,
            "doc": "What the template blocks render against: the resolution, the main\nquery's posts, and a stack of \"current post\" frames pushed by post\ntemplates and comment templates as they loop.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\CommentRecord",
                "Minn\\Content\\PostRecord",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Resolution"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer",
                "Minn\\Front\\FeedController",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Front\\Resolution $resolution, array $posts, int $total, int $perPage, bool $front)",
                "doc": "",
                "shapes": [
                    "@param list<PostRecord> $posts the main query's page of posts"
                ],
                "params": [
                    {
                        "name": "resolution",
                        "type": "Minn\\Front\\Resolution",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "array",
                        "shape": "list<PostRecord>",
                        "default": null,
                        "doc": "the main query's page of posts"
                    },
                    {
                        "name": "total",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "perPage",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "front",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "postStack",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "comment",
                    "type": "?Minn\\Content\\CommentRecord",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "resolution",
                    "type": "Minn\\Front\\Resolution",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "total",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "perPage",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "front",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forRest",
                    "static": true,
                    "visibility": "public",
                    "signature": "forRest(): self",
                    "doc": "A context for rendering outside a page: the home resolution and no posts.",
                    "shapes": [],
                    "params": [],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "post",
                    "static": false,
                    "visibility": "public",
                    "signature": "post(): ?Minn\\Content\\PostRecord",
                    "doc": "The post being rendered, innermost first.",
                    "shapes": [],
                    "params": [],
                    "line": 42,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "pushPost",
                    "static": false,
                    "visibility": "public",
                    "signature": "pushPost(Minn\\Content\\PostRecord $post): void",
                    "doc": "Enters a post's scope.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "popPost",
                    "static": false,
                    "visibility": "public",
                    "signature": "popPost(): void",
                    "doc": "Leaves the innermost post's scope.",
                    "shapes": [],
                    "params": [],
                    "line": 58,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "inLoop",
                    "static": false,
                    "visibility": "public",
                    "signature": "inLoop(): bool",
                    "doc": "Inside a post template loop (as opposed to the singular view).",
                    "shapes": [],
                    "params": [],
                    "line": 64,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "comment",
                    "static": false,
                    "visibility": "public",
                    "signature": "comment(): ?Minn\\Content\\CommentRecord",
                    "doc": "The comment being rendered, if any.",
                    "shapes": [],
                    "params": [],
                    "line": 70,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "withComment",
                    "static": false,
                    "visibility": "public",
                    "signature": "withComment(?Minn\\Content\\CommentRecord $comment): void",
                    "doc": "Enters or leaves a comment's scope.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "comment",
                            "type": "?Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "paged",
                    "static": false,
                    "visibility": "public",
                    "signature": "paged(): int",
                    "doc": "The page number being rendered.",
                    "shapes": [],
                    "params": [],
                    "line": 82,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "totalPages",
                    "static": false,
                    "visibility": "public",
                    "signature": "totalPages(): int",
                    "doc": "How many pages the listing makes.",
                    "shapes": [],
                    "params": [],
                    "line": 88,
                    "end": 91
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\CoreBlocks",
            "short": "CoreBlocks",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/CoreBlocks.php",
            "lines": 26,
            "doc": "The core block types' metadata as the reference registers them\n(data/blocks.json): their supports and selectors, read once.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Renderer",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\TreeStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "metadata",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "metadata",
                    "static": true,
                    "visibility": "public",
                    "signature": "metadata(string $name): array",
                    "doc": "A core block type's registered metadata; empty for a name core does not register.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "supports",
                    "static": true,
                    "visibility": "public",
                    "signature": "supports(string $name): array",
                    "doc": "A core block type's supports.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Duotone",
            "short": "Duotone",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Duotone.php",
            "lines": 79,
            "doc": "Duotone filters (probe block-supports): a CSS color read into its red,\ngreen, blue (0 to 255) and alpha (0 to 1, to two places) channels, and\nthe hidden SVG filter that maps an image's shades onto a list of colors,\none table of values per channel.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SVG",
                    "value": "'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 0 0\" width=\"0\" height=\"0\" focusable=\"false\" role=\"none\" style=\"visibility: hidden; position: absolute; left: -9999px; overflow: hidden;\" ><defs><filter id=\"%s\"><feColorMatrix color-interpolation-filters=\"sRGB\" type=\"matrix\" values=\" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 \" /><feComponentTransfer color-interpolation-filters=\"sRGB\" ><feFuncR type=\"table\" tableValues=\"%s\" /><feFuncG type=\"table\" tableValues=\"%s\" /><feFuncB type=\"table\" tableValues=\"%s\" /><feFuncA type=\"table\" tableValues=\"%s\" /></feComponentTransfer><feComposite in2=\"SourceGraphic\" operator=\"in\" /></filter></defs></svg>'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "svg",
                    "static": true,
                    "visibility": "public",
                    "signature": "svg(string $filterId, array $colors): string",
                    "doc": "The filter for a list of colors; colors that do not parse are left out.",
                    "shapes": [
                        "@param list<string> $colors"
                    ],
                    "params": [
                        {
                            "name": "filterId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "colors",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $input): ?array",
                    "doc": "A color's channels: hex (3, 4, 6 or 8 digits), rgb()/rgba() and hsl()/hsla().",
                    "shapes": [
                        "@return array{r: float, g: float, b: float, a: float}|null"
                    ],
                    "params": [
                        {
                            "name": "input",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "alpha",
                    "static": true,
                    "visibility": "private",
                    "signature": "alpha(?string $value, string $pct): float",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pct",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "hsl",
                    "static": true,
                    "visibility": "private",
                    "signature": "hsl(float $hue, float $saturation, float $lightness): array",
                    "doc": "",
                    "shapes": [
                        "@return array{r: float, g: float, b: float} hue in degrees, saturation and lightness in percent"
                    ],
                    "params": [
                        {
                            "name": "hue",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "saturation",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lightness",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 92
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Archives",
            "short": "Archives",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Archives.php",
            "lines": 29,
            "doc": "core/archives: the months that have published posts, newest first, with their counts when asked (showPostCounts).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Renderer",
                "Minn\\Db",
                "Minn\\Front\\Permalinks"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The block's HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 41
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Dates",
            "short": "Dates",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Dates.php",
            "lines": 15,
            "doc": "Site-local dates the way the dynamic blocks print them.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\I18n\\LocalDates"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "iso",
                    "static": true,
                    "visibility": "public",
                    "signature": "iso(Minn\\Content\\Site $site, string $local): string",
                    "doc": "ISO 8601 with the site's offset at that date (summer or winter time), from a site-local MySQL datetime.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "local",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 19
                },
                {
                    "routes": [],
                    "name": "format",
                    "static": true,
                    "visibility": "public",
                    "signature": "format(Minn\\Content\\Site $site, string $local, string $format = ''): string",
                    "doc": "A site-local MySQL datetime in the format given, else the date_format option, in the site's language.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "local",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 26
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\LatestComments",
            "short": "LatestComments",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/LatestComments.php",
            "lines": 71,
            "doc": "core/latest-comments: the newest approved comments with avatar, meta, and a 20-word excerpt.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Dynamic\\Dates",
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\CommentRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Rest\\UserObject",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 27
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The block's HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "excerpt",
                    "static": true,
                    "visibility": "private",
                    "signature": "excerpt(string $content): string",
                    "doc": "The first twenty words, with an ellipsis when there were more.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 88
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\LatestPosts",
            "short": "LatestPosts",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/LatestPosts.php",
            "lines": 34,
            "doc": "core/latest-posts: the newest published posts as a list, optionally dated.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Dynamic\\Dates",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Html"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 23
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Blocks\\Block $block): string",
                    "doc": "The block's HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 48
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Search",
            "short": "Search",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Search.php",
            "lines": 48,
            "doc": "core/search: the site search form. The button sits outside or inside\nthe field and shows text or the search icon; the block's colour and\nfont presets land on the button (font family on the input too). The\ninput id comes from the shared request counter.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Styles",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\I18n\\Gettext"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 28
            },
            "cases": [],
            "constants": [
                {
                    "name": "ICON",
                    "value": "'<svg class=\"search-icon\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"> \t\t\t\t\t<path d=\"M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z\"></path> \t\t\t\t</svg>'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The block's HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 66
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\SocialLinks",
            "short": "SocialLinks",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/SocialLinks.php",
            "lines": 79,
            "doc": "core/social-links and core/social-link. The list keeps its stored\nwrapper and gains the flex layout classes; each link renders from its\nparent's icon colours and the service's icon. The icons are the\nreference's rendered output captured as data (src/data/social-icons.json,\nthe upstream set is CC0); an unknown service gets the share icon.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Styles",
                "Minn\\Html",
                "Minn\\Json",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(string $iconsFile)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "iconsFile",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 32
            },
            "cases": [],
            "constants": [
                {
                    "name": "PARENT_SETTINGS",
                    "value": "array (   'openInNewTab' => true,   'showLabels' => true,   'iconColor' => true,   'iconColorValue' => true,   'iconBackgroundColor' => true,   'iconBackgroundColorValue' => true, )",
                    "doc": "What a social-links list provides its links as context.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "icons",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "iconsFile",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Blocks\\Renderer $renderer): void",
                    "doc": "Registers the block and its links with the renderer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "list",
                    "static": false,
                    "visibility": "private",
                    "signature": "list(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "link",
                    "static": false,
                    "visibility": "private",
                    "signature": "link(Minn\\Blocks\\Block $link, Minn\\Blocks\\Block $parent): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "link",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "icons",
                    "static": false,
                    "visibility": "private",
                    "signature": "icons(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, array{label: string, svg: string}>"
                    ],
                    "params": [],
                    "line": 96,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\SyncedPattern",
            "short": "SyncedPattern",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/SyncedPattern.php",
            "lines": 26,
            "doc": "core/block: a synced pattern, rendered from the wp_block post it references.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Renderer",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The block's HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 38
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\TagCloud",
            "short": "TagCloud",
            "namespace": "Minn\\Blocks\\Dynamic",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/TagCloud.php",
            "lines": 36,
            "doc": "core/tag-cloud: non-empty tags by name, sized from 8pt to 22pt in\nproportion to their counts (every tag at 8pt when the counts are equal).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\Format",
                "Minn\\Blocks\\Block",
                "Minn\\Content\\TermRecord",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\I18n\\Gettext"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Blocks\\Block $block): string",
                    "doc": "The block's HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 53
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Theme\\Comments",
            "short": "Comments",
            "namespace": "Minn\\Blocks\\Dynamic\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Theme/Comments.php",
            "lines": 271,
            "doc": "comments, comments-title, comment-template, the comment-* blocks, and the comment form.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\Format",
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Dynamic\\Dates",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Styles",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\CommentRecord",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\RowCache",
                "Minn\\Content\\Site",
                "Minn\\Content\\Texturize",
                "Minn\\Content\\Users",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Avatar",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Content\\Posts $posts, Minn\\Content\\Users $users)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 32,
                "end": 38
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Blocks\\Renderer $renderer): void",
                    "doc": "Registers this family's blocks with the renderer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "query",
                    "static": true,
                    "visibility": "public",
                    "signature": "query(array $vars): WP_Comment_Query",
                    "doc": "The comment query a comment template's vars ask for, run once a\nrequest: the template and its pagination links ask for the same one,\nand the reference answers the repeat from its cache. A comment write\ndrops it (RowCache).",
                    "shapes": [
                        "@param array<string, mixed> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "comments",
                    "static": false,
                    "visibility": "private",
                    "signature": "comments(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "Nothing at all when the post has no comments and takes none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "title",
                    "static": false,
                    "visibility": "private",
                    "signature": "title(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "template",
                    "static": false,
                    "visibility": "private",
                    "signature": "template(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "records",
                    "static": true,
                    "visibility": "private",
                    "signature": "records(array $comments, bool $threaded): array",
                    "doc": "The query's comments as records, each followed by its replies when\nthey are threaded; unthreaded, every one stands at the top level.",
                    "shapes": [
                        "@param list<\\WP_Comment> $comments",
                        "@return list<CommentRecord>"
                    ],
                    "params": [
                        {
                            "name": "comments",
                            "type": "array",
                            "shape": "list<\\WP_Comment>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "threaded",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "count",
                    "static": true,
                    "visibility": "private",
                    "signature": "count(Minn\\Content\\PostRecord $post): int",
                    "doc": "How many comments a post shows: its count, as get_comments_number filters it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "list",
                    "static": false,
                    "visibility": "private",
                    "signature": "list(array $all, int $parent, int $depth, Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [
                        "@param list<array> $all"
                    ],
                    "params": [
                        {
                            "name": "all",
                            "type": "array",
                            "shape": "list<array>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "avatar",
                    "static": false,
                    "visibility": "private",
                    "signature": "avatar(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The comment author's avatar in a comment loop; elsewhere the post author's, linked to their posts when asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 183,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "authorAvatar",
                    "static": false,
                    "visibility": "private",
                    "signature": "authorAvatar(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer, int $size): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "size",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "date",
                    "static": false,
                    "visibility": "private",
                    "signature": "date(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "When the comment was written, in the format asked for (else the site's), linked to the comment unless isLink is off.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 211,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "commentPost",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentPost(Minn\\Content\\CommentRecord $comment, Minn\\Blocks\\Renderer $renderer): ?Minn\\Content\\PostRecord",
                    "doc": "The post a comment belongs to: the loop's, or looked up when the comment came by itself (a comment block's render callback).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "comment",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 231
                },
                {
                    "routes": [],
                    "name": "authorName",
                    "static": false,
                    "visibility": "private",
                    "signature": "authorName(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 245
                },
                {
                    "routes": [],
                    "name": "content",
                    "static": false,
                    "visibility": "private",
                    "signature": "content(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 247,
                    "end": 256
                },
                {
                    "routes": [],
                    "name": "replyLink",
                    "static": false,
                    "visibility": "private",
                    "signature": "replyLink(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 258,
                    "end": 269
                },
                {
                    "routes": [],
                    "name": "form",
                    "static": false,
                    "visibility": "private",
                    "signature": "form(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 278
                },
                {
                    "routes": [],
                    "name": "commentForm",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentForm(int $postId, Minn\\Blocks\\Block $block): string",
                    "doc": "The form is comment_form()'s, as the reference's block renders it: the block theme's button in its defaults, the\nblock's classes on the respond wrapper, and every comment_form hook a\nplugin uses to add its fields (a spam plugin's hidden check, a\nconsent box) fired on the way.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 286,
                    "end": 298
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
            "short": "Navigation",
            "namespace": "Minn\\Blocks\\Dynamic\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Theme/Navigation.php",
            "lines": 535,
            "doc": "navigation, navigation-link, page-list. A navigation block's items come\nfrom its inner blocks, the wp_navigation post it references, the newest\npublished wp_navigation post, or (when none of those exist) the first\nclassic nav_menu; a block naming a menu that is gone has none, and no\nlist. A responsive menu wraps them in the overlay markup the reference\nemits. The nav is labelled by the block's aria label, or the menu's\ntitle, made unique in the request; the list carries the aria label as\ngiven (probe loose-classes).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Styles",
                "Minn\\Content\\Menus",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Json",
                "Minn\\Runtime\\Pages",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, ?Minn\\Content\\Menus $menus = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "menus",
                        "type": "?Minn\\Content\\Menus",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 77,
                "end": 83
            },
            "cases": [],
            "constants": [
                {
                    "name": "LISTABLE",
                    "value": "array (   0 => 'core/site-title',   1 => 'core/site-logo',   2 => 'core/social-links', )",
                    "doc": "The other blocks a navigation lists, each in an li (block_core_navigation_listable_blocks).",
                    "visibility": "private"
                },
                {
                    "name": "SUBMENU_CONTEXT",
                    "value": "'{ \"submenuOpenedBy\": { \"click\": false, \"hover\": false, \"focus\": false }, \"type\": \"submenu\", \"modal\": null, \"previousFocus\": null }'",
                    "doc": "A submenu's interactivity context.",
                    "visibility": "private"
                },
                {
                    "name": "SUBMENU_TOGGLE",
                    "value": "'data-wp-bind--aria-expanded=\"state.isSubmenuOpen\" data-wp-on--click=\"actions.toggleMenuOnClick\"'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "CHEVRON",
                    "value": "'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M1.50002 4L6.00002 8L10.5 4\" stroke-width=\"1.5\"></path></svg>'",
                    "doc": "The submenu toggle's chevron (block_core_navigation_link_render_submenu_icon).",
                    "visibility": "public"
                },
                {
                    "name": "CLOSE_ICON",
                    "value": "'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M13 11.8l6.1-6.3-1.1-1-6.1 6.2-6.1-6.2-1.1 1 6.1 6.3-6.5 6.7 1.1 1 6.5-6.6 6.5 6.6 1.1-1z\" /></svg>'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "menus",
                    "type": "?Minn\\Content\\Menus",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "submenuDirectives",
                    "static": true,
                    "visibility": "public",
                    "signature": "submenuDirectives(string $visibility): array",
                    "doc": "The attributes an item with a submenu takes, in the reference's order:\nits context, the focus and key handlers, the hover ones for a submenu\nthat opens on hover, the init watcher, and its tab index.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "visibility",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Blocks\\Renderer $renderer): void",
                    "doc": "Registers this family's blocks with the renderer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "wiring",
                    "static": true,
                    "visibility": "private",
                    "signature": "wiring(string $visibility): string",
                    "doc": "The submenu directives as attribute markup, a space after them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "visibility",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "navigation",
                    "static": false,
                    "visibility": "private",
                    "signature": "navigation(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "responsive",
                    "static": false,
                    "visibility": "private",
                    "signature": "responsive(string $nav, string $label, string $list, int $id, bool $hasIcon, string $colors): string",
                    "doc": "The overlay form of the menu: the open button, the modal container the\ninteractivity runtime drives, the close button, and the list inside.\nWhitespace matches the reference's template byte for byte.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "nav",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "list",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hasIcon",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "colors",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "items",
                    "static": false,
                    "visibility": "private",
                    "signature": "items(array $items, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The menu's items. Link-shaped blocks render as their own list\nitems; any other block is wrapped in a plain item.",
                    "shapes": [
                        "@param list<Block> $items"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 213,
                    "end": 223
                },
                {
                    "routes": [],
                    "name": "groups",
                    "static": false,
                    "visibility": "private",
                    "signature": "groups(array $items, Minn\\Blocks\\Renderer $renderer, string $open): string",
                    "doc": "The navigation's items as the reference lays them out (probe\nhook-inputs-2): the blocks block_core_navigation_listable_blocks names\nare wrapped in an li; each run of items whose markup holds an li\n(links, submenus, a page list, a plugin's own list items) is a list of\nits own; any other block stands between the runs as it renders, and\nan item that renders nothing ends a run.",
                    "shapes": [
                        "@param list<Block> $items"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "open",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 235,
                    "end": 252
                },
                {
                    "routes": [],
                    "name": "filteredItems",
                    "static": true,
                    "visibility": "private",
                    "signature": "filteredItems(array $items): array",
                    "doc": "The items as block_core_navigation_render_inner_blocks leaves them,\nhanded to a plugin as the WP_Block_List the reference renders.",
                    "shapes": [
                        "@param list<Block> $items",
                        "@return list<Block>"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 261,
                    "end": 274
                },
                {
                    "routes": [],
                    "name": "linkedPosts",
                    "static": true,
                    "visibility": "private",
                    "signature": "linkedPosts(array $items): array",
                    "doc": "The posts the items link to, submenus' too, read in one query before\neach link asks for its own.",
                    "shapes": [
                        "@param list<Block> $items",
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 283,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "weighLinks",
                    "static": false,
                    "visibility": "private",
                    "signature": "weighLinks(array $items): void",
                    "doc": "",
                    "shapes": [
                        "@param list<Block> $items each link to a post among them, submenus' too, through linkable()"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": "each link to a post among them, submenus' too, through linkable()"
                        }
                    ],
                    "line": 296,
                    "end": 304
                },
                {
                    "routes": [],
                    "name": "linkable",
                    "static": false,
                    "visibility": "private",
                    "signature": "linkable(Minn\\Blocks\\Block $block, int $id): bool",
                    "doc": "Whether a link to a post renders: the post is there with a status\nrender_block_core_navigation_link_allowed_post_status allows\n(publish), asked with the link's attributes and its block.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 311,
                    "end": 319
                },
                {
                    "routes": [],
                    "name": "presetClasses",
                    "static": true,
                    "visibility": "private",
                    "signature": "presetClasses(Minn\\Blocks\\Block $block): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string> the colour and font-size preset classes the block's attributes declare"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 322,
                    "end": 341
                },
                {
                    "routes": [],
                    "name": "overlayColors",
                    "static": true,
                    "visibility": "private",
                    "signature": "overlayColors(Minn\\Blocks\\Block $block): string",
                    "doc": "The overlay's colour classes, from the overlay* attributes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 344,
                    "end": 354
                },
                {
                    "routes": [],
                    "name": "link",
                    "static": false,
                    "visibility": "private",
                    "signature": "link(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 356,
                    "end": 383
                },
                {
                    "routes": [],
                    "name": "submenu",
                    "static": false,
                    "visibility": "private",
                    "signature": "submenu(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "A submenu: its link (a button, when the navigation opens submenus on\nclick) and its items. Inside a navigation it carries the toggle and the\nInteractivity API wiring the navigation's settings ask for; on its own\nit is a plain item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 391,
                    "end": 416
                },
                {
                    "routes": [],
                    "name": "overlayClose",
                    "static": false,
                    "visibility": "private",
                    "signature": "overlayClose(Minn\\Blocks\\Block $block): string",
                    "doc": "The overlay's close button: an icon (named by aria-label), its text, or both.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 419,
                    "end": 427
                },
                {
                    "routes": [],
                    "name": "classicItems",
                    "static": false,
                    "visibility": "private",
                    "signature": "classicItems(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<Block>"
                    ],
                    "params": [],
                    "line": 430,
                    "end": 434
                },
                {
                    "routes": [],
                    "name": "pageList",
                    "static": false,
                    "visibility": "private",
                    "signature": "pageList(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 436,
                    "end": 447
                },
                {
                    "routes": [],
                    "name": "submenuColours",
                    "static": true,
                    "visibility": "private",
                    "signature": "submenuColours(array $nav): array",
                    "doc": "A page list's submenu items wear the navigation's overlay colours: a\nnamed one as its classes, a custom one as has-* and an inline style.",
                    "shapes": [
                        "@param array<string, mixed> $nav the navigation's context",
                        "@return array{0: string, 1: string} the classes, each led by a space, and the style attribute"
                    ],
                    "params": [
                        {
                            "name": "nav",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the navigation's context"
                        }
                    ],
                    "line": 456,
                    "end": 469
                },
                {
                    "routes": [],
                    "name": "ancestorsOf",
                    "static": false,
                    "visibility": "private",
                    "signature": "ancestorsOf(array $tree, int $currentId): array",
                    "doc": "",
                    "shapes": [
                        "@return list<int> the ids of the current page's ancestors"
                    ],
                    "params": [
                        {
                            "name": "tree",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "currentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 472,
                    "end": 487
                },
                {
                    "routes": [],
                    "name": "pageItems",
                    "static": false,
                    "visibility": "private",
                    "signature": "pageItems(array $tree, int $parent, int $currentId, array $ancestors, array $submenuColors): string",
                    "doc": "A page list dresses its items as navigation items only while it is\nrendering inside a navigation block: submenu toggles, the item\nclasses, and the interactivity directives all belong to the nav. On\nits own (wp/v2/navigation serves one that way) the reference emits\nplain list items and a bare submenu list. Submenu items wear the\nnavigation's overlay colours (submenuColours()).",
                    "shapes": [
                        "@param array{0: string, 1: string} $submenuColors"
                    ],
                    "params": [
                        {
                            "name": "tree",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "currentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ancestors",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "submenuColors",
                            "type": "array",
                            "shape": "array{0: string, 1: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 499,
                    "end": 527
                },
                {
                    "routes": [],
                    "name": "navParent",
                    "static": false,
                    "visibility": "private",
                    "signature": "navParent(array $page, string $marker, string $home, string $link, string $children): string",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $page"
                    ],
                    "params": [
                        {
                            "name": "page",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "marker",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "home",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "link",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "children",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 530,
                    "end": 537
                },
                {
                    "routes": [],
                    "name": "menuPost",
                    "static": false,
                    "visibility": "private",
                    "signature": "menuPost(int $ref): array",
                    "doc": "The menu a navigation shows, and whether it is the one the block names.\nOnly a published menu shows, as on the reference: a named menu that\nis not published (a draft, private or trashed one) gives way to the\nlatest published menu, unlabelled; a named menu that does not exist\nshows nothing; with none named, the latest published menu.",
                    "shapes": [
                        "@return array{0: array<string, mixed>|null, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "ref",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 548,
                    "end": 560
                },
                {
                    "routes": [],
                    "name": "enqueueView",
                    "static": false,
                    "visibility": "private",
                    "signature": "enqueueView(): void",
                    "doc": "Interactive navigation markup brings the block's view module with it, as on the reference.",
                    "shapes": [],
                    "params": [],
                    "line": 563,
                    "end": 568
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
            "short": "PostBlocks",
            "namespace": "Minn\\Blocks\\Dynamic\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Theme/PostBlocks.php",
            "lines": 260,
            "doc": "The post-* blocks: they render the context's current post.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Dynamic\\Dates",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Styles",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\Excerpt",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Content\\Texturize",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Extension\\Extensions",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Content\\Users $users, Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 32,
                "end": 38
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Blocks\\Renderer $renderer): void",
                    "doc": "Registers this family's blocks with the renderer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "title",
                    "static": false,
                    "visibility": "private",
                    "signature": "title(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "content",
                    "static": false,
                    "visibility": "private",
                    "signature": "content(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "In a loop the content stops at the more tag with a \"(more…)\" link; on its own page it runs whole.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "date",
                    "static": false,
                    "visibility": "private",
                    "signature": "date(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "authorName",
                    "static": false,
                    "visibility": "private",
                    "signature": "authorName(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "excerpt",
                    "static": false,
                    "visibility": "private",
                    "signature": "excerpt(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "featuredImage",
                    "static": false,
                    "visibility": "private",
                    "signature": "featuredImage(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "terms",
                    "static": false,
                    "visibility": "private",
                    "signature": "terms(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "navigationLink",
                    "static": false,
                    "visibility": "private",
                    "signature": "navigationLink(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "Off a single post or page there is no neighbour to link: nothing at all.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "termRow",
                    "static": false,
                    "visibility": "private",
                    "signature": "termRow(string $taxonomy, int $termId): ?Minn\\Content\\TermRecord",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 249,
                    "end": 252
                },
                {
                    "routes": [],
                    "name": "previewSource",
                    "static": false,
                    "visibility": "private",
                    "signature": "previewSource(Minn\\Content\\PostRecord $post, Minn\\Front\\Resolution $resolution): ?Minn\\Content\\PostRecord",
                    "doc": "On a preview, the post's newest autosave, whoever wrote it, stands in for its stored fields (as _set_preview does).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 261,
                    "end": 268
                },
                {
                    "routes": [],
                    "name": "target",
                    "static": true,
                    "visibility": "private",
                    "signature": "target(Minn\\Blocks\\Block $block): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 270,
                    "end": 273
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": true,
                    "visibility": "private",
                    "signature": "open(string $tag, array $classes, Minn\\Blocks\\Block $block, bool $styleFirst = false, bool $linkColorClass = false): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "classes",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "styleFirst",
                            "type": "bool",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        },
                        {
                            "name": "linkColorClass",
                            "type": "bool",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        }
                    ],
                    "line": 275,
                    "end": 288
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
            "short": "QueryBlocks",
            "namespace": "Minn\\Blocks\\Dynamic\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Theme/QueryBlocks.php",
            "lines": 283,
            "doc": "query, post-template, query-title, query-no-results, query-pagination, query-total.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Styles",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\Page",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Texturize",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Serialized",
                "Minn\\Theme\\ArchiveTitle"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 31,
                "end": 36
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "queries",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Blocks\\Renderer $renderer): void",
                    "doc": "Registers this family's blocks with the renderer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "query",
                    "static": false,
                    "visibility": "private",
                    "signature": "query(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The query wrapper is stored markup; the block sets the loop its children read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "queried",
                    "static": true,
                    "visibility": "private",
                    "signature": "queried(Minn\\Blocks\\Block $block, array $attrs, int $page): Minn\\Content\\Page",
                    "doc": "A query loop's posts as the reference finds them: the arguments\nbuild_query_vars_from_query_block makes of the block's query (through\nquery_loop_block_query_vars) for the page its query-{id}-page asks\nfor, run through WP_Query, so pre_get_posts and the posts_* filters\nshape it too.",
                    "shapes": [
                        "@param array<string, mixed> $attrs the block's query"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block's query"
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "loop",
                    "static": false,
                    "visibility": "private",
                    "signature": "loop(Minn\\Blocks\\Block $block, array $attrs, Minn\\Blocks\\Renderer $renderer): array",
                    "doc": "A loop as the query block sets it: the main query's page when it\ninherits, else its own query for the page its query-{id}-page asks for.",
                    "shapes": [
                        "@param array<string, mixed> $attrs the block's query",
                        "@return array{page: Page, inherit: bool, paged: int, perPage: int}"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block's query"
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": false,
                    "visibility": "private",
                    "signature": "current(?Minn\\Blocks\\Renderer $renderer = NULL): array",
                    "doc": "The innermost loop being rendered; outside one, the loop a block's context provides (a post template called by its render callback).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "?Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "total",
                    "static": false,
                    "visibility": "private",
                    "signature": "total(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "How many posts the loop found, or which of them this page shows (displayType range-display).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "postTemplate",
                    "static": false,
                    "visibility": "private",
                    "signature": "postTemplate(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 163
                },
                {
                    "routes": [],
                    "name": "postClasses",
                    "static": false,
                    "visibility": "private",
                    "signature": "postClasses(Minn\\Content\\PostRecord $post, bool $sticky): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sticky",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 166,
                    "end": 194
                },
                {
                    "routes": [],
                    "name": "queryTitle",
                    "static": false,
                    "visibility": "private",
                    "signature": "queryTitle(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 214
                },
                {
                    "routes": [],
                    "name": "noResults",
                    "static": false,
                    "visibility": "private",
                    "signature": "noResults(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "pagination",
                    "static": false,
                    "visibility": "private",
                    "signature": "pagination(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "Pagination renders only when the loop it belongs to has more than one page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 230,
                    "end": 273
                },
                {
                    "routes": [],
                    "name": "paginationBase",
                    "static": false,
                    "visibility": "private",
                    "signature": "paginationBase(Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The current listing's own URL, without a page number.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 276,
                    "end": 288
                },
                {
                    "routes": [],
                    "name": "numbers",
                    "static": false,
                    "visibility": "private",
                    "signature": "numbers(int $paged, int $pages, callable $link): string",
                    "doc": "",
                    "shapes": [
                        "@param callable(int): string $link"
                    ],
                    "params": [
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pages",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "link",
                            "type": "callable",
                            "shape": "callable(int): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 291,
                    "end": 300
                },
                {
                    "routes": [],
                    "name": "archiveTitle",
                    "static": false,
                    "visibility": "private",
                    "signature": "archiveTitle(array $type): string",
                    "doc": "A post type archive's title: the type's label, renamed by the post_type_archive_title filter when a plugin does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 303,
                    "end": 307
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Theme\\Structure",
            "short": "Structure",
            "namespace": "Minn\\Blocks\\Dynamic\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Theme/Structure.php",
            "lines": 105,
            "doc": "template-part, pattern, site-title, site-tagline, site-logo.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\Site",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\Runtime\\BlockHooks",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Theme\\Theme $theme, Minn\\Theme\\Templates $templates, Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "theme",
                        "type": "Minn\\Theme\\Theme",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "templates",
                        "type": "Minn\\Theme\\Templates",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "theme",
                    "type": "Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "templates",
                    "type": "Minn\\Theme\\Templates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Blocks\\Renderer $renderer): void",
                    "doc": "Registers this family's blocks with the renderer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "templatePart",
                    "static": false,
                    "visibility": "private",
                    "signature": "templatePart(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The wrapper element follows the part's area: header, footer, or a div.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "announcePart",
                    "static": true,
                    "visibility": "private",
                    "signature": "announcePart(Minn\\Blocks\\Block $block, string $slug, string $source, string|int $where, ?string $markup): void",
                    "doc": "Tells plugins where a template part came from, as the reference does\nas it renders one: render_block_core_template_part_post (with the\nsaved part), _file (with the theme file's path) or _none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "markup",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "pattern",
                    "static": false,
                    "visibility": "private",
                    "signature": "pattern(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "siteTitle",
                    "static": false,
                    "visibility": "private",
                    "signature": "siteTitle(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "siteTagline",
                    "static": false,
                    "visibility": "private",
                    "signature": "siteTagline(Minn\\Blocks\\Block $block): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 124
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
            "short": "TermBlocks",
            "namespace": "Minn\\Blocks\\Dynamic\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/Dynamic/Theme/TermBlocks.php",
            "lines": 71,
            "doc": "term-name, term-count and term-description: the term a block's context\nnames (termId and taxonomy, as a terms query provides them), else the\nterm archive being viewed; nothing for neither (probe core-blocks).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Styles",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Html"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Terms $terms, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 30
            },
            "cases": [],
            "constants": [
                {
                    "name": "BRACKETS",
                    "value": "array (   'round' =>    array (     0 => '(',     1 => ')',   ),   'square' =>    array (     0 => '[',     1 => ']',   ),   'curly' =>    array (     0 => '{',     1 => '}',   ),   'angle' =>    array (     0 => '<',     1 => '>',   ),   'none' =>    array (     0 => '',     1 => '',   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Blocks\\Renderer $renderer): void",
                    "doc": "Registers this family's blocks with the renderer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "name",
                    "static": false,
                    "visibility": "private",
                    "signature": "name(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The name, as a paragraph or the heading level asked for, linked to its archive when asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "count",
                    "static": false,
                    "visibility": "private",
                    "signature": "count(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "How many posts the term holds, in the brackets asked for (round by default).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "description",
                    "static": false,
                    "visibility": "private",
                    "signature": "description(Minn\\Blocks\\Block $block, Minn\\Blocks\\Renderer $renderer): string",
                    "doc": "The description as written for a term in context; a term archive's as a paragraph, the way term_description gives it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": false,
                    "visibility": "private",
                    "signature": "term(Minn\\Blocks\\Renderer $renderer): array",
                    "doc": "",
                    "shapes": [
                        "@return array{?TermRecord, bool} the term, and whether the block's context named it"
                    ],
                    "params": [
                        {
                            "name": "renderer",
                            "type": "Minn\\Blocks\\Renderer",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 91
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Elements",
            "short": "Elements",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Elements.php",
            "lines": 121,
            "doc": "Per-block element styles (style.elements in a block's attributes, the\nlink colour most often; probe block-supports). A block whose element\nstyles set a colour gets a numbered wp-elements-N class and a rule per\nelement and state, recorded with the page's block-support styles in\nrender order: links (their text colour, plain or on hover), headings,\neach heading level and buttons (text, background or gradient). A block\ntype whose colour support skips serialization, whole or for links,\nheadings or buttons, writes none for those.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Styles",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SELECTORS",
                    "value": "array (   'link' => 'a:where(:not(.wp-element-button))',   'heading' => 'h1, h2, h3, h4, h5, h6',   'h1' => 'h1',   'h2' => 'h2',   'h3' => 'h3',   'h4' => 'h4',   'h5' => 'h5',   'h6' => 'h6',   'button' => '.wp-element-button, .wp-block-button__link', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "KINDS",
                    "value": "array (   'link' => 'link',   'heading' => 'heading',   'h1' => 'heading',   'h2' => 'heading',   'h3' => 'heading',   'h4' => 'heading',   'h5' => 'heading',   'h6' => 'heading',   'button' => 'button', )",
                    "doc": "The kind each element's skip answers to: every heading level is a heading.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "className",
                    "static": true,
                    "visibility": "public",
                    "signature": "className(array $attrs, array $supports): ?string",
                    "doc": "The block's wp-elements-N class, recording its rules; null when its\nelement styles earn none.",
                    "shapes": [
                        "@param array<string, mixed> $supports the block type's supports"
                    ],
                    "params": [
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "supports",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block type's supports"
                        }
                    ],
                    "line": 37,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "shouldAdd",
                    "static": true,
                    "visibility": "public",
                    "signature": "shouldAdd(array $elements, array $skip): bool",
                    "doc": "Whether element styles earn a class: a link's text colour (or its\nhover's), a heading's, a heading level's or a button's text,\nbackground or gradient, for a kind not skipped.",
                    "shapes": [
                        "@param array<string, mixed> $elements",
                        "@param array<string, bool> $skip by kind: link, heading, button"
                    ],
                    "params": [
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "array",
                            "shape": "array<string, bool>",
                            "default": null,
                            "doc": "by kind: link, heading, button"
                        }
                    ],
                    "line": 60,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "skips",
                    "static": true,
                    "visibility": "public",
                    "signature": "skips(array $supports): array",
                    "doc": "The kinds a block type's colour support skips serializing.",
                    "shapes": [
                        "@param array<string, mixed> $supports",
                        "@return array<string, bool>"
                    ],
                    "params": [
                        {
                            "name": "supports",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "rules",
                    "static": true,
                    "visibility": "private",
                    "signature": "rules(string $class, array $elements, array $skip): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $elements",
                        "@param array<string, bool> $skip",
                        "@return list<array{selector: string, declarations: array<string, string>}>"
                    ],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "array",
                            "shape": "array<string, bool>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "declarations",
                    "static": true,
                    "visibility": "private",
                    "signature": "declarations(array $styles): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 138
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\ImageTags",
            "short": "ImageTags",
            "namespace": "Minn\\Blocks",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Blocks/ImageTags.php",
            "lines": 312,
            "doc": "The attributes the reference adds to an <img> that carries a\nwp-image-{id} class: loading, decoding, width and height (prepended, in\nthat order), and srcset plus sizes (appended). The srcset lists the\ndisplayed size first, then every same-ratio size in stored order, then\nthe original.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\RenderState",
                "Minn\\Content\\Posts",
                "Minn\\Html",
                "Minn\\Media\\Metadata",
                "Minn\\Media\\Uploads",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Media\\Uploads $uploads, Closure $front)",
                "doc": "",
                "shapes": [
                    "@param Closure(): bool $front whether the images are on a front-end page, where the loading budget applies"
                ],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "uploads",
                        "type": "Minn\\Media\\Uploads",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "front",
                        "type": "Closure",
                        "shape": "Closure(): bool",
                        "default": null,
                        "doc": "whether the images are on a front-end page, where the loading budget applies"
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "uploads",
                    "type": "Minn\\Media\\Uploads",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "front",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "enrich",
                    "static": false,
                    "visibility": "public",
                    "signature": "enrich(string $html): string",
                    "doc": "Rewrites every wp-image-* <img> in a fragment; other images pass through.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "enrichGallery",
                    "static": false,
                    "visibility": "public",
                    "signature": "enrichGallery(string $html): string",
                    "doc": "The same for a gallery: every image also carries its data-id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "enrichPlugin",
                    "static": false,
                    "visibility": "public",
                    "signature": "enrichPlugin(string $html): string",
                    "doc": "The same for a plugin block's output, where the reference adds no sizes=\"auto\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "content",
                    "static": false,
                    "visibility": "public",
                    "signature": "content(string $html, mixed $context = NULL): string",
                    "doc": "Every <img> and <iframe> of a content fragment as the reference's\nwp_filter_content_tags leaves it: an attachment's image is enriched as\nabove (a loading it already has is kept, and an eager large one is\nfetched first); any other image is decoded asynchronously and, when its\nsize is known, loaded lazily or by the page's budget; an iframe with a\nsize is loaded lazily.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "mixed",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "finished",
                    "static": false,
                    "visibility": "public",
                    "signature": "finished(string $html, string $context): string",
                    "doc": "Content the engine fitted out itself, with what the_content's other\ncallbacks added on the way (an attachment's own link, a plugin's\nimage): an image still without its loading attributes is fitted as\nthe rest were, then each is offered to wp_content_img_tag, as\nwp_filter_content_tags would.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "featured",
                    "static": false,
                    "visibility": "public",
                    "signature": "featured(int $attachmentId, string $alt, string $style): string",
                    "doc": "A post's featured image at full size, in the reference's attribute\norder (dimensions, source, class, alt, style, then the loading\nattributes and the srcset). Empty when the attachment has no file.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attachmentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "alt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "style",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 307,
                    "end": 332
                },
                {
                    "routes": [],
                    "name": "sized",
                    "static": false,
                    "visibility": "private",
                    "signature": "sized(string $tag): string",
                    "doc": "A template's image: an attachment's gets its srcset and sizes in place, nothing more; any other is left as it is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "fit",
                    "static": false,
                    "visibility": "private",
                    "signature": "fit(string $tag): string",
                    "doc": "One content image fitted out: an attachment's (by its wp-image class) in full, any other with its loading attributes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "attachmentOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "attachmentOf(string $tag): int",
                    "doc": "The attachment an image names in its wp-image-{id} class, or 0.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "plainImage",
                    "static": false,
                    "visibility": "private",
                    "signature": "plainImage(string $tag): string",
                    "doc": "An image that is not an attachment's: decoding always, loading when its size is known and it has none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "autoSized",
                    "static": true,
                    "visibility": "private",
                    "signature": "autoSized(string $tag): string",
                    "doc": "A lazy image's sizes led by \"auto\" (wp_img_tag_add_auto_sizes), unless they already are or a plugin says not to (probe rest-attachments-controller).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "lazyFrame",
                    "static": true,
                    "visibility": "private",
                    "signature": "lazyFrame(string $tag): string",
                    "doc": "An iframe with a width and a height, and no loading of its own, loads lazily.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "rewrite",
                    "static": false,
                    "visibility": "private",
                    "signature": "rewrite(string $html, bool $withDataId, bool $autoSizes): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "withDataId",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "autoSizes",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 150,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "loadingPrefix",
                    "static": false,
                    "visibility": "private",
                    "signature": "loadingPrefix(int $width = 0, int $height = 0): array",
                    "doc": "On a page the first big-enough content image is fetched eagerly with\nhigh priority, the next few are eager, and the rest lazy; only lazy\nimages carry the \"auto\" sizes hint. In a REST response every image is\nlazy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "givenLoading",
                    "static": false,
                    "visibility": "private",
                    "signature": "givenLoading(string $loading, int $width, int $height): array",
                    "doc": "An image that names its own loading keeps it: an eager one large enough is fetched first, every one is decoded asynchronously. @return array{0: string, 1: bool}",
                    "shapes": [
                        "@return array{0: string, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "loading",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 183,
                    "end": 189
                },
                {
                    "routes": [],
                    "name": "minimumPriorityPixels",
                    "static": true,
                    "visibility": "private",
                    "signature": "minimumPriorityPixels(): int",
                    "doc": "The area an image must cover before it is worth fetching first.",
                    "shapes": [],
                    "params": [],
                    "line": 192,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "enrichTag",
                    "static": false,
                    "visibility": "private",
                    "signature": "enrichTag(string $tag, int $attachmentId, bool $withDataId, bool $autoSizes): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attachmentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "withDataId",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "autoSizes",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 217
                },
                {
                    "routes": [],
                    "name": "candidates",
                    "static": false,
                    "visibility": "private",
                    "signature": "candidates(string $tag, int $attachmentId): ?array",
                    "doc": "The srcset candidates for an attachment's image, keyed by width: the\nshown size first, then same-ratio sizes in stored order, then the\noriginal; with the shown width and height, the metadata and the src.\nNull when the image is not one of the attachment's files.",
                    "shapes": [
                        "@return array{0: array<int, string>, 1: int, 2: int, 3: array<string, mixed>, 4: string}|null"
                    ],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attachmentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 265
                },
                {
                    "routes": [],
                    "name": "srcsetAttributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "srcsetAttributes(array $candidates, int $width, bool $auto, int $attachmentId = 0, array $meta = array ( ), string $src = '', int $height = 0): string",
                    "doc": "A srcset needs a choice: one candidate yields no srcset and no sizes.\nWith the runtime up, plugin code filters the candidates and the sizes\nhint the way the reference lets it (wp_calculate_image_srcset,\nwp_calculate_image_sizes).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "candidates",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "auto",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attachmentId",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "src",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 273,
                    "end": 300
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Layout",
            "short": "Layout",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Layout.php",
            "lines": 167,
            "doc": "The layout support's classes and rules (wp_render_layout_support_flag,\nprobe block-supports), for core and plugin blocks alike:\n\n- is-layout-{type} and {block}-is-layout-{type} for the layout the block\nuses (its own over its type's default), with has-global-padding for a\nconstrained layout under a theme with root-padding-aware alignments;\n- is-vertical or is-horizontal, is-content-justification-* and is-nowrap\nfrom the layout the block itself stores;\n- a wp-container-{block}-is-layout-* class when the layout writes CSS\n(LayoutStyle), and wp-container-content-* for a child's own size or\nplace in its parent's layout.\n\nThe rules go to the page's block-support styles through the private\nminn_block_support_rules action. A container class's suffix is a digest\nthe engine cannot reproduce (its inputs are not observable), so the engine\nderives its own from the layout: same shape, different value, which the\nparity suites normalise.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\CoreBlocks",
                "Minn\\Blocks\\LayoutStyle",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Styles",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\KsesCss"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "classes",
                    "static": true,
                    "visibility": "public",
                    "signature": "classes(string $blockName, array $attrs): array",
                    "doc": "The layout classes a core block's wrapper carries, under its type's\nsupports (data/blocks.json).",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "blockName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "forBlock",
                    "static": true,
                    "visibility": "public",
                    "signature": "forBlock(string $blockName, array $attrs, array $supports): array",
                    "doc": "The layout classes a block's wrapper carries, its container's rules\nrecorded, under the theme's layout settings the render state holds\n(root-padding-aware alignments, block gaps).",
                    "shapes": [
                        "@param array<string, mixed> $supports the block type's supports (layout and its default, spacing)",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "blockName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "supports",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block type's supports (layout and its default, spacing)"
                        }
                    ],
                    "line": 50,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "childClass",
                    "static": true,
                    "visibility": "public",
                    "signature": "childClass(array $child, array $parent): ?string",
                    "doc": "The class a child's own layout earns (its size or place in the parent's\nlayout), its rules recorded; null when it writes none.",
                    "shapes": [
                        "@param array<string, mixed> $child the block's style.layout",
                        "@param array<string, mixed> $parent the parent's layout"
                    ],
                    "params": [
                        {
                            "name": "child",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block's style.layout"
                        },
                        {
                            "name": "parent",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the parent's layout"
                        }
                    ],
                    "line": 79,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "sanitizeGap",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitizeGap(mixed $gap): mixed",
                    "doc": "A block gap as the layout reads it: a value with a character that could\nend a declaration or open a function (\\ ( & = } or a comment) is\ndropped, a side of one too; anything not a string is left as it is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "gap",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "gapCss",
                    "static": true,
                    "visibility": "public",
                    "signature": "gapCss(mixed $gap): array|string|null",
                    "doc": "A gap with its presets as custom properties, a side at a time.",
                    "shapes": [
                        "@return string|array<string, string>|null"
                    ],
                    "params": [
                        {
                            "name": "gap",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "paddingCss",
                    "static": true,
                    "visibility": "public",
                    "signature": "paddingCss(array $padding): array",
                    "doc": "A block's side padding with its presets as custom properties.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "padding",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 169,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "widths",
                    "static": true,
                    "visibility": "public",
                    "signature": "widths(array $layout): array",
                    "doc": "A layout with its widths checked: the first declaration of each, through\nthe style attribute filter, empty when that drops it.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "layout",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 180,
                    "end": 188
                },
                {
                    "routes": [],
                    "name": "safeGap",
                    "static": true,
                    "visibility": "private",
                    "signature": "safeGap(string $value): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "skipsGap",
                    "static": true,
                    "visibility": "private",
                    "signature": "skipsGap(array $supports): bool",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $supports"
                    ],
                    "params": [
                        {
                            "name": "supports",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "used",
                    "static": true,
                    "visibility": "private",
                    "signature": "used(array $own, array $supports): array",
                    "doc": "The layout a block uses: its own over its type's default; the legacy\ninherit flag means constrained.",
                    "shapes": [
                        "@param array<string, mixed> $supports",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "own",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "supports",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "typeClasses",
                    "static": true,
                    "visibility": "private",
                    "signature": "typeClasses(string $type, array $own): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "own",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": true,
                    "visibility": "private",
                    "signature": "record(array $rules): void",
                    "doc": "",
                    "shapes": [
                        "@param list<array<string, mixed>> $rules"
                    ],
                    "params": [
                        {
                            "name": "rules",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 194
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\LayoutStyle",
            "short": "LayoutStyle",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/LayoutStyle.php",
            "lines": 193,
            "doc": "The CSS rules a block's layout writes (wp_get_layout_style, probe\nblock-supports), as selector => declarations pairs the style engine turns\ninto a stylesheet:\n\n- flow: only the gap between children (none, then the gap, on each);\n- constrained: the content width on the children that are not aligned\nleft, right or full, the wide width on wide ones, no limit on full ones\n(justifyContent pushes the children to a side: both margins with a\nwidth, the one side alone without), negative margins on full ones for a\nblock with side padding, then the children's gap;\n- flex: nowrap, the gap, then the direction and alignments the\norientation reads from justifyContent and verticalAlignment;\n- grid: the column template (a count, a minimum width, or both folded\ntogether with the gap, or the fallback gap without one), then the gap.\n\nWidths arrive checked (one dropped as unsafe is empty) and gaps with\npresets turned into custom properties.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Blocks\\Layout"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "JUSTIFY",
                    "value": "array (   'left' => 'flex-start',   'right' => 'flex-end',   'center' => 'center',   'stretch' => 'stretch',   'space-between' => 'space-between', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ALIGN",
                    "value": "array (   'top' => 'flex-start',   'center' => 'center',   'bottom' => 'flex-end',   'stretch' => 'stretch',   'space-between' => 'space-between', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "CHILD_KEYS",
                    "value": "array (   0 => 'selfStretch',   1 => 'flexSize',   2 => 'columnSpan',   3 => 'rowSpan',   4 => 'columnStart',   5 => 'rowStart', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "rules",
                    "static": true,
                    "visibility": "public",
                    "signature": "rules(string $selector, array $layout, array|string|null $gap, array $padding = array ( ), string $fallbackGap = '0.5em'): array",
                    "doc": "The rules for a container.",
                    "shapes": [
                        "@param array<string, mixed> $layout the layout, its widths checked",
                        "@param string|array<string, string>|null $gap the block gap (a value, or top and left), null when it is not written",
                        "@param array<string, string> $padding the block's own padding (left, right), for full-width children",
                        "@return list<array{selector: string, declarations: array<string, string>}>"
                    ],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "layout",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the layout, its widths checked"
                        },
                        {
                            "name": "gap",
                            "type": "array|string|null",
                            "shape": "string|array<string, string>|null",
                            "default": null,
                            "doc": "the block gap (a value, or top and left), null when it is not written"
                        },
                        {
                            "name": "padding",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": "array ( )",
                            "doc": "the block's own padding (left, right), for full-width children"
                        },
                        {
                            "name": "fallbackGap",
                            "type": "string",
                            "shape": "",
                            "default": "'0.5em'",
                            "doc": "the gap a grid with a minimum column width counts when the block writes none"
                        }
                    ],
                    "line": 41,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "childRules",
                    "static": true,
                    "visibility": "public",
                    "signature": "childRules(string $selector, array $child, array $parent): array",
                    "doc": "The rules a child writes from its own layout (wp_get_child_layout_style_rules):\na fixed or filling flex size, a grid span, a grid position, released\nagain (the full row for a span) in a container narrower than the\ncolumns it needs: the columns at the parent's minimum width (12rem by\ndefault) and the gaps between them (1.5rem, or 24px for a width in px).",
                    "shapes": [
                        "@param array<string, mixed> $child the child's layout (selfStretch, flexSize, columnSpan, rowSpan, columnStart, rowStart)",
                        "@param array<string, mixed> $parent the parent's layout",
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "child",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the child's layout (selfStretch, flexSize, columnSpan, rowSpan, columnStart, rowStart)"
                        },
                        {
                            "name": "parent",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the parent's layout"
                        }
                    ],
                    "line": 179,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "containerValues",
                    "static": true,
                    "visibility": "public",
                    "signature": "containerValues(array $layout): array",
                    "doc": "A layout's container values: everything but the child keys.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "layout",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 208,
                    "end": 211
                },
                {
                    "routes": [],
                    "name": "childValues",
                    "static": true,
                    "visibility": "public",
                    "signature": "childValues(array $layout): array",
                    "doc": "A layout's child values: the child keys alone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "layout",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 214,
                    "end": 217
                },
                {
                    "routes": [],
                    "name": "flowGap",
                    "static": true,
                    "visibility": "private",
                    "signature": "flowGap(string $selector, array|string|null $gap): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array{selector: string, declarations: array<string, string>}>"
                    ],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "array|string|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "constrained",
                    "static": true,
                    "visibility": "private",
                    "signature": "constrained(string $selector, array $layout, array $padding): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array{selector: string, declarations: array<string, string>}>"
                    ],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "layout",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "padding",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "flex",
                    "static": true,
                    "visibility": "private",
                    "signature": "flex(array $layout, array|string|null $gap): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "layout",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "array|string|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "grid",
                    "static": true,
                    "visibility": "private",
                    "signature": "grid(array $layout, array|string|null $gap, string $fallbackGap): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "layout",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "array|string|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fallbackGap",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 121,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "gapValue",
                    "static": true,
                    "visibility": "private",
                    "signature": "gapValue(array|string|null $gap): ?string",
                    "doc": "A flex or grid gap: one value, or the row and column gaps together.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "gap",
                            "type": "array|string|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "filled",
                    "static": true,
                    "visibility": "private",
                    "signature": "filled(array $declarations): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $declarations",
                        "@return array<string, string> the declarations that have a value"
                    ],
                    "params": [
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "single",
                    "static": true,
                    "visibility": "private",
                    "signature": "single(string $selector, array $declarations): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $declarations",
                        "@return list<array{selector: string, declarations: array<string, string>}>"
                    ],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 166
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Parser",
            "short": "Parser",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Parser.php",
            "lines": 114,
            "doc": "Parses block markup into a tree. The grammar is the delimiter comment:\nan opener with optional JSON attributes, a closer, or a self-closing\nvoid block; a name without a namespace is core/. Anything outside a\nblock is a freeform block that renders as-is.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\SyncedPattern",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\ContentScan",
                "Minn\\Content\\Excerpt",
                "Minn\\Support\\Kses",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\TemplatePatterns"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TOKEN",
                    "value": "'/<!--\\\\s+(?P<closer>\\\\/)?wp:(?P<namespace>[a-z][a-z0-9_-]*\\\\/)?(?P<name>[a-z][a-z0-9_-]*)\\\\s+(?P<attrs>\\\\{(?:(?!\\\\}\\\\s+\\\\/?-->).)*+\\\\}\\\\s+)?(?P<void>\\\\/)?-->/s'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $markup): array",
                    "doc": "Block markup as a tree of blocks.",
                    "shapes": [
                        "@return list<Block>"
                    ],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "token",
                    "static": true,
                    "visibility": "public",
                    "signature": "token(string $markup, int $offset): ?array",
                    "doc": "The first block delimiter at or after an offset: where it starts, its\nlength, its name (core/ when it names no namespace), its attributes as\nwritten (null when it has none), and whether it closes a block or is\na void one. Null when no delimiter follows.",
                    "shapes": [
                        "@return array{start: int, length: int, name: string, attrs: ?string, closer: bool, void: bool}|null"
                    ],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "contains",
                    "static": true,
                    "visibility": "public",
                    "signature": "contains(string $content, string $name): bool",
                    "doc": "Whether serialized content carries a block by name; a bare name means core/, and core blocks are also found by their short delimiter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 127
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\QueryVars",
            "short": "QueryVars",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/QueryVars.php",
            "lines": 122,
            "doc": "The query variables a Query Loop block's context asks for, the way the\nreference's build_query_vars_from_query_block builds them (probe\nquery-loop): a viewable post type; stickies only, left out, or ignored;\nexclusions; a page size and offset for the page asked for; the old\ncategory and tag ids and each viewable taxonomy's terms, merged; formats\n(standard as no format) OR'd, beside the terms in a group of their own;\norder, orderby, authors (a list, a comma list, or one id), a search, and\nparents for a hierarchical type.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "fromContext",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromContext(?array $context, int $page, array $sticky, array $site): array",
                    "doc": "The query vars a query block's context amounts to.",
                    "shapes": [
                        "@param array<string, mixed>|null $context the block's `query` context",
                        "@param list<int> $sticky the site's sticky post ids",
                        "@param array{viewableType: callable(string): bool, hierarchicalType: callable(string): bool, viewableTaxonomy: callable(string): bool, formats: list<string>} $site what the site says about types, taxonomies and formats"
                    ],
                    "params": [
                        {
                            "name": "context",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": "the block's `query` context"
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sticky",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "the site's sticky post ids"
                        },
                        {
                            "name": "site",
                            "type": "array",
                            "shape": "array{viewableType: callable(string): bool, hierarchicalType: callable(string): bool, viewableTaxonomy: callable(string): bool, formats: list<string>}",
                            "default": null,
                            "doc": "what the site says about types, taxonomies and formats"
                        }
                    ],
                    "line": 26,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "sticky",
                    "static": true,
                    "visibility": "private",
                    "signature": "sticky(array $query, mixed $setting, array $sticky): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $query @param list<int> $sticky @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<int> $sticky @return array<string, mixed>"
                        },
                        {
                            "name": "setting",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sticky",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "idTerms",
                    "static": true,
                    "visibility": "private",
                    "signature": "idTerms(array $context): array",
                    "doc": "The old categoryIds and tagIds settings as clauses. @param array<string, mixed> $context @return list<array<string, mixed>>",
                    "shapes": [
                        "@param array<string, mixed> $context @return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "context",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return list<array<string, mixed>>"
                        }
                    ],
                    "line": 75,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "taxonomyTerms",
                    "static": true,
                    "visibility": "private",
                    "signature": "taxonomyTerms(array $context, callable $viewable): array",
                    "doc": "Each viewable taxonomy's terms as a clause. @param array<string, mixed> $context @param callable(string): bool $viewable @return list<array<string, mixed>>",
                    "shapes": [
                        "@param array<string, mixed> $context @param callable(string): bool $viewable @return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "context",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param callable(string): bool $viewable @return list<array<string, mixed>>"
                        },
                        {
                            "name": "viewable",
                            "type": "callable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "formats",
                    "static": true,
                    "visibility": "private",
                    "signature": "formats(array $query, mixed $formats, array $known): array",
                    "doc": "The formats asked for (standard, or one the site knows) OR'd; beside\nother term clauses, AND'd with them as a group.",
                    "shapes": [
                        "@param array<string, mixed> $query",
                        "@param list<string> $known",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "formats",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "known",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "author",
                    "static": true,
                    "visibility": "private",
                    "signature": "author(array $query, mixed $author): array",
                    "doc": "Authors: a list or a comma list as author__in, one id as author. @param array<string, mixed> $query @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $query @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        },
                        {
                            "name": "author",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 137
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\RenderState",
            "short": "RenderState",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/RenderState.php",
            "lines": 350,
            "doc": "Per-request rendering state, owned by the renderer. The reference numbers\ngalleries, style variations, and search inputs from ONE counter that runs\nacross every block rendered in the request (a list response keeps\ncounting from post to post), so the counter lives here, not on any block.\nLeaf helpers with no renderer in hand reach it through current().",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\SyncedPattern",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Elements",
                "Minn\\Blocks\\ImageTags",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\Excerpt",
                "Minn\\Front\\FeedController",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAX_DEPTH",
                    "value": "64",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "counter",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "images",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "priorityClaimed",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "blocks",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "galleries",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "elements",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "active",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "depth",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "navigation",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "rootPaddingAware",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "Whether the theme's layout puts root padding in custom properties; render configuration, so reset() leaves it.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "blockGap",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "Whether the theme writes block gaps (settings.spacing.blockGap); render configuration too.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "directives",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "What interactivity_process_directives last answered, for the block rendering now.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "offRequest",
                    "type": "?self",
                    "readonly": false,
                    "static": true,
                    "doc": "The state for code that renders with no request behind it: the command line and the unit suite.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "pendingElements",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "the element class claimed for the dynamic block being rendered, until its wrapper takes it",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "pendingVariation",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "the numbered style variation class claimed for the dynamic block being rendered, until its wrapper takes it",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "labels",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "contentImages",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "current",
                    "static": true,
                    "visibility": "public",
                    "signature": "current(): self",
                    "doc": "The state of the request being rendered, which its runtime holds, so\na request cannot count on from the one before it. Rendering with no\nruntime (the command line, the unit suite) shares one off-request\nstate instead, since the counters have to survive between calls.",
                    "shapes": [],
                    "params": [],
                    "line": 56,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "adopt",
                    "static": false,
                    "visibility": "public",
                    "signature": "adopt(): void",
                    "doc": "Makes this the state current() answers with, for the renderer that brought its own.",
                    "shapes": [],
                    "params": [],
                    "line": 62,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "rootPaddingAware",
                    "static": false,
                    "visibility": "public",
                    "signature": "rootPaddingAware(): bool",
                    "doc": "Whether the theme puts root padding in custom properties, which decides the constrained layout's classes.",
                    "shapes": [],
                    "params": [],
                    "line": 72,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "useRootPadding",
                    "static": false,
                    "visibility": "public",
                    "signature": "useRootPadding(bool $aware): void",
                    "doc": "Records what the active theme's layout settings say about root padding.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "aware",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "blockGap",
                    "static": false,
                    "visibility": "public",
                    "signature": "blockGap(): bool",
                    "doc": "Whether the theme writes block gaps, which decides whether a layout's gap makes CSS.",
                    "shapes": [],
                    "params": [],
                    "line": 84,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "useBlockGap",
                    "static": false,
                    "visibility": "public",
                    "signature": "useBlockGap(bool $writes): void",
                    "doc": "Records whether the active theme's spacing settings write block gaps.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "writes",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "nextId",
                    "static": false,
                    "visibility": "public",
                    "signature": "nextId(): int",
                    "doc": "The next per-request counter value.",
                    "shapes": [],
                    "params": [],
                    "line": 96,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "countImages",
                    "static": false,
                    "visibility": "public",
                    "signature": "countImages(int $amount): int",
                    "doc": "Adds to the page's count of content images (wp_increase_content_media_count) and returns the new count.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "amount",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "nextImage",
                    "static": false,
                    "visibility": "public",
                    "signature": "nextImage(): int",
                    "doc": "Content images seen so far in this page, for the loading rules.",
                    "shapes": [],
                    "params": [],
                    "line": 108,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "refundImages",
                    "static": false,
                    "visibility": "public",
                    "signature": "refundImages(int $count, bool $priority): void",
                    "doc": "Images a plugin's block filter removed from the page give their budget\nback, so the next image still counts as if the hidden ones never rendered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "priority",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "aside",
                    "static": false,
                    "visibility": "public",
                    "signature": "aside(Closure $render): mixed",
                    "doc": "Runs rendering whose images do not count toward the page's loading\nbudget (an excerpt's): the reference fits no image while it makes one,\nso whatever was seen meanwhile is given back.",
                    "shapes": [
                        "@param \\Closure(): T $render"
                    ],
                    "params": [
                        {
                            "name": "render",
                            "type": "Closure",
                            "shape": "\\Closure(): T",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "filteringContent",
                    "static": false,
                    "visibility": "public",
                    "signature": "filteringContent(string $content, Closure $filter): mixed",
                    "doc": "$filter run while the_content filters content the engine rendered: the\nimages it already holds count as fitted out, so only what the filter's\nother callbacks add is fitted (fittedImage()).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "filter",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "fittedImage",
                    "static": false,
                    "visibility": "public",
                    "signature": "fittedImage(string $tag): bool",
                    "doc": "Whether an image tag is one the content being filtered held when the filter began.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 164
                },
                {
                    "routes": [],
                    "name": "claimPriority",
                    "static": false,
                    "visibility": "public",
                    "signature": "claimPriority(): bool",
                    "doc": "True once, for the image that gets fetchpriority=\"high\".",
                    "shapes": [],
                    "params": [],
                    "line": 167,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "priorityAvailable",
                    "static": false,
                    "visibility": "public",
                    "signature": "priorityAvailable(): bool",
                    "doc": "Whether no element has taken high fetch priority yet on this page.",
                    "shapes": [],
                    "params": [],
                    "line": 176,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "closePriority",
                    "static": false,
                    "visibility": "public",
                    "signature": "closePriority(): void",
                    "doc": "Takes high fetch priority off the table for the rest of the page; a plugin prioritising its own element does this.",
                    "shapes": [],
                    "params": [],
                    "line": 182,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "reopenPriority",
                    "static": false,
                    "visibility": "public",
                    "signature": "reopenPriority(): void",
                    "doc": "Puts high fetch priority back on offer, so the next large enough image takes it.",
                    "shapes": [],
                    "params": [],
                    "line": 188,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "recordBlock",
                    "static": false,
                    "visibility": "public",
                    "signature": "recordBlock(string $blockName): void",
                    "doc": "Every block name the page rendered; the stylesheet prints block styles for these only.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blockName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "blocks",
                    "static": false,
                    "visibility": "public",
                    "signature": "blocks(): array",
                    "doc": "The block names rendering met.",
                    "shapes": [
                        "@return array<string, true>"
                    ],
                    "params": [],
                    "line": 204,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "nextElements",
                    "static": false,
                    "visibility": "public",
                    "signature": "nextElements(): int",
                    "doc": "The next wp-elements-N class; the reference numbers these apart from the shared counter.",
                    "shapes": [],
                    "params": [],
                    "line": 210,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "uniqueLabel",
                    "static": false,
                    "visibility": "public",
                    "signature": "uniqueLabel(string $label): string",
                    "doc": "A navigation's aria-label: the label itself the first time, then \"label N\" for repeats.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "label",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 220
                },
                {
                    "routes": [],
                    "name": "enterNavigation",
                    "static": false,
                    "visibility": "public",
                    "signature": "enterNavigation(): void",
                    "doc": "A page list renders plain on its own and takes the navigation block's\nitem classes, submenu toggles, and interactivity only while it sits\ninside one, so the navigation block marks the span it owns.",
                    "shapes": [],
                    "params": [],
                    "line": 227,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "leaveNavigation",
                    "static": false,
                    "visibility": "public",
                    "signature": "leaveNavigation(): void",
                    "doc": "Leaves a navigation block.",
                    "shapes": [],
                    "params": [],
                    "line": 233,
                    "end": 236
                },
                {
                    "routes": [],
                    "name": "processesDirectives",
                    "static": false,
                    "visibility": "public",
                    "signature": "processesDirectives(?bool $answer = NULL): bool",
                    "doc": "Whether the block rendering now has its Interactivity API directives\nprocessed, as interactivity_process_directives answered for it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "answer",
                            "type": "?bool",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 242,
                    "end": 248
                },
                {
                    "routes": [],
                    "name": "inNavigation",
                    "static": false,
                    "visibility": "public",
                    "signature": "inNavigation(): bool",
                    "doc": "Whether rendering is inside a navigation block.",
                    "shapes": [],
                    "params": [],
                    "line": 251,
                    "end": 254
                },
                {
                    "routes": [],
                    "name": "enter",
                    "static": false,
                    "visibility": "public",
                    "signature": "enter(string $key): bool",
                    "doc": "Marks a nested source as being rendered; false when it is already open (a cycle).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 257,
                    "end": 264
                },
                {
                    "routes": [],
                    "name": "leave",
                    "static": false,
                    "visibility": "public",
                    "signature": "leave(string $key): void",
                    "doc": "Leaves a cycle-guarded key.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 267,
                    "end": 270
                },
                {
                    "routes": [],
                    "name": "inside",
                    "static": false,
                    "visibility": "public",
                    "signature": "inside(string $key): bool",
                    "doc": "Whether a key is open: a source being rendered, or the page template (\"template\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 273,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "descend",
                    "static": false,
                    "visibility": "public",
                    "signature": "descend(): bool",
                    "doc": "True while the block tree is shallower than the cap; deeper blocks render as nothing.",
                    "shapes": [],
                    "params": [],
                    "line": 279,
                    "end": 286
                },
                {
                    "routes": [],
                    "name": "ascend",
                    "static": false,
                    "visibility": "public",
                    "signature": "ascend(): void",
                    "doc": "Leaves one nesting level.",
                    "shapes": [],
                    "params": [],
                    "line": 289,
                    "end": 292
                },
                {
                    "routes": [],
                    "name": "depth",
                    "static": false,
                    "visibility": "public",
                    "signature": "depth(): int",
                    "doc": "How deep the block tree is right now; zero outside any block render.",
                    "shapes": [],
                    "params": [],
                    "line": 295,
                    "end": 298
                },
                {
                    "routes": [],
                    "name": "setPendingElements",
                    "static": false,
                    "visibility": "public",
                    "signature": "setPendingElements(?string $class): ?string",
                    "doc": "A dynamic block claims its element class before rendering, so a block that renders nothing still counts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 301,
                    "end": 306
                },
                {
                    "routes": [],
                    "name": "takePendingElements",
                    "static": false,
                    "visibility": "public",
                    "signature": "takePendingElements(): ?string",
                    "doc": "The pending elements class, cleared.",
                    "shapes": [],
                    "params": [],
                    "line": 309,
                    "end": 315
                },
                {
                    "routes": [],
                    "name": "setPendingVariation",
                    "static": false,
                    "visibility": "public",
                    "signature": "setPendingVariation(?string $class): ?string",
                    "doc": "Holds the numbered style variation class a dynamic block claimed before rendering; returns the one it replaces.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 318,
                    "end": 323
                },
                {
                    "routes": [],
                    "name": "takePendingVariation",
                    "static": false,
                    "visibility": "public",
                    "signature": "takePendingVariation(): ?string",
                    "doc": "The numbered style variation class the dynamic block being rendered claimed, once: its wrapper takes it.",
                    "shapes": [],
                    "params": [],
                    "line": 326,
                    "end": 331
                },
                {
                    "routes": [],
                    "name": "recordGallery",
                    "static": false,
                    "visibility": "public",
                    "signature": "recordGallery(int $instance): void",
                    "doc": "Notes a gallery instance.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "instance",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 335,
                    "end": 338
                },
                {
                    "routes": [],
                    "name": "galleries",
                    "static": false,
                    "visibility": "public",
                    "signature": "galleries(): array",
                    "doc": "The gallery instances rendering met.",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [],
                    "line": 345,
                    "end": 348
                },
                {
                    "routes": [],
                    "name": "reset",
                    "static": false,
                    "visibility": "public",
                    "signature": "reset(): void",
                    "doc": "Clears every per-request counter.",
                    "shapes": [],
                    "params": [],
                    "line": 351,
                    "end": 364
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Renderer",
            "short": "Renderer",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Renderer.php",
            "lines": 449,
            "doc": "Renders a block tree the way the reference renders post_content:\ndelimiters gone, each block's own HTML kept with inner blocks rendered\nin place, then the per-block render-time additions (layout classes, the\nparagraph class, image attributes, gallery ids, style-variation\ncounters), and finally texturize over the whole.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Bindings",
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Context",
                "Minn\\Blocks\\CoreBlocks",
                "Minn\\Blocks\\Dynamic\\Archives",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\SyncedPattern",
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Blocks\\Elements",
                "Minn\\Blocks\\ImageTags",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\RenderState",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Content\\Terms",
                "Minn\\Content\\Texturize",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Extension\\Extensions",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\Media\\Uploads",
                "Minn\\Runtime\\BlockFilters",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Archives",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\SyncedPattern",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Content\\Blocks",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Blocks\\ImageTags $images)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "images",
                        "type": "Minn\\Blocks\\ImageTags",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 93,
                "end": 98
            },
            "cases": [],
            "constants": [
                {
                    "name": "CLASSNAME_ALWAYS",
                    "value": "array (   0 => 'core/query-pagination-next',   1 => 'core/query-pagination-numbers',   2 => 'core/query-pagination-previous', )",
                    "doc": "The dynamic core blocks that ask block_default_classname even when they render nothing (generatedClass()).",
                    "visibility": "private"
                },
                {
                    "name": "CLASSNAME_NEVER",
                    "value": "array (   0 => 'core/rss',   1 => 'core/widget-group',   2 => 'core/tabs',   3 => 'core/tab-list',   4 => 'core/tab-panel',   5 => 'core/accordion',   6 => 'core/accordion-item', )",
                    "doc": "The dynamic core blocks that never ask it (the tabs and accordion blocks edit their saved markup instead).",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "dynamic",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "native",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "unfiltered",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "Whether the next block renders without the block filters around it (renderNativeUnfiltered()).",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "asCallback",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "Whether the next block renders as its render callback called alone would (renderNativeAsCallback()).",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "imageFinish",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "handed",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "own",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "provided",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "context",
                    "type": "Minn\\Blocks\\Context",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "state",
                    "type": "Minn\\Blocks\\RenderState",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "images",
                    "type": "Minn\\Blocks\\ImageTags",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "numberedStyle",
                    "static": true,
                    "visibility": "public",
                    "signature": "numberedStyle(string $blockName, string $className): ?string",
                    "doc": "The numbered companion of a block style variation the block's class\nnames (is-style-{name}--N), consuming the counter: a variation with\nstyles of its own, the theme's or a registered style's (the facade\nanswers the private minn_block_style_variation filter), whose CSS the\nfacade prints once numbered (minn_block_style_variation_used). Null\nwhen none applies.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blockName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "className",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "state",
                    "static": false,
                    "visibility": "public",
                    "signature": "state(): Minn\\Blocks\\RenderState",
                    "doc": "The per-request rendering state: counters, containers, variations, the images seen.",
                    "shapes": [],
                    "params": [],
                    "line": 101,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "context",
                    "static": false,
                    "visibility": "public",
                    "signature": "context(): Minn\\Blocks\\Context",
                    "doc": "What is being rendered.",
                    "shapes": [],
                    "params": [],
                    "line": 107,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "withContext",
                    "static": false,
                    "visibility": "public",
                    "signature": "withContext(Minn\\Blocks\\Context $context): void",
                    "doc": "Sets what is being rendered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "context",
                            "type": "Minn\\Blocks\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "images",
                    "static": false,
                    "visibility": "public",
                    "signature": "images(): Minn\\Blocks\\ImageTags",
                    "doc": "The image tag builder.",
                    "shapes": [],
                    "params": [],
                    "line": 119,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "forDb",
                    "static": true,
                    "visibility": "public",
                    "signature": "forDb(Minn\\Db $db): self",
                    "doc": "A renderer with every dynamic block wired over the database door.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 167
                },
                {
                    "routes": [],
                    "name": "registerDynamic",
                    "static": false,
                    "visibility": "public",
                    "signature": "registerDynamic(string $name, callable $render): void",
                    "doc": "Registers the engine's own renderer for a dynamic block. A plugin's\ncallback that already took the block over (bridge()) keeps it, as a\nreplaced render callback does on the reference.",
                    "shapes": [
                        "@param callable(Block, Renderer): string $render"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "render",
                            "type": "callable",
                            "shape": "callable(Block, Renderer): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "bridge",
                    "static": false,
                    "visibility": "public",
                    "signature": "bridge(string $name, callable $render): void",
                    "doc": "Hands a block to a plugin's render callback; the engine's own renderer\nfor it stays for renderNative().",
                    "shapes": [
                        "@param callable(Block, Renderer): string $render"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "render",
                            "type": "callable",
                            "shape": "callable(Block, Renderer): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 194
                },
                {
                    "routes": [],
                    "name": "renderNative",
                    "static": false,
                    "visibility": "public",
                    "signature": "renderNative(Minn\\Blocks\\Block $block): string",
                    "doc": "One block as HTML through the engine's own renderer for its name (its\nstatic markup when it has none), even where a plugin's callback took\nthe block over: what a core render callback gives, so a plugin's\ncallback that calls the one it replaced does not call itself.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 216
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(string $markup): string",
                    "doc": "Block markup as HTML, texturized.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 228,
                    "end": 231
                },
                {
                    "routes": [],
                    "name": "renderBlocks",
                    "static": false,
                    "visibility": "public",
                    "signature": "renderBlocks(array $blocks): string",
                    "doc": "A tree of blocks as HTML.",
                    "shapes": [
                        "@param list<Block> $blocks"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 238,
                    "end": 245
                },
                {
                    "routes": [],
                    "name": "renderNativeUnfiltered",
                    "static": false,
                    "visibility": "public",
                    "signature": "renderNativeUnfiltered(Minn\\Blocks\\Block $block): string",
                    "doc": "A core block as renderNative() renders it, without the block filters\naround this one block (its inner blocks keep theirs): its caller, the\nfacade's WP_Block::render, applies them once.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 252,
                    "end": 260
                },
                {
                    "routes": [],
                    "name": "renderNativeAsCallback",
                    "static": false,
                    "visibility": "public",
                    "signature": "renderNativeAsCallback(Minn\\Blocks\\Block $block): string",
                    "doc": "A core block as its render callback called directly renders it: not a\nblock being rendered, so enqueue_empty_block_content_assets is not\nasked for it (its inner blocks are), as the reference asks it only in\na block's render (probe plugin-surface2).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 268,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "finishImagesWith",
                    "static": false,
                    "visibility": "public",
                    "signature": "finishImagesWith(callable $finish): void",
                    "doc": "What the runtime does to an image block's markup once the engine has\nrendered it: the lightbox, when the image's settings or the theme's ask\nfor one.",
                    "shapes": [
                        "@param callable(string, Block): string $finish"
                    ],
                    "params": [
                        {
                            "name": "finish",
                            "type": "callable",
                            "shape": "callable(string, Block): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 285,
                    "end": 288
                },
                {
                    "routes": [],
                    "name": "handContext",
                    "static": false,
                    "visibility": "public",
                    "signature": "handContext(array $context): void",
                    "doc": "The context render_block_context already gave the next block, when\nrender_block() or a WP_Block renders it: a block that provides its\nown context (a tabs block's id) reads it with ownContext() rather\nthan asking again.",
                    "shapes": [
                        "@param array<string, mixed> $context"
                    ],
                    "params": [
                        {
                            "name": "context",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 298,
                    "end": 301
                },
                {
                    "routes": [],
                    "name": "ownContext",
                    "static": false,
                    "visibility": "public",
                    "signature": "ownContext(): ?array",
                    "doc": "The context render_block_context gave the block that has just begun\nto render; null when nothing did. A block's renderer reads it first,\nbefore its inner blocks begin.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [],
                    "line": 310,
                    "end": 313
                },
                {
                    "routes": [],
                    "name": "renderBlock",
                    "static": false,
                    "visibility": "public",
                    "signature": "renderBlock(Minn\\Blocks\\Block $block): string",
                    "doc": "One block as HTML, with the filters around it (unless renderNativeUnfiltered() asked for this one without).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 316,
                    "end": 367
                },
                {
                    "routes": [],
                    "name": "blockContext",
                    "static": false,
                    "visibility": "public",
                    "signature": "blockContext(): array",
                    "doc": "The context a block's bindings read: the post being rendered (postId,\npostType) and what enclosing blocks provide (a synced pattern's\noverrides).",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 376,
                    "end": 380
                },
                {
                    "routes": [],
                    "name": "providing",
                    "static": false,
                    "visibility": "public",
                    "signature": "providing(array $context, Closure $render): string",
                    "doc": "Renders with context provided to the blocks inside (render_block_context's job on the reference). @param array<string, mixed> $context",
                    "shapes": [
                        "@param array<string, mixed> $context"
                    ],
                    "params": [
                        {
                            "name": "context",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "render",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 383,
                    "end": 391
                },
                {
                    "routes": [],
                    "name": "rendersNatively",
                    "static": false,
                    "visibility": "public",
                    "signature": "rendersNatively(string $name): bool",
                    "doc": "Whether the engine's own renderer answers for a block: a core block no\nplugin's callback took over. It applies the block supports it knows\nitself (layout, element styles); the facade's render_block filters do\nthe rest, and all of them for any other block.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 399,
                    "end": 402
                },
                {
                    "routes": [],
                    "name": "renderWith",
                    "static": false,
                    "visibility": "private",
                    "signature": "renderWith(string $name, ?callable $render): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "render",
                            "type": "?callable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 225
                },
                {
                    "routes": [],
                    "name": "generatedClass",
                    "static": false,
                    "visibility": "private",
                    "signature": "generatedClass(Minn\\Blocks\\Block $block, string $html): string",
                    "doc": "A dynamic core block's own class through block_default_classname, as\nthe reference asks it while the block takes its wrapper attributes:\nfor a block that renders something (the query pagination links even\nwhen they do not; the RSS and widget-group blocks never), and a class\na plugin changes replaces the block's on its wrapper.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 411,
                    "end": 423
                },
                {
                    "routes": [],
                    "name": "elementsClass",
                    "static": false,
                    "visibility": "private",
                    "signature": "elementsClass(Minn\\Blocks\\Block $block): ?string",
                    "doc": "A core block's wp-elements-N class, its rules recorded, when the engine renders it itself.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 426,
                    "end": 429
                },
                {
                    "routes": [],
                    "name": "renderNamed",
                    "static": false,
                    "visibility": "private",
                    "signature": "renderNamed(Minn\\Blocks\\Block $block, array $bound = array ( )): string",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $bound the bound attributes' values, put into a static block's HTML"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bound",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": "array ( )",
                            "doc": "the bound attributes' values, put into a static block's HTML"
                        }
                    ],
                    "line": 432,
                    "end": 458
                },
                {
                    "routes": [],
                    "name": "decorate",
                    "static": false,
                    "visibility": "private",
                    "signature": "decorate(Minn\\Blocks\\Block $block, string $html, ?string $elements, ?string $numbered): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "elements",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "numbered",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 460,
                    "end": 482
                },
                {
                    "routes": [],
                    "name": "gallery",
                    "static": true,
                    "visibility": "private",
                    "signature": "gallery(): int",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 484,
                    "end": 489
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Selector",
            "short": "Selector",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Selector.php",
            "lines": 43,
            "doc": "The CSS selector a block type declares for its root or for one feature, from its `selectors` map or the older per-support keys.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "resolve",
                    "static": true,
                    "visibility": "public",
                    "signature": "resolve(array $selectors, array $supports, array|string|null $target, bool $fallback, string $defaultClass): ?string",
                    "doc": "The CSS selector a block's style targets, or null.",
                    "shapes": [
                        "@param array<string, mixed> $selectors the block type's selectors map",
                        "@param array<string, mixed> $supports the block type's supports",
                        "@param string|list<string>|null $target 'root', a dotted feature path, or a path list"
                    ],
                    "params": [
                        {
                            "name": "selectors",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block type's selectors map"
                        },
                        {
                            "name": "supports",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block type's supports"
                        },
                        {
                            "name": "target",
                            "type": "array|string|null",
                            "shape": "string|list<string>|null",
                            "default": null,
                            "doc": "'root', a dotted feature path, or a path list"
                        },
                        {
                            "name": "fallback",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "defaultClass",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "at",
                    "static": true,
                    "visibility": "private",
                    "signature": "at(array $tree, array $path): mixed",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $path"
                    ],
                    "params": [
                        {
                            "name": "tree",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 49
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Serializer",
            "short": "Serializer",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Serializer.php",
            "lines": 46,
            "doc": "Parsed blocks back to markup. A core block is written by its short name;\nattributes are JSON with every character that could end the comment or\nopen a tag spelled as an escape (\"<\" \"<\", \"--\" \"--\", a\nbackslash \"\\\"), so a value can never break out of its delimiter.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Support\\Kses"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "blocks",
                    "static": true,
                    "visibility": "public",
                    "signature": "blocks(array $blocks): string",
                    "doc": "A list of parsed blocks back to markup, freeform runs as written.",
                    "shapes": [
                        "@param list<Block> $blocks"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "block",
                    "static": true,
                    "visibility": "public",
                    "signature": "block(Minn\\Blocks\\Block $block): string",
                    "doc": "One block with its inner blocks, as the delimiter comments the parser reads.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "delimited",
                    "static": true,
                    "visibility": "public",
                    "signature": "delimited(?string $name, array $attrs, string $content): string",
                    "doc": "Content wrapped in a block's delimiters; a block with no content is written self-closing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "public",
                    "signature": "attributes(array $attrs): string",
                    "doc": "Block attributes as the delimiter carries them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\States",
            "short": "States",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/States.php",
            "lines": 160,
            "doc": "Block state styles (a block's style[\":hover\"] and the like, probe\nblock-supports): the selector arithmetic and the fallbacks the reference\napplies when it writes a state's rules. Pure: styles and selectors in,\nstyles, groups and declarations out.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SIDES",
                    "value": "array (   0 => 'top',   1 => 'right',   2 => 'bottom',   3 => 'left', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "split",
                    "static": true,
                    "visibility": "public",
                    "signature": "split(string $selector): array",
                    "doc": "A selector list split at its top-level commas (none inside parentheses\ncounts), each part as written.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "selector",
                    "static": true,
                    "visibility": "public",
                    "signature": "selector(string $base, string $selectors, string $state): string",
                    "doc": "A state on each selector of a block's list, its leading compound\nselector swapped for the base; the base alone for an empty list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selectors",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "state",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "presetVars",
                    "static": true,
                    "visibility": "public",
                    "signature": "presetVars(mixed $value): mixed",
                    "doc": "Presets (var:preset|{kind}|{slug}) as their custom properties, through arrays; anything else as it is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "backgroundResets",
                    "static": true,
                    "visibility": "public",
                    "signature": "backgroundResets(array $declarations): array",
                    "doc": "Declarations with a background image unset under a background colour\nthat sets neither a background nor an image of its own.",
                    "shapes": [
                        "@param array<string, string> $declarations",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "borderFallbacks",
                    "static": true,
                    "visibility": "public",
                    "signature": "borderFallbacks(array $declarations): array",
                    "doc": "Declarations with a solid border style for a border (or a side of one)\ngiven a width or a colour and no style.",
                    "shapes": [
                        "@param array<string, string> $declarations",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "dimensionFallbacks",
                    "static": true,
                    "visibility": "public",
                    "signature": "dimensionFallbacks(array $style): array",
                    "doc": "A state's style with an explicit aspect ratio unsetting the height and\nminimum height, or a height or minimum height unsetting the aspect ratio.",
                    "shapes": [
                        "@param array<string, mixed> $style",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "style",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "groups",
                    "static": true,
                    "visibility": "public",
                    "signature": "groups(array $style, array $selectors): array",
                    "doc": "A state's style split by the selectors a block gives its features: a\nfeature (or one of its properties) with a selector of its own goes\nthere, a feature's other properties to its root selector, the rest to\nthe block's root. Groups keep the order they are first met in.",
                    "shapes": [
                        "@param array<string, mixed> $style",
                        "@param array<string, mixed> $selectors the block's selectors, root among them",
                        "@return list<array{selector: ?string, style: array<string, mixed>}>"
                    ],
                    "params": [
                        {
                            "name": "style",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selectors",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block's selectors, root among them"
                        }
                    ],
                    "line": 131,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "addGroup",
                    "static": true,
                    "visibility": "public",
                    "signature": "addGroup(array $groups, ?string $selector, array $style): void",
                    "doc": "Adds a style to the group of a selector, merged into what it holds.",
                    "shapes": [
                        "@param array<string, array{selector: ?string, style: array<string, mixed>}> $groups",
                        "@param array<string, mixed> $style"
                    ],
                    "params": [
                        {
                            "name": "groups",
                            "type": "array",
                            "shape": "array<string, array{selector: ?string, style: array<string, mixed>}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selector",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "style",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 166,
                    "end": 171
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\StyleEngine",
            "short": "StyleEngine",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/StyleEngine.php",
            "lines": 195,
            "doc": "What a block's style object comes to, as the reference's style engine\nreads it (probe style-engine): the declarations each style property\nmakes and the class names a preset or a set colour earns.\n\n- Groups in the order background, colour, border, shadow, dimensions,\nspacing, typography, and properties in their order within a group.\n- A value goes into the declarations as given. Whether it makes CSS is\nfor the declarations holder to judge.\n- A preset (\"var:preset|color|base\") becomes a custom property only\nwhere the definition names one for its kind (a colour, a gradient,\nspacing, a font size or family, a shadow, a dimension, a border radius,\na border side's colour). Elsewhere it makes nothing, and with presets\nturned into class names it makes none anywhere.\n- Sides and corners (\"padding\" => [\"top\" => ...]) name their own\nproperties in the order given. Border sides come after the whole\nborder.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Theme\\StylePresets"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFINITIONS",
                    "value": "array (   'background' =>    array (     'backgroundImage' =>      array (       'property_keys' =>        array (         'default' => 'background-image',       ),       'value_func' =>        array (         0 => 'WP_Style_Engine',         1 => 'get_url_or_value_css_declaration',       ),       'path' =>        array (         0 => 'background',         1 => 'backgroundImage',       ),     ),     'backgroundPosition' =>      array (       'property_keys' =>        array (         'default' => 'background-position',       ),       'path' =>        array (         0 => 'background',         1 => 'backgroundPosition',       ),     ),     'backgroundRepeat' =>      array (       'property_keys' =>        array (         'default' => 'background-repeat',       ),       'path' =>        array (         0 => 'background',         1 => 'backgroundRepeat',       ),     ),     'backgroundSize' =>      array (       'property_keys' =>        array (         'default' => 'background-size',       ),       'path' =>        array (         0 => 'background',         1 => 'backgroundSize',       ),     ),     'backgroundAttachment' =>      array (       'property_keys' =>        array (         'default' => 'background-attachment',       ),       'path' =>        array (         0 => 'background',         1 => 'backgroundAttachment',       ),     ),     'gradient' =>      array (       'property_keys' =>        array (         'default' => 'background-image',       ),       'css_vars' =>        array (         'gradient' => '--wp--preset--gradient--$slug',       ),       'path' =>        array (         0 => 'background',         1 => 'gradient',       ),       'classnames' =>        array (         'has-background' => true,       ),     ),   ),   'color' =>    array (     'text' =>      array (       'property_keys' =>        array (         'default' => 'color',       ),       'path' =>        array (         0 => 'color',         1 => 'text',       ),       'css_vars' =>        array (         'color' => '--wp--preset--color--$slug',       ),       'classnames' =>        array (         'has-text-color' => true,         'has-$slug-color' => 'color',       ),     ),     'background' =>      array (       'property_keys' =>        array (         'default' => 'background-color',       ),       'path' =>        array (         0 => 'color',         1 => 'background',       ),       'css_vars' =>        array (         'color' => '--wp--preset--color--$slug',       ),       'classnames' =>        array (         'has-background' => true,         'has-$slug-background-color' => 'color',       ),     ),     'gradient' =>      array (       'property_keys' =>        array (         'default' => 'background',       ),       'path' =>        array (         0 => 'color',         1 => 'gradient',       ),       'css_vars' =>        array (         'gradient' => '--wp--preset--gradient--$slug',       ),       'classnames' =>        array (         'has-background' => true,         'has-$slug-gradient-background' => 'gradient',       ),     ),   ),   'border' =>    array (     'color' =>      array (       'property_keys' =>        array (         'default' => 'border-color',         'individual' => 'border-%s-color',       ),       'path' =>        array (         0 => 'border',         1 => 'color',       ),       'classnames' =>        array (         'has-border-color' => true,         'has-$slug-border-color' => 'color',       ),     ),     'radius' =>      array (       'property_keys' =>        array (         'default' => 'border-radius',         'individual' => 'border-%s-radius',       ),       'path' =>        array (         0 => 'border',         1 => 'radius',       ),       'css_vars' =>        array (         'border-radius' => '--wp--preset--border-radius--$slug',       ),     ),     'style' =>      array (       'property_keys' =>        array (         'default' => 'border-style',         'individual' => 'border-%s-style',       ),       'path' =>        array (         0 => 'border',         1 => 'style',       ),     ),     'width' =>      array (       'property_keys' =>        array (         'default' => 'border-width',         'individual' => 'border-%s-width',       ),       'path' =>        array (         0 => 'border',         1 => 'width',       ),     ),     'top' =>      array (       'value_func' =>        array (         0 => 'WP_Style_Engine',         1 => 'get_individual_property_css_declarations',       ),       'path' =>        array (         0 => 'border',         1 => 'top',       ),       'css_vars' =>        array (         'color' => '--wp--preset--color--$slug',       ),     ),     'right' =>      array (       'value_func' =>        array (         0 => 'WP_Style_Engine',         1 => 'get_individual_property_css_declarations',       ),       'path' =>        array (         0 => 'border',         1 => 'right',       ),       'css_vars' =>        array (         'color' => '--wp--preset--color--$slug',       ),     ),     'bottom' =>      array (       'value_func' =>        array (         0 => 'WP_Style_Engine',         1 => 'get_individual_property_css_declarations',       ),       'path' =>        array (         0 => 'border',         1 => 'bottom',       ),       'css_vars' =>        array (         'color' => '--wp--preset--color--$slug',       ),     ),     'left' =>      array (       'value_func' =>        array (         0 => 'WP_Style_Engine',         1 => 'get_individual_property_css_declarations',       ),       'path' =>        array (         0 => 'border',         1 => 'left',       ),       'css_vars' =>        array (         'color' => '--wp--preset--color--$slug',       ),     ),   ),   'shadow' =>    array (     'shadow' =>      array (       'property_keys' =>        array (         'default' => 'box-shadow',       ),       'path' =>        array (         0 => 'shadow',       ),       'css_vars' =>        array (         'shadow' => '--wp--preset--shadow--$slug',       ),     ),   ),   'dimensions' =>    array (     'aspectRatio' =>      array (       'property_keys' =>        array (         'default' => 'aspect-ratio',       ),       'path' =>        array (         0 => 'dimensions',         1 => 'aspectRatio',       ),       'classnames' =>        array (         'has-aspect-ratio' => true,       ),     ),     'height' =>      array (       'property_keys' =>        array (         'default' => 'height',       ),       'path' =>        array (         0 => 'dimensions',         1 => 'height',       ),       'css_vars' =>        array (         'dimension' => '--wp--preset--dimension--$slug',       ),     ),     'minHeight' =>      array (       'property_keys' =>        array (         'default' => 'min-height',       ),       'path' =>        array (         0 => 'dimensions',         1 => 'minHeight',       ),       'css_vars' =>        array (         'dimension' => '--wp--preset--dimension--$slug',       ),     ),     'minWidth' =>      array (       'property_keys' =>        array (         'default' => 'min-width',       ),       'path' =>        array (         0 => 'dimensions',         1 => 'minWidth',       ),       'css_vars' =>        array (         'dimension' => '--wp--preset--dimension--$slug',       ),     ),     'objectFit' =>      array (       'property_keys' =>        array (         'default' => 'object-fit',       ),       'path' =>        array (         0 => 'dimensions',         1 => 'objectFit',       ),     ),     'width' =>      array (       'property_keys' =>        array (         'default' => 'width',       ),       'path' =>        array (         0 => 'dimensions',         1 => 'width',       ),       'css_vars' =>        array (         'dimension' => '--wp--preset--dimension--$slug',       ),     ),   ),   'spacing' =>    array (     'padding' =>      array (       'property_keys' =>        array (         'default' => 'padding',         'individual' => 'padding-%s',       ),       'path' =>        array (         0 => 'spacing',         1 => 'padding',       ),       'css_vars' =>        array (         'spacing' => '--wp--preset--spacing--$slug',       ),     ),     'margin' =>      array (       'property_keys' =>        array (         'default' => 'margin',         'individual' => 'margin-%s',       ),       'path' =>        array (         0 => 'spacing',         1 => 'margin',       ),       'css_vars' =>        array (         'spacing' => '--wp--preset--spacing--$slug',       ),     ),   ),   'typography' =>    array (     'fontSize' =>      array (       'property_keys' =>        array (         'default' => 'font-size',       ),       'path' =>        array (         0 => 'typography',         1 => 'fontSize',       ),       'css_vars' =>        array (         'font-size' => '--wp--preset--font-size--$slug',       ),       'classnames' =>        array (         'has-$slug-font-size' => 'font-size',       ),     ),     'fontFamily' =>      array (       'property_keys' =>        array (         'default' => 'font-family',       ),       'css_vars' =>        array (         'font-family' => '--wp--preset--font-family--$slug',       ),       'path' =>        array (         0 => 'typography',         1 => 'fontFamily',       ),       'classnames' =>        array (         'has-$slug-font-family' => 'font-family',       ),     ),     'fontStyle' =>      array (       'property_keys' =>        array (         'default' => 'font-style',       ),       'path' =>        array (         0 => 'typography',         1 => 'fontStyle',       ),     ),     'fontWeight' =>      array (       'property_keys' =>        array (         'default' => 'font-weight',       ),       'path' =>        array (         0 => 'typography',         1 => 'fontWeight',       ),     ),     'lineHeight' =>      array (       'property_keys' =>        array (         'default' => 'line-height',       ),       'path' =>        array (         0 => 'typography',         1 => 'lineHeight',       ),     ),     'textColumns' =>      array (       'property_keys' =>        array (         'default' => 'column-count',       ),       'path' =>        array (         0 => 'typography',         1 => 'textColumns',       ),     ),     'textDecoration' =>      array (       'property_keys' =>        array (         'default' => 'text-decoration',       ),       'path' =>        array (         0 => 'typography',         1 => 'textDecoration',       ),     ),     'textIndent' =>      array (       'property_keys' =>        array (         'default' => 'text-indent',       ),       'path' =>        array (         0 => 'typography',         1 => 'textIndent',       ),     ),     'textTransform' =>      array (       'property_keys' =>        array (         'default' => 'text-transform',       ),       'path' =>        array (         0 => 'typography',         1 => 'textTransform',       ),     ),     'letterSpacing' =>      array (       'property_keys' =>        array (         'default' => 'letter-spacing',       ),       'path' =>        array (         0 => 'typography',         1 => 'letterSpacing',       ),     ),     'writingMode' =>      array (       'property_keys' =>        array (         'default' => 'writing-mode',       ),       'path' =>        array (         0 => 'typography',         1 => 'writingMode',       ),     ),   ), )",
                    "doc": "The reference's style definitions, by group and property (WP_Style_Engine::BLOCK_STYLE_DEFINITIONS_METADATA).",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(array $styles, array $options = array ( )): array",
                    "doc": "A style object's declarations and class names.",
                    "shapes": [
                        "@param array<string, mixed> $styles",
                        "@param array<string, mixed> $options convert_vars_to_classnames turns presets into class names alone",
                        "@return array{classnames: list<string>, declarations: array<string, mixed>}"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": "array ( )",
                            "doc": "convert_vars_to_classnames turns presets into class names alone"
                        }
                    ],
                    "line": 37,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "slug",
                    "static": true,
                    "visibility": "public",
                    "signature": "slug(mixed $value, string $kind): ?string",
                    "doc": "A preset's slug for a kind (\"var:preset|color|base\" for color is \"base\"), or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "var",
                    "static": true,
                    "visibility": "public",
                    "signature": "var(mixed $value, array $vars): ?string",
                    "doc": "A preset as the custom property the definition names for its kind, or null. @param array<string, string> $vars",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "classNames",
                    "static": true,
                    "visibility": "public",
                    "signature": "classNames(mixed $value, array $definition): array",
                    "doc": "A preset's class names for a definition. @param array<string, mixed> $definition @return list<string>",
                    "shapes": [
                        "@param array<string, mixed> $definition @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "definition",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 181,
                    "end": 184
                },
                {
                    "routes": [],
                    "name": "declarationsFor",
                    "static": true,
                    "visibility": "public",
                    "signature": "declarationsFor(mixed $value, array $definition, array $options = array ( )): array",
                    "doc": "The declarations one definition makes of a value; presets as class names make none. @param array<string, mixed> $definition @param array<string, mixed> $options @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $definition @param array<string, mixed> $options @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "definition",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param array<string, mixed> $options @return array<string, mixed>"
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 187,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "individual",
                    "static": true,
                    "visibility": "public",
                    "signature": "individual(mixed $value, array $definition, array $options = array ( )): array",
                    "doc": "A border side's declarations. @param array<string, mixed> $definition @param array<string, mixed> $options @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $definition @param array<string, mixed> $options @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "definition",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param array<string, mixed> $options @return array<string, mixed>"
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "urlOrValue",
                    "static": true,
                    "visibility": "public",
                    "signature": "urlOrValue(mixed $value, array $definition): array",
                    "doc": "A url or a plain value. @param array<string, mixed> $definition @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $definition @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "definition",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 199,
                    "end": 202
                },
                {
                    "routes": [],
                    "name": "kebab",
                    "static": true,
                    "visibility": "public",
                    "signature": "kebab(string $text): string",
                    "doc": "A name in kebab case, as the reference's _wp_to_kebab_case cuts it (\"lineHeight\", \"Zz Space\" become \"line-height\", \"zz-space\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 214,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "at",
                    "static": true,
                    "visibility": "private",
                    "signature": "at(array $styles, array $path): mixed",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $path"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "present",
                    "static": true,
                    "visibility": "private",
                    "signature": "present(mixed $value): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "classes",
                    "static": true,
                    "visibility": "private",
                    "signature": "classes(mixed $value, array $names): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string|bool> $names @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "array<string, string|bool>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 98,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "declarations",
                    "static": true,
                    "visibility": "private",
                    "signature": "declarations(mixed $value, array $definition, array $vars): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $definition @param array<string, string> $vars the custom properties presets may become @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "definition",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param array<string, string> $vars the custom properties presets may become @return array<string, mixed>"
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "one",
                    "static": true,
                    "visibility": "private",
                    "signature": "one(mixed $value, string $property, array $vars): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $vars @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "property",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 125,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "sides",
                    "static": true,
                    "visibility": "private",
                    "signature": "sides(array $value, string $pattern, array $vars): array",
                    "doc": "Sides or corners in the order given. A preset becomes the custom\nproperty the definition names for its kind, and is dropped when there\nis none; with no custom properties to use (presets as class names, or\nnone defined) it stays as written.",
                    "shapes": [
                        "@param array<string|int, mixed> $value @param array<string, string> $vars @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "array",
                            "shape": "array<string|int, mixed>",
                            "default": null,
                            "doc": "@param array<string, string> $vars @return array<string, mixed>"
                        },
                        {
                            "name": "pattern",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "side",
                    "static": true,
                    "visibility": "private",
                    "signature": "side(array $value, array $definition, array $vars): array",
                    "doc": "A border side's parts in the order given, each one its group defines\n(named by that definition's pattern): a preset through the side's own\ncustom properties, an unmatched one left empty.",
                    "shapes": [
                        "@param array<string|int, mixed> $value @param array<string, mixed> $definition @param array<string, string> $vars @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "array",
                            "shape": "array<string|int, mixed>",
                            "default": null,
                            "doc": "@param array<string, mixed> $definition @param array<string, string> $vars @return array<string, mixed>"
                        },
                        {
                            "name": "definition",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": true,
                    "visibility": "private",
                    "signature": "url(mixed $value, string $property): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "property",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 205,
                    "end": 211
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Styles",
            "short": "Styles",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Styles.php",
            "lines": 155,
            "doc": "The inline style and class names a block's \"style\" and preset\nattributes produce at render time, for the dynamic blocks that build\ntheir own wrapper (static blocks already carry them in stored markup).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Blocks\\Elements",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\TreeStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SIDES",
                    "value": "array (   0 => 'top',   1 => 'right',   2 => 'bottom',   3 => 'left', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "value",
                    "static": true,
                    "visibility": "public",
                    "signature": "value(string $value): string",
                    "doc": "var:preset|spacing|40 becomes var(--wp--preset--spacing--40). A value\nthat could close a declaration or a style element, or carry code,\nis dropped: these values come from stored block attributes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "slug",
                    "static": true,
                    "visibility": "public",
                    "signature": "slug(string $value): string",
                    "doc": "A class-name token from an attribute: letters, digits, dashes, underscores; nothing that ends an attribute.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "inline",
                    "static": true,
                    "visibility": "public",
                    "signature": "inline(array $style): string",
                    "doc": "The style attribute's declarations. The reference emits the style\ngroups in a fixed order (border, colour, typography, spacing,\ndimensions) and most properties in a fixed order within a group,\nbut a spacing box's sides come out as the block stored them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "style",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "classes",
                    "static": true,
                    "visibility": "public",
                    "signature": "classes(array $attrs): array",
                    "doc": "The preset classes (font size, text alignment, custom class names) a block's attributes declare.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "align",
                    "static": true,
                    "visibility": "public",
                    "signature": "align(array $attrs): ?string",
                    "doc": "The align class an \"align\" attribute declares.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "borderDeclarations",
                    "static": true,
                    "visibility": "private",
                    "signature": "borderDeclarations(array $border, array $declarations): void",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $declarations"
                    ],
                    "params": [
                        {
                            "name": "border",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "colorDeclarations",
                    "static": true,
                    "visibility": "private",
                    "signature": "colorDeclarations(array $color, array $declarations): void",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $declarations"
                    ],
                    "params": [
                        {
                            "name": "color",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "spacingDeclarations",
                    "static": true,
                    "visibility": "private",
                    "signature": "spacingDeclarations(array $spacing, array $declarations): void",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $declarations"
                    ],
                    "params": [
                        {
                            "name": "spacing",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "typographyDeclarations",
                    "static": true,
                    "visibility": "private",
                    "signature": "typographyDeclarations(array $typography, array $declarations): void",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $declarations"
                    ],
                    "params": [
                        {
                            "name": "typography",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "dimensionDeclarations",
                    "static": true,
                    "visibility": "private",
                    "signature": "dimensionDeclarations(array $dimensions, array $declarations): void",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $declarations"
                    ],
                    "params": [
                        {
                            "name": "dimensions",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 140
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\TemplatePartVariations",
            "short": "TemplatePartVariations",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/TemplatePartVariations.php",
            "lines": 41,
            "doc": "The template part block's variations as the reference builds them (probes\nrest-block-types, tabs-and-parts): one per area, the general and the\nnavigation overlay areas aside (by name),\ncarrying the area's label, description and icon, offered in the inserter\nonly while no part variation belongs to it; and one per template part, in\nthe order the parts are listed, offered in the inserter with the part's\nslug, theme and area as its attributes and its example.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "areas",
                    "static": true,
                    "visibility": "public",
                    "signature": "areas(array $areas, array $instances): array",
                    "doc": "The areas' variations beside the parts' ones.",
                    "shapes": [
                        "@param list<array<string, mixed>> $areas get_allowed_block_template_part_areas()",
                        "@param list<array<string, mixed>> $instances the parts' variations",
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "areas",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "get_allowed_block_template_part_areas()"
                        },
                        {
                            "name": "instances",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "the parts' variations"
                        }
                    ],
                    "line": 25,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "instances",
                    "static": true,
                    "visibility": "public",
                    "signature": "instances(array $areas, array $parts): array",
                    "doc": "One variation per template part.",
                    "shapes": [
                        "@param list<array<string, mixed>> $areas get_allowed_block_template_part_areas()",
                        "@param list<object> $parts get_block_templates() for template parts",
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "areas",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "get_allowed_block_template_part_areas()"
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": "get_block_templates() for template parts"
                        }
                    ],
                    "line": 45,
                    "end": 55
                }
            ]
        },
        {
            "name": "Minn\\Blocks\\Wrapper",
            "short": "Wrapper",
            "namespace": "Minn\\Blocks",
            "kind": "final class",
            "file": "public/minn/src/Minn/Blocks/Wrapper.php",
            "lines": 59,
            "doc": "The opening tag of a dynamic block's wrapper, in the reference's class\norder: text alignment, the link-colour marker (for the blocks that\ncarry it), the block's own extra classes (a taxonomy, an alignment),\nthe custom class and its numbered style companion, the element-style\nclass, the block's class, colour presets, font size and family, and\nthe layout classes last; the style attribute inline.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Styles",
                "Minn\\Html"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "open",
                    "static": true,
                    "visibility": "public",
                    "signature": "open(string $tag, string $blockClass, Minn\\Blocks\\Block $block, bool $styleFirst = false, bool $linkColorClass = false, array $extraClasses = array ( ), array $trailingClasses = array ( )): string",
                    "doc": "A dynamic block's opening tag with its classes in the reference's order.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "blockClass",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "styleFirst",
                            "type": "bool",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        },
                        {
                            "name": "linkColorClass",
                            "type": "bool",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        },
                        {
                            "name": "extraClasses",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "trailingClasses",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 74
                }
            ]
        },
        {
            "name": "Minn\\Cli\\AssetUpdate",
            "short": "AssetUpdate",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/AssetUpdate.php",
            "lines": 329,
            "doc": "Shared wording for `wp plugin update` and `wp theme update`. Captured\nfrom the reference: missing plugins warn and count as failed; a missing\ntheme is a fatal Error and stops. json/csv print only the rows (empty\nstdout when nothing changed). `--exclude` always prints the skipped\nline in table/summary, even when the list is empty.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Inventory",
                "Minn\\Ops\\Updates",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Cli\\PluginCommand",
                "Minn\\Cli\\ThemeCommand"
            ],
            "constructor": {
                "signature": "__construct(string $kind, Minn\\Ops\\Updates $updates, Minn\\Content\\Inventory $inventory)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "kind",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "updates",
                        "type": "Minn\\Ops\\Updates",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "inventory",
                        "type": "Minn\\Content\\Inventory",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 27
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "kind",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "updates",
                    "type": "Minn\\Ops\\Updates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "inventory",
                    "type": "Minn\\Content\\Inventory",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "boot",
                    "static": true,
                    "visibility": "public",
                    "signature": "boot(string $kind): self",
                    "doc": "The updater for one kind of asset, with the runtime up.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(array $names, array $assocArgs): void",
                    "doc": "Updates the named assets, or all of them.",
                    "shapes": [
                        "@param list<string> $names"
                    ],
                    "params": [
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "offers",
                    "static": false,
                    "visibility": "private",
                    "signature": "offers(array $assocArgs): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $assocArgs @return array<string, array<string, string>>"
                    ],
                    "params": [
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, array<string, string>>"
                        }
                    ],
                    "line": 102,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "previewRow",
                    "static": false,
                    "visibility": "private",
                    "signature": "previewRow(array $offer): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $offer @return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "offer",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "@return array<string, string>"
                        }
                    ],
                    "line": 150,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "apply",
                    "static": false,
                    "visibility": "private",
                    "signature": "apply(array $offer, bool $quiet): ?array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $offer @return array<string, string>|null"
                    ],
                    "params": [
                        {
                            "name": "offer",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "@return array<string, string>|null"
                        },
                        {
                            "name": "quiet",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 188
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "private",
                    "signature": "render(array $rows, array $assocArgs, string $format, bool $quiet, bool $dry, int $done, int $failed, int $total, ?array $exclude): void",
                    "doc": "",
                    "shapes": [
                        "@param list<array<string, string>> $rows",
                        "@param array<string, mixed> $assocArgs",
                        "@param list<string>|null $exclude"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, string>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quiet",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dry",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "done",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "failed",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "total",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "exclude",
                            "type": "?array",
                            "shape": "list<string>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 242
                },
                {
                    "routes": [],
                    "name": "emit",
                    "static": false,
                    "visibility": "private",
                    "signature": "emit(array $rows, array $assocArgs, string $format, bool $dry): void",
                    "doc": "",
                    "shapes": [
                        "@param list<array<string, string>> $rows @param array<string, mixed> $assocArgs"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, string>>",
                            "default": null,
                            "doc": "@param array<string, mixed> $assocArgs"
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dry",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 245,
                    "end": 263
                },
                {
                    "routes": [],
                    "name": "skipped",
                    "static": false,
                    "visibility": "private",
                    "signature": "skipped(?array $exclude, bool $quiet): void",
                    "doc": "",
                    "shapes": [
                        "@param list<string>|null $exclude"
                    ],
                    "params": [
                        {
                            "name": "exclude",
                            "type": "?array",
                            "shape": "list<string>|null",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quiet",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 266,
                    "end": 272
                },
                {
                    "routes": [],
                    "name": "missing",
                    "static": false,
                    "visibility": "private",
                    "signature": "missing(string $slug): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 274,
                    "end": 281
                },
                {
                    "routes": [],
                    "name": "installed",
                    "static": false,
                    "visibility": "private",
                    "signature": "installed(string $slug): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 283,
                    "end": 294
                },
                {
                    "routes": [],
                    "name": "titleFor",
                    "static": false,
                    "visibility": "private",
                    "signature": "titleFor(string $slug): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 296,
                    "end": 307
                },
                {
                    "routes": [],
                    "name": "statusByName",
                    "static": false,
                    "visibility": "private",
                    "signature": "statusByName(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 310,
                    "end": 318
                },
                {
                    "routes": [],
                    "name": "channel",
                    "static": false,
                    "visibility": "private",
                    "signature": "channel(string $from, string $to, array $assocArgs): bool",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $assocArgs"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 321,
                    "end": 330
                },
                {
                    "routes": [],
                    "name": "samePrefix",
                    "static": false,
                    "visibility": "private",
                    "signature": "samePrefix(string $from, string $to, int $parts): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 332,
                    "end": 342
                },
                {
                    "routes": [],
                    "name": "pluginSlug",
                    "static": false,
                    "visibility": "private",
                    "signature": "pluginSlug(string $file): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 344,
                    "end": 347
                }
            ]
        },
        {
            "name": "Minn\\Cli\\CacheCommand",
            "short": "CacheCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/CacheCommand.php",
            "lines": 15,
            "doc": "`wp cache flush`: the engine has no object cache, so this is a no-op success.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "flush",
                    "static": false,
                    "visibility": "public",
                    "signature": "flush(array $args, array $assocArgs): void",
                    "doc": "Flushes the object cache.\n\nThe engine does not run an object cache. The verb still succeeds so\nfleet scripts that call it after a write do not abort.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                }
            ]
        },
        {
            "name": "Minn\\Cli\\Commands",
            "short": "Commands",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/Commands.php",
            "lines": 100,
            "doc": "The verbs the engine answers to. Every one is registered for the\nbefore_wp_load phase, which WP-CLI runs before it looks for WordPress,\nand each replaces the bundled subcommand of the same name (a deferred\naddition lands after the bundle and overrides its leaf).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\CacheCommand",
                "Minn\\Cli\\CoreCommand",
                "Minn\\Cli\\CronCommand",
                "Minn\\Cli\\MaintenanceCommand",
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\OptionCommand",
                "Minn\\Cli\\PluginCommand",
                "Minn\\Cli\\RewriteCommand",
                "Minn\\Cli\\SearchReplaceCommand",
                "Minn\\Cli\\ThemeCommand",
                "Minn\\Cli\\UserCommand"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(): void",
                    "doc": "Registers every engine verb with WP-CLI in the phase it runs in.",
                    "shapes": [],
                    "params": [],
                    "line": 18,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "leaf",
                    "static": true,
                    "visibility": "private",
                    "signature": "leaf(string $name, callable|array $callable, array $args): void",
                    "doc": "Registers a leaf and re-adds it after the parent lands. WP-CLI\nregisters `plugin` as a namespace first; its later class command\nwould otherwise overwrite our list.",
                    "shapes": [
                        "@param callable|array{0: class-string, 1: string} $callable",
                        "@param array<string, string> $args"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callable",
                            "type": "callable|array",
                            "shape": "callable|array{0: class-string, 1: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "replace",
                    "static": true,
                    "visibility": "private",
                    "signature": "replace(string $name, callable|array|string $callable, array $args): void",
                    "doc": "A root command the bundle also registers. Re-add after the bundle\nwithout recursing into our own after_add_command hook.",
                    "shapes": [
                        "@param callable|array{0: class-string, 1: string}|class-string $callable",
                        "@param array<string, string> $args"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callable",
                            "type": "callable|array|string",
                            "shape": "callable|array{0: class-string, 1: string}|class-string",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 113
                }
            ]
        },
        {
            "name": "Minn\\Cli\\CoreCommand",
            "short": "CoreCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/CoreCommand.php",
            "lines": 112,
            "doc": "WP-CLI's core verbs where a host's automation meets a Minn site. A Minn\nsite has none of WordPress's core files, so a WordPress core update\nneither applies nor may pretend to: `core update` says the site is up to\ndate (Minn reports the latest release it speaks) and refuses outright\nwhen asked for a version or a package, and `core download` is held back\nover a Minn install, since it would put WordPress's files over the\nengine. `core verify-checksums` checks the engine's own files against\nits signed release. Minn's own updater is `wp minn update`.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Ops\\EngineChecksums"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "REFUSAL",
                    "value": "'This site runs Minn Engine, which keeps WordPress\\'s API but none of its core files, so a WordPress core update does not apply. Update Minn instead: wp minn update.'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "update",
                    "static": true,
                    "visibility": "public",
                    "signature": "update(array $args, array $assocArgs): void",
                    "doc": "Says whether WordPress core is up to date; on Minn it always is, and an asked-for version or package is refused.\n\n## OPTIONS\n\n[<zip>]\n: A WordPress package; refused on Minn.\n\n[--minor]\n: Only a minor release.\n\n[--version=<version>]\n: A WordPress version; refused on Minn.\n\n[--force]\n: Refused on Minn.\n\n[--locale=<locale>]\n: Ignored.\n\n[--insecure]\n: Ignored.",
                    "shapes": [
                        "@param list<string> $args",
                        "@param array<string, string|bool> $assocArgs"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "array<string, string|bool>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "verifyChecksums",
                    "static": true,
                    "visibility": "public",
                    "signature": "verifyChecksums(array $args, array $assocArgs): void",
                    "doc": "Checks the install's files against its signed Minn release, in WP-CLI's own words for the result.\n\n## OPTIONS\n\n[--include-root]\n: Ignored; the webroot's shape files are always checked.\n\n[--version=<version>]\n: Ignored; the running Minn's release is the one checked.\n\n[--locale=<locale>]\n: Ignored.\n\n[--insecure]\n: Ignored.\n\n[--exclude=<files>]\n: Comma-separated paths to leave out of the result.",
                    "shapes": [
                        "@param list<string> $args",
                        "@param array<string, string|bool> $assocArgs"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "array<string, string|bool>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "guardDownload",
                    "static": true,
                    "visibility": "public",
                    "signature": "guardDownload(): void",
                    "doc": "Holds back `core download` over a Minn install unless MINN_ALLOW_CORE_DOWNLOAD is set; `wp minn eject` is the way back to WordPress.",
                    "shapes": [],
                    "params": [],
                    "line": 109,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "root",
                    "static": true,
                    "visibility": "private",
                    "signature": "root(): string",
                    "doc": "The webroot WP-CLI works in: its --path, else the current directory.",
                    "shapes": [],
                    "params": [],
                    "line": 120,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "runsMinn",
                    "static": true,
                    "visibility": "private",
                    "signature": "runsMinn(string $root): bool",
                    "doc": "Whether the webroot boots the engine: its wp-settings.php hands off to minn/bootstrap.php.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 131
                }
            ]
        },
        {
            "name": "Minn\\Cli\\CronCommand",
            "short": "CronCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/CronCommand.php",
            "lines": 277,
            "doc": "`wp cron`: the events, schedules, and spawn test a host and a fleet ask\nfor. Every verb boots the full runtime first, so a plugin's schedules and\ncallbacks are registered before an event is listed, scheduled, or run. The\nwording and exit codes are the reference's, captured from `wp cron` on the\noracle; the two time columns drift second to second and are never pinned.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "EVENT_FIELDS",
                    "value": "array (   0 => 'hook',   1 => 'next_run_gmt',   2 => 'next_run_relative',   3 => 'recurrence', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SCHEDULE_FIELDS",
                    "value": "array (   0 => 'name',   1 => 'display',   2 => 'interval', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "event_list",
                    "static": false,
                    "visibility": "public",
                    "signature": "event_list(array $args, array $assocArgs): void",
                    "doc": "Lists the scheduled cron events.\n\n## OPTIONS\n\n[--hook=<name>]\n[--field=<field>]\n[--fields=<fields>]\n[--format=<format>]\n[--<field>=<value>]\n[--due-now]",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "event_run",
                    "static": false,
                    "visibility": "public",
                    "signature": "event_run(array $args, array $assocArgs): void",
                    "doc": "Runs the next scheduled cron event for the given hook.\n\n## OPTIONS\n\n[<hook>...]\n[--due-now]\n[--all]",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "event_schedule",
                    "static": false,
                    "visibility": "public",
                    "signature": "event_schedule(array $args, array $assocArgs): void",
                    "doc": "Schedules a new cron event.\n\n## OPTIONS\n\n<hook>\n[<next-run>]\n[<recurrence>]\n[--<field>=<value>]",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "event_delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "event_delete(array $args, array $assocArgs): void",
                    "doc": "Deletes all cron events for the given hook.\n\n## OPTIONS\n\n<hook>...",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 167,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "event_unschedule",
                    "static": false,
                    "visibility": "public",
                    "signature": "event_unschedule(array $args, array $assocArgs): void",
                    "doc": "Unschedules all cron events for a given hook.\n\n## OPTIONS\n\n<hook>",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "schedule_list",
                    "static": false,
                    "visibility": "public",
                    "signature": "schedule_list(array $args, array $assocArgs): void",
                    "doc": "Lists available cron schedules.\n\n## OPTIONS\n\n[--field=<field>]\n[--fields=<fields>]\n[--format=<format>]",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "test",
                    "static": false,
                    "visibility": "public",
                    "signature": "test(array $args, array $assocArgs): void",
                    "doc": "Tests the WP Cron spawning system and reports the results.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 234,
                    "end": 242
                },
                {
                    "routes": [],
                    "name": "scheduled",
                    "static": true,
                    "visibility": "private",
                    "signature": "scheduled(array $crons, string $hook): bool",
                    "doc": "Whether any instance of the hook is in the cron table.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 245,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "eventArgs",
                    "static": true,
                    "visibility": "private",
                    "signature": "eventArgs(array $assocArgs): array",
                    "doc": "The event arguments passed as flags, the reference's own flags removed.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 260,
                    "end": 264
                },
                {
                    "routes": [],
                    "name": "duration",
                    "static": true,
                    "visibility": "private",
                    "signature": "duration(int $seconds): string",
                    "doc": "A number of seconds as the reference prints a recurrence: the two largest whole units, or \"now\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "seconds",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 267,
                    "end": 286
                },
                {
                    "routes": [],
                    "name": "relative",
                    "static": true,
                    "visibility": "private",
                    "signature": "relative(int $seconds): string",
                    "doc": "The relative run time as the reference prints it: a duration ahead, or \"now\" once it is due.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "seconds",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 289,
                    "end": 292
                }
            ]
        },
        {
            "name": "Minn\\Cli\\DirectorySearch",
            "short": "DirectorySearch",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/DirectorySearch.php",
            "lines": 37,
            "doc": "Shared wording for `wp theme search` and `wp plugin search`. The\ndefault table is name/slug/rating; Success prints before the rows and\nonly for table/yaml. json/csv/count print the Formatter output alone.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime",
                "Minn\\Ops\\Packages",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Cli\\PluginCommand",
                "Minn\\Cli\\ThemeCommand"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   0 => 'name',   1 => 'slug',   2 => 'rating', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "run",
                    "static": true,
                    "visibility": "public",
                    "signature": "run(string $kind, array $args, array $assocArgs): void",
                    "doc": "Searches the directory (through the Minn update service) for one kind of asset and prints the page.",
                    "shapes": [
                        "@param array<string, mixed> $assocArgs"
                    ],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 52
                }
            ]
        },
        {
            "name": "Minn\\Cli\\Installer",
            "short": "Installer",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/Installer.php",
            "lines": 324,
            "doc": "The swap, both ways. Install parks WordPress's own files beside the\nwebroot, lays the engine and its shape files down, and leaves\nwp-config.php and wp-content untouched; eject puts every parked file\nback and removes what install wrote. The install record at the webroot\n(.minn-install.php) is what eject works from. Preflight says what the site will and\nwill not get before anything moves.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Preflight",
                "Minn\\Json",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Releases",
                "Minn\\Ops\\ShapeFiles",
                "Minn\\Support\\Files"
            ],
            "usedBy": [
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\Preflight"
            ],
            "constructor": {
                "signature": "__construct(string $engineDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 54,
                "end": 56
            },
            "cases": [],
            "constants": [
                {
                    "name": "RECORD",
                    "value": "'.minn-install.php'",
                    "doc": "The install record sits at the webroot, so every site keeps its own\n(a symlinked minn/ is shared between sites) and an engine update\ncannot take it. It is PHP that returns first, so a web request for it\nprints nothing, and it names the webroot it belongs to.",
                    "visibility": "private"
                },
                {
                    "name": "RECORD_HEAD",
                    "value": "'<?php return; // Minn Engine\\'s install record: what `wp minn eject` puts back. ?> '",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "LEGACY_RECORD",
                    "value": "'.install.json'",
                    "doc": "Where installs kept it before: read from a site's own minn/ copy, never through a shared symlink.",
                    "visibility": "private"
                },
                {
                    "name": "CORE_ENTRIES",
                    "value": "array (   0 => 'wp-admin',   1 => 'wp-includes',   2 => 'index.php',   3 => 'wp-activate.php',   4 => 'wp-blog-header.php',   5 => 'wp-comments-post.php',   6 => 'wp-config-sample.php',   7 => 'wp-cron.php',   8 => 'wp-links-opml.php',   9 => 'wp-load.php',   10 => 'wp-login.php',   11 => 'wp-mail.php',   12 => 'wp-settings.php',   13 => 'wp-signup.php',   14 => 'wp-trackback.php',   15 => 'xmlrpc.php',   16 => 'license.txt',   17 => 'readme.html', )",
                    "doc": "The files WordPress keeps at the webroot, moved aside as a set.",
                    "visibility": "private"
                },
                {
                    "name": "WRITTEN_TREES",
                    "value": "array (   0 => 'wp-includes',   1 => 'wp-admin', )",
                    "doc": "Webroot trees install writes (shape files + require placeholders) and eject deletes before restoring the park.",
                    "visibility": "private"
                },
                {
                    "name": "LEGACY_PUBLISHED",
                    "value": "array (   0 => 'minn-admin-asset',   1 => 'minn-engine',   2 => 'wp-includes/js/jquery', )",
                    "doc": "Leftover webroot copies from an earlier installer that published\nassets outside minn/. Eject still deletes them.",
                    "visibility": "private"
                },
                {
                    "name": "SKIP",
                    "value": "array (   0 => '.git',   1 => 'node_modules',   2 => 'tests',   3 => 'docs',   4 => '.DS_Store',   5 => '.install.json', )",
                    "doc": "Development-only trees inside the engine or the admin bundle that never ship.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "lines",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "main",
                    "static": true,
                    "visibility": "public",
                    "signature": "main(array $argv, string $engineDir): int",
                    "doc": "The bin entry: runs one command against a webroot and returns the exit code.",
                    "shapes": [
                        "@param list<string> $argv"
                    ],
                    "params": [
                        {
                            "name": "argv",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "preflight",
                    "static": false,
                    "visibility": "public",
                    "signature": "preflight(string $root): string",
                    "doc": "What the site will and will not get; the worst light decides install. The report lands in the output.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(array $options): int",
                    "doc": "Replaces this engine with the latest release from the Minn update service; --check only says whether there is one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": false,
                    "visibility": "public",
                    "signature": "status(string $root): int",
                    "doc": "Prints what the webroot is running.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 137,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(string $root, array $options): int",
                    "doc": "Installs the engine into a webroot when the preflight allows it.",
                    "shapes": [
                        "@param array<string, string|true> $options"
                    ],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, string|true>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "eject",
                    "static": false,
                    "visibility": "public",
                    "signature": "eject(string $root): int",
                    "doc": "Puts WordPress back and removes the engine's files.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "state",
                    "static": true,
                    "visibility": "public",
                    "signature": "state(string $root): string",
                    "doc": "What a webroot is running: minn, wordpress, or unknown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 265
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": true,
                    "visibility": "public",
                    "signature": "record(string $root): array",
                    "doc": "The install record for a webroot: its owner, when, the engine\nversion, the park, what moved, what was laid down. Empty when there\nis none, or when the one found names another webroot (a site that\nwas moved or copied keeps a record its own eject must not act on).",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 275,
                    "end": 285
                },
                {
                    "routes": [],
                    "name": "help",
                    "static": false,
                    "visibility": "private",
                    "signature": "help(): int",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 102,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "inside",
                    "static": true,
                    "visibility": "private",
                    "signature": "inside(string $path): bool",
                    "doc": "Whether a path from the install record stays inside the webroot (or\nthe park): relative, with no climbing segment and no NUL. The record\nis a file in the webroot, so anything able to write there could\notherwise point an eject's removals anywhere the operator can write.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 293,
                    "end": 299
                },
                {
                    "routes": [],
                    "name": "move",
                    "static": true,
                    "visibility": "private",
                    "signature": "move(string $from, string $to): void",
                    "doc": "rename() first; copy+remove when the park is on another filesystem.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 302,
                    "end": 316
                },
                {
                    "routes": [],
                    "name": "copyTree",
                    "static": true,
                    "visibility": "private",
                    "signature": "copyTree(string $from, string $to): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 318,
                    "end": 335
                },
                {
                    "routes": [],
                    "name": "version",
                    "static": true,
                    "visibility": "private",
                    "signature": "version(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 337,
                    "end": 340
                },
                {
                    "routes": [],
                    "name": "say",
                    "static": false,
                    "visibility": "private",
                    "signature": "say(string $line): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "line",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 342,
                    "end": 345
                }
            ]
        },
        {
            "name": "Minn\\Cli\\MaintenanceCommand",
            "short": "MaintenanceCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/MaintenanceCommand.php",
            "lines": 65,
            "doc": "`wp maintenance-mode`: the `.maintenance` marker in the webroot. The\nengine does not take the public site down while the file is present;\nfleet scripts still need the verb to succeed so an update can bookend\nitself with activate/deactivate.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "activate",
                    "static": false,
                    "visibility": "public",
                    "signature": "activate(array $args, array $assocArgs): void",
                    "doc": "Activates maintenance mode.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "deactivate",
                    "static": false,
                    "visibility": "public",
                    "signature": "deactivate(array $args, array $assocArgs): void",
                    "doc": "Deactivates maintenance mode.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": false,
                    "visibility": "public",
                    "signature": "status(array $args, array $assocArgs): void",
                    "doc": "Displays maintenance mode status.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "is_active",
                    "static": false,
                    "visibility": "public",
                    "signature": "is_active(array $args, array $assocArgs): void",
                    "doc": "Detects maintenance mode status. Exit 0 when active, 1 when not.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "file",
                    "static": false,
                    "visibility": "private",
                    "signature": "file(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 75,
                    "end": 78
                }
            ]
        },
        {
            "name": "Minn\\Cli\\MinnCommand",
            "short": "MinnCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/MinnCommand.php",
            "lines": 319,
            "doc": "Identifies the engine.\n\n## EXAMPLES\n\nwp minn version\nwp minn info\nwp minn probe",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Installer",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Site",
                "Minn\\Cron\\Cron",
                "Minn\\Extension\\Loader",
                "Minn\\Json",
                "Minn\\Mail\\MailSettings",
                "Minn\\Mail\\Mailer",
                "Minn\\Mail\\Message",
                "Minn\\Runtime\\Recovery",
                "Minn\\Runtime\\ScriptPack"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "version",
                    "static": false,
                    "visibility": "public",
                    "signature": "version(array $args, array $assocArgs): void",
                    "doc": "Prints the engine version.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "probe",
                    "static": false,
                    "visibility": "public",
                    "signature": "probe(array $args, array $assocArgs): void",
                    "doc": "Prints the inventory CaptainCore gathers from inside WordPress:\nplugins, themes, must-use plugins, core version, home. One\n`key:value` line per field; JSON values have no newlines. Split\non the first colon only.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "info",
                    "static": false,
                    "visibility": "public",
                    "signature": "info(array $args, array $assocArgs): void",
                    "doc": "Prints the engine's version and where it runs from.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "cron",
                    "static": false,
                    "visibility": "public",
                    "signature": "cron(array $args, array $assocArgs): void",
                    "doc": "Runs the engine's scheduled work: due posts go live, expired rows are swept.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "mail",
                    "static": false,
                    "visibility": "public",
                    "signature": "mail(array $args, array $assocArgs): void",
                    "doc": "Sends a test email through the site's mail settings.\n\n## OPTIONS\n\n<to>\n: The address to send to.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "preflight",
                    "static": false,
                    "visibility": "public",
                    "signature": "preflight(array $args, array $assocArgs): void",
                    "doc": "Says what a WordPress webroot will and will not get from the engine.\n\n## OPTIONS\n\n[<webroot>]\n: The webroot to inspect. Defaults to the current directory.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(array $args, array $assocArgs): void",
                    "doc": "Parks WordPress and installs the engine into a webroot.\n\n## OPTIONS\n\n[<webroot>]\n: The webroot. Defaults to the current directory.\n\n[--park=<dir>]\n: Where WordPress's own files go. Defaults to wp-parked beside the webroot.\n\n[--force]\n: Install even when preflight is RED.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 169,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(array $args, array $assocArgs): void",
                    "doc": "Replaces this engine with the latest Minn release from the update service, checked against its signature.\n\n## OPTIONS\n\n[--check]\n: Only say whether a newer release is out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 184,
                    "end": 187
                },
                {
                    "routes": [],
                    "name": "eject",
                    "static": false,
                    "visibility": "public",
                    "signature": "eject(array $args, array $assocArgs): void",
                    "doc": "Removes the engine and puts WordPress's files back.\n\n## OPTIONS\n\n[<webroot>]\n: The webroot. Defaults to the current directory.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 199,
                    "end": 202
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": false,
                    "visibility": "public",
                    "signature": "status(array $args, array $assocArgs): void",
                    "doc": "Says whether a webroot runs WordPress or the engine.\n\n## OPTIONS\n\n[<webroot>]\n: The webroot. Defaults to the current directory.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 214,
                    "end": 217
                },
                {
                    "routes": [],
                    "name": "scripts",
                    "static": false,
                    "visibility": "public",
                    "signature": "scripts(array $args, array $assocArgs): void",
                    "doc": "The site's script pack: the GPL `wp-*` JavaScript packages the engine\ndoes not reimplement, which a few plugin front ends need (the\nWooCommerce block cart and checkout). The engine never ships them;\nthis installs them into the site's own wp-content, from the\nWordPress the swap parked beside the webroot, or from any WordPress\ntree named with --from.\n\n## OPTIONS\n\n[<action>]\n: status (the default), install, or remove.\n\n[--from=<path>]\n: A WordPress tree to take the packages from. Defaults to the parked\ncopy the install recorded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 250,
                    "end": 280
                },
                {
                    "routes": [],
                    "name": "recovery",
                    "static": false,
                    "visibility": "public",
                    "signature": "recovery(array $args, array $assocArgs): void",
                    "doc": "The extensions recovery paused after they killed a request, and the\nway back. A plugin or theme that fatals is paused so the next\nrequest answers without it; nothing loads it again until it is\nresumed here.\n\n## OPTIONS\n\n[<action>]\n: status (the default), resume, or resume-all.\n\n[<name>]\n: For resume: the plugin file or theme slug to let back in.\n\n[--theme]\n: Treat the name as a theme rather than a plugin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 301,
                    "end": 332
                },
                {
                    "routes": [],
                    "name": "installer",
                    "static": true,
                    "visibility": "private",
                    "signature": "installer(string $command, array $args, array $assocArgs): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "command",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 219,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "parkedTree",
                    "static": true,
                    "visibility": "private",
                    "signature": "parkedTree(): ?string",
                    "doc": "The WordPress the swap parked beside this webroot, when the manifest names one.",
                    "shapes": [],
                    "params": [],
                    "line": 335,
                    "end": 340
                },
                {
                    "routes": [],
                    "name": "engineVersion",
                    "static": true,
                    "visibility": "private",
                    "signature": "engineVersion(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 342,
                    "end": 345
                }
            ]
        },
        {
            "name": "Minn\\Cli\\OptionCommand",
            "short": "OptionCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/OptionCommand.php",
            "lines": 185,
            "doc": "Options, read and written straight to the options table. Serialized\nvalues are decoded by the engine's own reader, and arrays written back\nin the stored form.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime",
                "Minn\\Json",
                "Minn\\Runtime\\Options",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(array $args, array $assocArgs): void",
                    "doc": "Gets the value for an option.\n\n## OPTIONS\n\n<key>\n: Key for the option.\n\n[--format=<format>]\n: Get value in a particular format.\n---\ndefault: var_export\noptions:\n- var_export\n- json\n- yaml\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "add",
                    "static": false,
                    "visibility": "public",
                    "signature": "add(array $args, array $assocArgs): void",
                    "doc": "Adds a new option value.\n\n## OPTIONS\n\n<key>\n: The name of the option to add.\n\n[<value>]\n: The value of the option to add. If omitted, the value is read from STDIN.\n\n[--format=<format>]\n: The serialization format for the value.\n---\ndefault: plaintext\noptions:\n- plaintext\n- json\n---\n\n[--autoload=<autoload>]\n: Should this option be automatically loaded.\n---\noptions:\n- 'on'\n- 'off'\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(array $args, array $assocArgs): void",
                    "doc": "Updates an option value.\n\n## OPTIONS\n\n<key>\n: The name of the option to update.\n\n[<value>]\n: The new value. If omitted, the value is read from STDIN.\n\n[--autoload=<autoload>]\n: Requires WP 4.2. Should this option be automatically loaded.\n---\noptions:\n- 'on'\n- 'off'\n---\n\n[--format=<format>]\n: The serialization format for the value.\n---\ndefault: plaintext\noptions:\n- plaintext\n- json\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(array $args, array $assocArgs): void",
                    "doc": "Deletes an option.\n\n## OPTIONS\n\n<key>...\n: Key for the option.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 158,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "readValue",
                    "static": true,
                    "visibility": "private",
                    "signature": "readValue(array $args, array $assocArgs): mixed",
                    "doc": "The value argument, or STDIN when omitted; JSON decoded when asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "private",
                    "signature": "decode(string $stored): mixed",
                    "doc": "A stored value as PHP data: serialized blobs decoded, anything else as the string it is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stored",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "private",
                    "signature": "encode(mixed $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 200
                }
            ]
        },
        {
            "name": "Minn\\Cli\\PackageInstaller",
            "short": "PackageInstaller",
            "namespace": "Minn\\Cli",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Cli/PackageInstaller.php",
            "lines": 142,
            "doc": "Puts a theme or a plugin on disk for `wp theme install` and `wp plugin\ninstall`: a directory slug, a local zip, or a zip URL, saying along\nthe way what WP-CLI says. The two kinds differ only in their words, in\nwhere they live, and in a plugin being allowed to be a single file.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\Packages",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Cli\\PluginCommand",
                "Minn\\Cli\\ThemeCommand"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Ops\\Packages $packages, string $kind, string $invalidSlug, string $notFound)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "packages",
                        "type": "Minn\\Ops\\Packages",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "kind",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "invalidSlug",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "notFound",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 20,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "packages",
                    "type": "Minn\\Ops\\Packages",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "kind",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "invalidSlug",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "notFound",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "themes",
                    "static": true,
                    "visibility": "public",
                    "signature": "themes(Minn\\Ops\\Packages $packages): self",
                    "doc": "The installer `wp theme install` uses.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "packages",
                            "type": "Minn\\Ops\\Packages",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "plugins",
                    "static": true,
                    "visibility": "public",
                    "signature": "plugins(Minn\\Ops\\Packages $packages): self",
                    "doc": "The installer `wp plugin install` uses.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "packages",
                            "type": "Minn\\Ops\\Packages",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(string $source, bool $force, string $version): array",
                    "doc": "One source onto disk: the folder when it is there afterwards (put\nthere now, or already there), null when it could not be installed,\nand whether this call put it there.",
                    "shapes": [
                        "@return array{0: ?string, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "force",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "fromDirectory",
                    "static": false,
                    "visibility": "private",
                    "signature": "fromDirectory(string $slug, array $info, bool $force, string $version, bool $existed): array",
                    "doc": "A directory release (from the Minn update service) onto disk, replacing an installed copy when forced.",
                    "shapes": [
                        "@param array<string, mixed> $info the directory's answer for the slug",
                        "@return array{0: ?string, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "info",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the directory's answer for the slug"
                        },
                        {
                            "name": "force",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existed",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "archive",
                    "static": false,
                    "visibility": "private",
                    "signature": "archive(string $source, bool $force): array",
                    "doc": "A zip from a URL or a local path, unpacked into place.",
                    "shapes": [
                        "@return array{0: ?string, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "force",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "present",
                    "static": false,
                    "visibility": "private",
                    "signature": "present(string $dest): bool",
                    "doc": "Whether something of this kind is already at the path (a plugin may be a single file beside it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "dest",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "refuse",
                    "static": false,
                    "visibility": "private",
                    "signature": "refuse(string $source, string $reason): array",
                    "doc": "The two warnings WP-CLI gives for a source it could not install.",
                    "shapes": [
                        "@return array{0: null, 1: false}"
                    ],
                    "params": [
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reason",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 158
                }
            ]
        },
        {
            "name": "Minn\\Cli\\PluginCommand",
            "short": "PluginCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/PluginCommand.php",
            "lines": 406,
            "doc": "`wp plugin list|install|update|activate|deactivate|delete`: the inventory and the fleet's install/update/delete.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\AssetUpdate",
                "Minn\\Cli\\DirectorySearch",
                "Minn\\Cli\\PackageInstaller",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Inventory",
                "Minn\\Content\\PluginState",
                "Minn\\Extension\\Loader",
                "Minn\\Ops\\Packages"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   0 => 'name',   1 => 'status',   2 => 'update',   3 => 'version',   4 => 'update_version',   5 => 'auto_update', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(array $args, array $assocArgs): void",
                    "doc": "Lists installed plugins, must-use plugins, and drop-ins.\n\n## OPTIONS\n\n[--status=<status>]\n: Filter to one status: active, inactive, must-use, or dropin.\n\n[--field=<field>]\n: Prints the value of a single field for each plugin.\n\n[--fields=<fields>]\n: Limit the output to specific object fields.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- json\n- count\n- yaml\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "activate",
                    "static": false,
                    "visibility": "public",
                    "signature": "activate(array $args, array $assocArgs): void",
                    "doc": "Activates one or more plugins: a WordPress plugin joins active_plugins\n(its stored state; the engine runs none of its code), a Minn extension\njoins the engine's own list.\n\n## OPTIONS\n\n<plugin>...\n: One or more plugins to activate.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "deactivate",
                    "static": false,
                    "visibility": "public",
                    "signature": "deactivate(array $args, array $assocArgs): void",
                    "doc": "Deactivates one or more plugins.\n\n## OPTIONS\n\n<plugin>...\n: One or more plugins to deactivate.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(array $args, array $assocArgs): void",
                    "doc": "Installs one or more plugins from the plugin directory, a zip, or a URL.\n\n## OPTIONS\n\n<plugin|zip|url>...\n: A plugin slug, a local zip path, or a zip URL.\n\n[--version=<version>]\n: Install that version from the directory instead of the current one.\n\n[--force]\n: Overwrite an installed copy of the same folder.\n\n[--activate]\n: Activate the plugin after it is installed (or if it is already on disk).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(array $args, array $assocArgs): void",
                    "doc": "Updates one or more plugins from the plugin directory.\n\n## OPTIONS\n\n[<plugin>...]\n: One or more plugins to update.\n\n[--all]\n: If set, all plugins that have updates will be updated.\n\n[--exclude=<name>]\n: Comma separated list of plugin names that should be excluded from updating.\n\n[--minor]\n: Only perform updates for minor releases.\n\n[--patch]\n: Only perform updates for patch releases.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- json\n- summary\n---\n\n[--version=<version>]\n: If set, the plugin will be updated to the specified version.\n\n[--dry-run]\n: Preview which plugins would be updated.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(array $args, array $assocArgs): void",
                    "doc": "Deletes plugin files without deactivating.\n\n## OPTIONS\n\n[<plugin>...]\n: One or more plugin folders to delete.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 208,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "is_installed",
                    "static": false,
                    "visibility": "public",
                    "signature": "is_installed(array $args, array $assocArgs): void",
                    "doc": "Checks if a given plugin is installed. Exit 0 when it is, 1 when not.\n\n## OPTIONS\n\n<plugin>\n: The plugin folder to check.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 246,
                    "end": 255
                },
                {
                    "routes": [],
                    "name": "is_active",
                    "static": false,
                    "visibility": "public",
                    "signature": "is_active(array $args, array $assocArgs): void",
                    "doc": "Checks if a given plugin is active. Exit 0 when it is, 1 when not.\n\n## OPTIONS\n\n<plugin>\n: The plugin folder to check.\n\n[--network]\n: Ignored on a single site.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 270,
                    "end": 279
                },
                {
                    "routes": [],
                    "name": "search",
                    "static": false,
                    "visibility": "public",
                    "signature": "search(array $args, array $assocArgs): void",
                    "doc": "Searches the plugin directory.\n\n## OPTIONS\n\n<search>\n: The string to search for.\n\n[--page=<page>]\n: Optional page to display.\n---\ndefault: 1\n---\n\n[--per-page=<per-page>]\n: Optional number of results to display.\n---\ndefault: 10\n---\n\n[--field=<field>]\n: Prints the value of a single field for each plugin.\n\n[--fields=<fields>]\n: Limit the output to specific object fields. Defaults to name,slug,rating.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- json\n- count\n- yaml\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 321,
                    "end": 324
                },
                {
                    "routes": [],
                    "name": "switch",
                    "static": false,
                    "visibility": "private",
                    "signature": "switch(array $slugs, string $verb): void",
                    "doc": "The reference's wording, line for line: one warning per miss, a Success summary or an Error with none done.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slugs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "verb",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 327,
                    "end": 366
                },
                {
                    "routes": [],
                    "name": "pinVersion",
                    "static": false,
                    "visibility": "private",
                    "signature": "pinVersion(array $args, string $version): void",
                    "doc": "`--version` on update force-installs that release using the install wording.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 369,
                    "end": 391
                },
                {
                    "routes": [],
                    "name": "activateFolder",
                    "static": false,
                    "visibility": "private",
                    "signature": "activateFolder(Minn\\Cli\\Runtime $runtime, string $folder): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Cli\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 393,
                    "end": 413
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": true,
                    "visibility": "private",
                    "signature": "plain(string $message): string",
                    "doc": "A refusal's HTML message as WP-CLI words it in a warning: links dropped, tags stripped, no \"Error:\" lead.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 416,
                    "end": 419
                }
            ]
        },
        {
            "name": "Minn\\Cli\\Preflight",
            "short": "Preflight",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/Preflight.php",
            "lines": 417,
            "doc": "What a site will and will not get from the engine, before anything\nmoves: the config it can read, the database it can reach, the theme's\nkind, the plugins the extensions cover, and the content survey (the\nshortcodes, third-party blocks, menus, extra tables, and extra post\ntypes in the database). Every finding is a light; the worst decides.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Installer",
                "Minn\\Content\\ContentScan",
                "Minn\\Extension\\Manifest",
                "Minn\\Json",
                "Minn\\Runtime\\SymbolGap",
                "Minn\\Runtime\\Symbols",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\Installer"
            ],
            "constructor": {
                "signature": "__construct(string $engineDir = '')",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": "the engine whose facade judges the plugins (this one when empty)"
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 32
            },
            "cases": [],
            "constants": [
                {
                    "name": "AREAS",
                    "value": "array (   'admin' => 'wp-admin',   'editor' => 'editor',   'customizer' => 'Customizer',   'xmlrpc' => 'XML-RPC',   'omitted' => 'left out', )",
                    "doc": "What the dead-end areas are, as a report says them.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "lines",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "worst",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "lines",
                    "static": false,
                    "visibility": "public",
                    "signature": "lines(): array",
                    "doc": "The report, one line per finding. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(string $root): string",
                    "doc": "Runs every check and returns the worst light: GREEN, AMBER, or RED.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "themeKind",
                    "static": true,
                    "visibility": "public",
                    "signature": "themeKind(string $dir, string $parentDir): string",
                    "doc": "Same line Theme::active / ClassicTheme::active draw: a block template\nindex (child or parent) is a block theme; otherwise a parent index.php\nis a classic theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "readConfig",
                    "static": true,
                    "visibility": "private",
                    "signature": "readConfig(string $file): array",
                    "doc": "The database constants and prefix, read from the file as text: nothing in it runs.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "env",
                    "static": true,
                    "visibility": "private",
                    "signature": "env(string $name, ?string $default = NULL): ?string",
                    "doc": "getenv, then {NAME}_FILE (Docker secrets), then the fallback.\nMatches the official image's getenv_docker without running that PHP.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 131,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "optionReader",
                    "static": true,
                    "visibility": "private",
                    "signature": "optionReader(mysqli $db, string $prefix): Closure",
                    "doc": "A reader for one option's raw value, on the site's own connection. @return \\Closure(string): ?string",
                    "shapes": [
                        "@return \\Closure(string): ?string"
                    ],
                    "params": [
                        {
                            "name": "db",
                            "type": "mysqli",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "preflightTheme",
                    "static": false,
                    "visibility": "private",
                    "signature": "preflightTheme(string $root, Closure $option): void",
                    "doc": "The active theme: present, and block or classic. @param \\Closure(string): ?string $option",
                    "shapes": [
                        "@param \\Closure(string): ?string $option"
                    ],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "option",
                            "type": "Closure",
                            "shape": "\\Closure(string): ?string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "preflightPlugins",
                    "static": false,
                    "visibility": "private",
                    "signature": "preflightPlugins(string $root, Closure $option): array",
                    "doc": "The active plugins against the extensions on disk: what each provides,\nwhat will not run, and the shortcodes, blocks, and types the active\nextensions cover, for the content survey.",
                    "shapes": [
                        "@param \\Closure(string): ?string $option",
                        "@return array{array<string, string>, array<string, string>, array<string, string>}"
                    ],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "option",
                            "type": "Closure",
                            "shape": "\\Closure(string): ?string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 252
                },
                {
                    "routes": [],
                    "name": "preflightPlugin",
                    "static": false,
                    "visibility": "private",
                    "signature": "preflightPlugin(string $file, string $read, string $label, Minn\\Runtime\\SymbolGap $gap, array $deadEnds): void",
                    "doc": "One plugin as the engine's gate will judge it: refused for what the\nengine lacks, or for declaring a function the engine already defines\nin its main file; otherwise it runs, and the calls that answer with\nnothing on Minn are counted by area.",
                    "shapes": [
                        "@param array<string, mixed> $deadEnds"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "read",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "Minn\\Runtime\\SymbolGap",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deadEnds",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 288
                },
                {
                    "routes": [],
                    "name": "some",
                    "static": true,
                    "visibility": "private",
                    "signature": "some(array $names): string",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $names the first five, and how many more"
                    ],
                    "params": [
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the first five, and how many more"
                        }
                    ],
                    "line": 294,
                    "end": 297
                },
                {
                    "routes": [],
                    "name": "surveyContent",
                    "static": false,
                    "visibility": "private",
                    "signature": "surveyContent(mysqli $db, string $prefix, array $coveredShortcodes, array $coveredBlocks, array $coveredTypes): void",
                    "doc": "What the content holds that the engine must serve: shortcodes and\nthird-party blocks against the extensions covering them, menus, extra\ntables, and extra post types.",
                    "shapes": [
                        "@param array<string, string> $coveredShortcodes",
                        "@param array<string, string> $coveredBlocks",
                        "@param array<string, string> $coveredTypes"
                    ],
                    "params": [
                        {
                            "name": "db",
                            "type": "mysqli",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coveredShortcodes",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coveredBlocks",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coveredTypes",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 308,
                    "end": 314
                },
                {
                    "routes": [],
                    "name": "surveyMarkup",
                    "static": false,
                    "visibility": "private",
                    "signature": "surveyMarkup(mysqli $db, string $prefix, array $coveredShortcodes, array $coveredBlocks): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $coveredShortcodes @param array<string, string> $coveredBlocks"
                    ],
                    "params": [
                        {
                            "name": "db",
                            "type": "mysqli",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coveredShortcodes",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "@param array<string, string> $coveredBlocks"
                        },
                        {
                            "name": "coveredBlocks",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 317,
                    "end": 356
                },
                {
                    "routes": [],
                    "name": "surveyMenus",
                    "static": false,
                    "visibility": "private",
                    "signature": "surveyMenus(mysqli $db, string $prefix): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "mysqli",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 358,
                    "end": 383
                },
                {
                    "routes": [],
                    "name": "surveyTables",
                    "static": false,
                    "visibility": "private",
                    "signature": "surveyTables(mysqli $db, string $prefix): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "mysqli",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 385,
                    "end": 401
                },
                {
                    "routes": [],
                    "name": "surveyTypes",
                    "static": false,
                    "visibility": "private",
                    "signature": "surveyTypes(mysqli $db, string $prefix, array $coveredTypes): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $coveredTypes"
                    ],
                    "params": [
                        {
                            "name": "db",
                            "type": "mysqli",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coveredTypes",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 404,
                    "end": 424
                },
                {
                    "routes": [],
                    "name": "light",
                    "static": false,
                    "visibility": "private",
                    "signature": "light(string $light, string $text): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "light",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 426,
                    "end": 433
                },
                {
                    "routes": [],
                    "name": "say",
                    "static": false,
                    "visibility": "private",
                    "signature": "say(string $line): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "line",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 435,
                    "end": 438
                }
            ]
        },
        {
            "name": "Minn\\Cli\\RewriteCommand",
            "short": "RewriteCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/RewriteCommand.php",
            "lines": 52,
            "doc": "`wp rewrite flush|structure`: permalink_structure is the engine's\nresolver input; there is no .htaccess rewrite file to regenerate.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "flush",
                    "static": false,
                    "visibility": "public",
                    "signature": "flush(array $args, array $assocArgs): void",
                    "doc": "Flushes rewrite rules. The engine resolves URLs from options, so\nthis is a success no-op the way `cache flush` is.\n\n## OPTIONS\n\n[--hard]\n: Ignored: the engine does not write .htaccess.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "structure",
                    "static": false,
                    "visibility": "public",
                    "signature": "structure(array $args, array $assocArgs): void",
                    "doc": "Updates the permalink structure.\n\n## OPTIONS\n\n<permastruct>\n: The new permalink structure, stored as permalink_structure.\n\n[--category-base=<base>]\n: Stored as category_base.\n\n[--tag-base=<base>]\n: Stored as tag_base.\n\n[--hard]\n: Ignored: the engine does not write .htaccess.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 63
                }
            ]
        },
        {
            "name": "Minn\\Cli\\Runtime",
            "short": "Runtime",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/Runtime.php",
            "lines": 80,
            "doc": "The engine, booted for a command: reads the site's wp-config.php (which\nends in wp-settings.php, whose engine boot stops short of serving under\nWP-CLI) so the database constants and table prefix are known.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Content\\Users",
                "Minn\\Context",
                "Minn\\Db",
                "Minn\\Engine",
                "Minn\\Front\\Permalinks",
                "Minn\\Runtime\\Plugins",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Cli\\AssetUpdate",
                "Minn\\Cli\\CronCommand",
                "Minn\\Cli\\DirectorySearch",
                "Minn\\Cli\\MaintenanceCommand",
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\OptionCommand",
                "Minn\\Cli\\PackageInstaller",
                "Minn\\Cli\\PluginCommand",
                "Minn\\Cli\\RewriteCommand",
                "Minn\\Cli\\SearchReplaceCommand",
                "Minn\\Cli\\ThemeCommand",
                "Minn\\Cli\\UserCommand"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Content\\Users $users, Minn\\Auth\\Capabilities $capabilities, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 30,
                "end": 37
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "shared",
                    "type": "?self",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "engine",
                    "type": "?Minn\\Runtime\\Runtime",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "boot",
                    "static": true,
                    "visibility": "public",
                    "signature": "boot(): self",
                    "doc": "The engine's runtime for a CLI process, booted once.",
                    "shapes": [],
                    "params": [],
                    "line": 40,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "bootEngine",
                    "static": true,
                    "visibility": "public",
                    "signature": "bootEngine(): Minn\\Runtime\\Runtime",
                    "doc": "The full WordPress runtime for a command, booted once: the facade is\ndefined, the site's plugins load as code, and the lifecycle actions\nfire, so a verb can fire a scheduled hook whose callback a plugin\nregistered. The lighter boot() does none of this; only a command that\nneeds the runtime (cron) asks for this, since it loads every plugin.",
                    "shapes": [],
                    "params": [],
                    "line": 63,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "standIn",
                    "static": true,
                    "visibility": "public",
                    "signature": "standIn(): void",
                    "doc": "The runtime for a command WP-CLI loads WordPress for: WP-CLI has already\nrun wp-config.php, so the engine boots from the constants it defined,\nloads the site's plugins as code (their commands register as they load),\nand hands control back for WP-CLI to run the command.",
                    "shapes": [],
                    "params": [],
                    "line": 87,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "loadConfig",
                    "static": true,
                    "visibility": "private",
                    "signature": "loadConfig(string $file): void",
                    "doc": "wp-config.php sets $table_prefix as a variable; the engine reads it as a global.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 103
                }
            ]
        },
        {
            "name": "Minn\\Cli\\SearchReplaceCommand",
            "short": "SearchReplaceCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/SearchReplaceCommand.php",
            "lines": 143,
            "doc": "`wp search-replace`: walks every string column, including serialized\nPHP arrays, and reports replacements the way the reference does.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\Runtime",
                "Minn\\Support\\SearchReplace"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SKIP_TYPES",
                    "value": "'/^(tinyint|smallint|mediumint|int|bigint|float|double|decimal|bit|date|time|datetime|timestamp|year)/i'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "__invoke",
                    "static": false,
                    "visibility": "public",
                    "signature": "__invoke(array $args, array $assocArgs): void",
                    "doc": "Searches/replaces strings in the database.\n\n## OPTIONS\n\n<old>\n: A string to search for.\n\n<new>\n: Replace instances of the first string with this new string.\n\n[<table>...]\n: Restrict the replacement to these tables.\n\n[--dry-run]\n: Report without writing.\n\n[--all-tables]\n: Search every table in the database, not only those with the site prefix.\n\n[--report-changed-only]\n: Only print tables/columns that changed.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- json\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "listTables",
                    "static": true,
                    "visibility": "private",
                    "signature": "listTables(Minn\\Cli\\Runtime $runtime, bool $all): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Cli\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "all",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 102
                },
                {
                    "routes": [],
                    "name": "stringColumns",
                    "static": true,
                    "visibility": "private",
                    "signature": "stringColumns(Minn\\Cli\\Runtime $runtime, string $table): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Cli\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "replaceColumn",
                    "static": true,
                    "visibility": "private",
                    "signature": "replaceColumn(Minn\\Cli\\Runtime $runtime, string $table, string $column, string $old, string $new, bool $dry): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Cli\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "old",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "new",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dry",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 156
                }
            ]
        },
        {
            "name": "Minn\\Cli\\ThemeCommand",
            "short": "ThemeCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/ThemeCommand.php",
            "lines": 332,
            "doc": "`wp theme list|install|update|activate|delete`: the inventory CaptainCore\nreads, and the install/update the fleet's `wp theme` verbs run.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cli\\AssetUpdate",
                "Minn\\Cli\\DirectorySearch",
                "Minn\\Cli\\PackageInstaller",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Inventory",
                "Minn\\Ops\\Packages",
                "Minn\\Support\\FileHeaders"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   0 => 'name',   1 => 'status',   2 => 'update',   3 => 'version',   4 => 'update_version',   5 => 'auto_update', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(array $args, array $assocArgs): void",
                    "doc": "Lists installed themes.\n\n## OPTIONS\n\n[--status=<status>]\n: Filter to one status: active, inactive, or parent.\n\n[--field=<field>]\n: Prints the value of a single field for each theme.\n\n[--fields=<fields>]\n: Limit the output to specific object fields.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- json\n- count\n- yaml\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(array $args, array $assocArgs): void",
                    "doc": "Installs one or more themes from the theme directory, a zip, or a URL.\n\n## OPTIONS\n\n<theme|zip|url>...\n: A theme slug, a local zip path, or a zip URL.\n\n[--version=<version>]\n: Install that version from the directory instead of the current one.\n\n[--force]\n: Overwrite an installed copy of the same folder.\n\n[--activate]\n: Activate the theme after it is installed (or if it is already on disk).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(array $args, array $assocArgs): void",
                    "doc": "Updates one or more themes from the theme directory.\n\n## OPTIONS\n\n[<theme>...]\n: One or more themes to update.\n\n[--all]\n: If set, all themes that have updates will be updated.\n\n[--exclude=<theme-names>]\n: Comma separated list of theme names that should be excluded from updating.\n\n[--minor]\n: Only perform updates for minor releases.\n\n[--patch]\n: Only perform updates for patch releases.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- json\n- summary\n---\n\n[--version=<version>]\n: If set, the theme will be updated to the specified version.\n\n[--dry-run]\n: Preview which themes would be updated.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 163
                },
                {
                    "routes": [],
                    "name": "activate",
                    "static": false,
                    "visibility": "public",
                    "signature": "activate(array $args, array $assocArgs): void",
                    "doc": "Activates a theme.\n\n## OPTIONS\n\n<theme>\n: The theme folder to activate.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 175,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(array $args, array $assocArgs): void",
                    "doc": "Deletes one or more themes from disk.\n\n## OPTIONS\n\n[<theme>...]\n: One or more theme folders to delete.\n\n[--force]\n: Allow deleting the active theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "is_installed",
                    "static": false,
                    "visibility": "public",
                    "signature": "is_installed(array $args, array $assocArgs): void",
                    "doc": "Checks if a given theme is installed. Exit 0 when it is, 1 when not.\n\n## OPTIONS\n\n<theme>\n: The theme folder to check.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 279,
                    "end": 287
                },
                {
                    "routes": [],
                    "name": "is_active",
                    "static": false,
                    "visibility": "public",
                    "signature": "is_active(array $args, array $assocArgs): void",
                    "doc": "Checks if a given theme is active. Exit 0 when it is, 1 when not.\n\n## OPTIONS\n\n<theme>\n: The theme folder to check.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 299,
                    "end": 305
                },
                {
                    "routes": [],
                    "name": "search",
                    "static": false,
                    "visibility": "public",
                    "signature": "search(array $args, array $assocArgs): void",
                    "doc": "Searches the theme directory.\n\n## OPTIONS\n\n<search>\n: The string to search for.\n\n[--page=<page>]\n: Optional page to display.\n---\ndefault: 1\n---\n\n[--per-page=<per-page>]\n: Optional number of results to display. Defaults to 10.\n\n[--field=<field>]\n: Prints the value of a single field for each theme.\n\n[--fields=<fields>]\n: Limit the output to specific object fields. Defaults to name,slug,rating.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- json\n- count\n- yaml\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 344,
                    "end": 347
                },
                {
                    "routes": [],
                    "name": "pinVersion",
                    "static": false,
                    "visibility": "private",
                    "signature": "pinVersion(array $args, string $version): void",
                    "doc": "`--version` on update force-installs that release using the install wording.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "switchTo",
                    "static": false,
                    "visibility": "private",
                    "signature": "switchTo(Minn\\Cli\\Runtime $runtime, string $slug): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Cli\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 249,
                    "end": 267
                }
            ]
        },
        {
            "name": "Minn\\Cli\\UserCommand",
            "short": "UserCommand",
            "namespace": "Minn\\Cli",
            "kind": "final class",
            "file": "public/minn/src/Minn/Cli/UserCommand.php",
            "lines": 367,
            "doc": "Users: the list and get views, and the one-time login link.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Password",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Auth\\Roles",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\UserRecord",
                "Minn\\Mail\\Mailer"
            ],
            "usedBy": [
                "Minn\\Cli\\Commands"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   0 => 'ID',   1 => 'user_login',   2 => 'display_name',   3 => 'user_email',   4 => 'user_registered',   5 => 'roles', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(array $args, array $assocArgs): void",
                    "doc": "Lists users.\n\n## OPTIONS\n\n[--role=<role>]\n: Only display users with a certain role.\n\n[--field=<field>]\n: Prints the value of a single field for each user.\n\n[--fields=<fields>]\n: Limit the output to specific object fields.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- ids\n- json\n- count\n- yaml\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(array $args, array $assocArgs): void",
                    "doc": "Gets details about a user.\n\n## OPTIONS\n\n<user>\n: User ID, user email, or user login.\n\n[--field=<field>]\n: Instead of returning the whole user, returns the value of a single field.\n\n[--fields=<fields>]\n: Get a specific subset of the user's fields.\n\n[--format=<format>]\n: Render output in a particular format.\n---\ndefault: table\noptions:\n- table\n- csv\n- json\n- yaml\n---",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "login",
                    "static": false,
                    "visibility": "public",
                    "signature": "login(array $args, array $assocArgs): void",
                    "doc": "Prints a one-time login link for a user.\n\nThe link signs the user in at wp-login.php once, within fifteen\nminutes, and then expires (the contract of the captaincore helper).\n\n## OPTIONS\n\n<user>\n: User ID, user email, or user login.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(array $args, array $assocArgs): void",
                    "doc": "Creates a new user.\n\n## OPTIONS\n\n<user-login>\n: The login of the user to create.\n\n<user-email>\n: The email address of the user to create.\n\n[--role=<role>]\n: The role of the user to create. Default: the site's default role.\n\n[--user_pass=<password>]\n: The user password. Default: randomly generated.\n\n[--display_name=<name>]\n: The display name.\n\n[--user_nicename=<nice_name>]\n: A URL-friendly name. Default: the login.\n\n[--user_url=<url>]\n: The user's URL.\n\n[--nickname=<nickname>]\n: The nickname. Default: the login.\n\n[--first_name=<first_name>]\n: The first name.\n\n[--last_name=<last_name>]\n: The last name.\n\n[--description=<description>]\n: A description.\n\n[--send-email]\n: Send the new user a password-reset email.\n\n[--porcelain]\n: Output just the new user id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(array $args, array $assocArgs): void",
                    "doc": "Updates an existing user.\n\n## OPTIONS\n\n<user>\n: User ID, email, or login.\n\n[--user_pass=<password>]\n: A new password.\n\n[--user_email=<email>]\n: A new email.\n\n[--display_name=<name>]\n: A new display name.\n\n[--first_name=<first_name>]\n: A new first name.\n\n[--last_name=<last_name>]\n: A new last name.\n\n[--role=<role>]\n: A new role.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 311
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(array $args, array $assocArgs): void",
                    "doc": "Deletes a user.\n\n## OPTIONS\n\n<user>\n: User ID, email, or login.\n\n[--reassign=<id>]\n: User ID to reassign posts to.\n\n[--yes]\n: Answer yes to the confirmation.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "assocArgs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 329,
                    "end": 346
                },
                {
                    "routes": [],
                    "name": "randomPassword",
                    "static": true,
                    "visibility": "private",
                    "signature": "randomPassword(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 348,
                    "end": 357
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": true,
                    "visibility": "private",
                    "signature": "find(string $identifier): ?Minn\\Content\\UserRecord",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "identifier",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 359,
                    "end": 367
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": true,
                    "visibility": "private",
                    "signature": "item(Minn\\Content\\UserRecord|array $row, array $roles, string $glue): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $roles"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "Minn\\Content\\UserRecord|array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "roles",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "glue",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 370,
                    "end": 380
                }
            ]
        },
        {
            "name": "Minn\\Content\\Autop",
            "short": "Autop",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Autop.php",
            "lines": 168,
            "doc": "Classic-content paragraphing (wpautop): blank lines become paragraphs,\nsingle newlines become line breaks when asked, and block-level tags are\nnever wrapped. Rebuilt against the reference's output on a corpus of\nfuzzed and real content plus targeted experiments (probe autop); every\nrule below is one that corpus demanded, written as the behaviour seen,\nin the order it applies:\n\n- <pre> elements are cut out first and put back untouched at the end.\n- A pair of <br> tags is a paragraph break; block tags get blank lines\naround them, so they always sit outside paragraphs.\n- Newlines inside a tag, comment or CDATA section (an unclosed one runs\nto the end) are held aside, so they never split a paragraph and come\nback as plain newlines. While held, such a newline ends the tag as far\nas the block rules can tell.\n- Whitespace around object, param, embed, audio, video, source, track,\nfigcaption and option tags is squeezed out when those tags are used.\n- Blank-line separated runs become <p> paragraphs, then paragraphs that\nonly hold a block tag lose their <p> and </p>.\n- With line breaks on, remaining newlines become <br />, except inside\nscript, style, svg and math elements, and breaks next to block tags go.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "BLOCK",
                    "value": "'(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'",
                    "doc": "Tag names that open and close blocks; the cleanup rules match them as name prefixes, case-sensitively.",
                    "visibility": "private"
                },
                {
                    "name": "BREAK_DROPPERS",
                    "value": "'(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)'",
                    "doc": "Tags (again by name prefix) that drop a <br /> written just before them.",
                    "visibility": "private"
                },
                {
                    "name": "HELD_CORE",
                    "value": "'<>'",
                    "doc": "Core of a held newline. It reads as a tag of its own: a run of plain\ntext stops at its \"<\" and a tag match ends at its \">\", which is how a\nheld newline keeps the block rules from reaching past it.",
                    "visibility": "private"
                },
                {
                    "name": "HELD_NEWLINE",
                    "value": "' <> '",
                    "doc": "A newline inside a tag, comment or CDATA section while paragraphs are made.",
                    "visibility": "private"
                },
                {
                    "name": "RAW_NEWLINE",
                    "value": "''",
                    "doc": "A newline inside script, style, svg or math while line breaks are added.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(string $text, bool $lineBreaks = true): string",
                    "doc": "The classic paragraph rules: a blank line makes a paragraph, a single newline a line break when asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lineBreaks",
                            "type": "bool",
                            "shape": "",
                            "default": "true",
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "stashPre",
                    "static": true,
                    "visibility": "private",
                    "signature": "stashPre(string $text): array",
                    "doc": "Cuts each <pre> element out and leaves a stand-in that acts as an empty block.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "spaceBlocks",
                    "static": true,
                    "visibility": "private",
                    "signature": "spaceBlocks(string $text): string",
                    "doc": "Turns <br> pairs into blank lines and puts blank lines before block openers and after block closers.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "holdTagNewlines",
                    "static": true,
                    "visibility": "private",
                    "signature": "holdTagNewlines(string $text): string",
                    "doc": "Holds newlines found inside tags, comments and CDATA sections.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "squeezeMedia",
                    "static": true,
                    "visibility": "private",
                    "signature": "squeezeMedia(string $text): string",
                    "doc": "Squeezes whitespace around embedded media tags, each family only when the text uses it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "squeezeFormParts",
                    "static": true,
                    "visibility": "private",
                    "signature": "squeezeFormParts(string $text): string",
                    "doc": "Squeezes whitespace before figcaption and option openers and after their closers, when used.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 140,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "wrapParagraphs",
                    "static": true,
                    "visibility": "private",
                    "signature": "wrapParagraphs(string $text): string",
                    "doc": "Wraps every blank-line separated run in <p>...</p>, trimming only its outer newlines.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "tidyParagraphs",
                    "static": true,
                    "visibility": "private",
                    "signature": "tidyParagraphs(string $text): string",
                    "doc": "Removes empty paragraphs and the <p> or </p> that would wrap a block tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 175
                },
                {
                    "routes": [],
                    "name": "addLineBreaks",
                    "static": true,
                    "visibility": "private",
                    "signature": "addLineBreaks(string $text): string",
                    "doc": "Writes <br> as <br /> and turns each newline (and the whitespace before it) into a line break.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 178,
                    "end": 188
                },
                {
                    "routes": [],
                    "name": "tidyBreaks",
                    "static": true,
                    "visibility": "private",
                    "signature": "tidyBreaks(string $text): string",
                    "doc": "Drops a <br /> right after a block tag, or right before one of the tags that swallow it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 195
                }
            ]
        },
        {
            "name": "Minn\\Content\\Blocks",
            "short": "Blocks",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Blocks.php",
            "lines": 46,
            "doc": "The content pipeline's front door: block markup goes through the block\nrenderer (Minn\\Blocks), classic content rides the paragraph pipeline.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\Texturize",
                "Minn\\Db",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\RenderController",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\Renderer",
                "Minn\\Rest\\RenderedFields",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "offRequest",
                    "type": "?Minn\\Blocks\\Renderer",
                    "readonly": false,
                    "static": true,
                    "doc": "The renderer for code that renders with no request behind it: the command line and the unit suite.",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(string $raw): string",
                    "doc": "Post content as HTML: blocks through the renderer, classic content through the paragraph rules.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "renderer",
                    "static": true,
                    "visibility": "public",
                    "signature": "renderer(): Minn\\Blocks\\Renderer",
                    "doc": "The block renderer of the request being answered, which its runtime\nholds and builds over that request's own database door. With no\nruntime (the command line, the unit suite) one off-request renderer\nstands in.",
                    "shapes": [],
                    "params": [],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "paragraphs",
                    "static": true,
                    "visibility": "public",
                    "signature": "paragraphs(string $raw): string",
                    "doc": "Plain prose to paragraphs: texturize, split on blank lines, <br /> on\nsingle newlines. Shared by classic post content and comment text.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Content\\Clickable",
            "short": "Clickable",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Clickable.php",
            "lines": 64,
            "doc": "Bare addresses in text made links (make_clickable, probe\nformatting-callbacks). Only text is read, never tags or comments, and\nnothing inside code, pre, script or style. An address must start the text\nor follow whitespace or \"(\"; trailing . , ; : ! ? stay outside it. URLs\n(http, https, ftp) are found first, then www. and ftp. hosts, then email\naddresses; each is handed to its callback, which builds the link. A link\nmade as the whole text of an existing link is unwrapped into it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SKIP",
                    "value": "'code|pre|script|style'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BEFORE",
                    "value": "'(^|[\\\\s(])'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TRAILING",
                    "value": "'([.,;:!?]*)(?=[\\\\s<>\"]|$)'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "make",
                    "static": true,
                    "visibility": "public",
                    "signature": "make(string $text, Closure $url, Closure $web, Closure $email): string",
                    "doc": "The text with its addresses made links: $url gets [whole, before,\naddress, trailing], $web the same for a www. or ftp. host, $email\n[whole, before, user, domain].",
                    "shapes": [
                        "@param Closure(list<string>): string $url",
                        "@param Closure(list<string>): string $web",
                        "@param Closure(list<string>): string $email"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "Closure",
                            "shape": "Closure(list<string>): string",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "web",
                            "type": "Closure",
                            "shape": "Closure(list<string>): string",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "Closure",
                            "shape": "Closure(list<string>): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "unbalancedClosers",
                    "static": true,
                    "visibility": "public",
                    "signature": "unbalancedClosers(string $url): array",
                    "doc": "A URL's trailing \")\" taken off while the URL closes more parentheses\nthan it opens: [the URL, what was taken off].",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "linked",
                    "static": true,
                    "visibility": "private",
                    "signature": "linked(string $text, Closure $url, Closure $web, Closure $email): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "web",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "unwrapNested",
                    "static": true,
                    "visibility": "private",
                    "signature": "unwrapNested(string $html): string",
                    "doc": "A link that is the whole text of another link gives the outer one its text.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 81
                }
            ]
        },
        {
            "name": "Minn\\Content\\CommentClasses",
            "short": "CommentClasses",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/CommentClasses.php",
            "lines": 26,
            "doc": "The class tokens a rendered comment carries: its type, its author, odd/even and thread alternation, depth, then the caller's extras.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "build",
                    "static": true,
                    "visibility": "public",
                    "signature": "build(string $type, ?string $authorClass, bool $byPostAuthor, int $alt, int $depth, int $threadAlt, array $extra): array",
                    "doc": "The class list a comment's list item carries, in the reference's order.",
                    "shapes": [
                        "@param list<string> $extra",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authorClass",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "byPostAuthor",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "alt",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "threadAlt",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 32
                }
            ]
        },
        {
            "name": "Minn\\Content\\CommentRecord",
            "short": "CommentRecord",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/CommentRecord.php",
            "lines": 114,
            "doc": "One row of the comments table, read by name: $comment->author, ->content,\n->postId, ->parentId, and isApproved() for the status the reference\nstores as '1'. Array access is the migration bridge, read-only.",
            "implements": [
                "ArrayAccess"
            ],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\Notifications",
                "Minn\\Blocks\\Context",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Content\\Comments",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\CommentsController",
                "Minn\\Runtime\\CommentEvents"
            ],
            "constructor": {
                "signature": "__construct(int $id, int $postId, string $author, string $authorEmail, string $authorUrl, string $authorIp, string $date, string $dateGmt, string $content, int $karma, string $approved, string $agent, string $type, int $parentId, int $userId, array $row)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed> $row"
                ],
                "params": [
                    {
                        "name": "id",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "postId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "author",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "authorEmail",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "authorUrl",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "authorIp",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "date",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "dateGmt",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "content",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "karma",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "approved",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "agent",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "type",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parentId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "userId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "row",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 20,
                "end": 38
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "id",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "postId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "author",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "authorEmail",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "authorUrl",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "authorIp",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "date",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "dateGmt",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "content",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "karma",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "approved",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "agent",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "type",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "parentId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "userId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "row",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromRow",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRow(array $row): self",
                    "doc": "A record from a comments row; a missing column reads as empty.",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "fromRows",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRows(array $rows): array",
                    "doc": "A record for every row, in order.",
                    "shapes": [
                        "@param list<array<string, mixed>> $rows @return list<self>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "@return list<self>"
                        }
                    ],
                    "line": 72,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "row",
                    "static": false,
                    "visibility": "public",
                    "signature": "row(): array",
                    "doc": "The stored row, for the writers and shapers that still spell columns.",
                    "shapes": [],
                    "params": [],
                    "line": 78,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "isApproved",
                    "static": false,
                    "visibility": "public",
                    "signature": "isApproved(): bool",
                    "doc": "Approved, and so public.",
                    "shapes": [],
                    "params": [],
                    "line": 84,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "isPending",
                    "static": false,
                    "visibility": "public",
                    "signature": "isPending(): bool",
                    "doc": "Held for moderation.",
                    "shapes": [],
                    "params": [],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "isComment",
                    "static": false,
                    "visibility": "public",
                    "signature": "isComment(): bool",
                    "doc": "A plain comment: the type column is '' on old rows and 'comment' on new ones.",
                    "shapes": [],
                    "params": [],
                    "line": 96,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "column",
                    "static": false,
                    "visibility": "public",
                    "signature": "column(string $name): mixed",
                    "doc": "One stored column by its database name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "offsetExists",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetExists(mixed $offset): bool",
                    "doc": "The migration bridge: the record answers to its column names the way the row did.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "offsetGet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetGet(mixed $offset): mixed",
                    "doc": "The migration bridge: one column by its stored name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "offsetSet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetSet(mixed $offset, mixed $value): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "offsetUnset",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetUnset(mixed $offset): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 129
                }
            ]
        },
        {
            "name": "Minn\\Content\\Comments",
            "short": "Comments",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Comments.php",
            "lines": 245,
            "doc": "Reads and writes over the comments table.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\CommentRecord",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Services",
                "Minn\\Runtime\\CommentEvents"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 14,
                "end": 16
            },
            "cases": [],
            "constants": [
                {
                    "name": "UPDATABLE",
                    "value": "array (   0 => 'comment_post_ID',   1 => 'comment_author',   2 => 'comment_author_email',   3 => 'comment_author_url',   4 => 'comment_author_IP',   5 => 'comment_date',   6 => 'comment_date_gmt',   7 => 'comment_content',   8 => 'comment_karma',   9 => 'comment_approved',   10 => 'comment_agent',   11 => 'comment_type',   12 => 'comment_parent',   13 => 'user_id', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "FIELD_LENGTHS",
                    "value": "array (   'comment_author' => 245,   'comment_author_email' => 100,   'comment_author_url' => 200,   'comment_content' => 65525, )",
                    "doc": "The comment form fields whose length the table limits, with the length a stock table gives each.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(int $id): ?Minn\\Content\\CommentRecord",
                    "doc": "The comment with this id, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "public",
                    "signature": "meta(int $id, string $key): ?string",
                    "doc": "One meta value of a comment, or null when it has none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "addMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "addMeta(int $id, string $key, string $value): void",
                    "doc": "Adds a meta row; a second row with the same key is allowed, as the reference allows it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "duplicate",
                    "static": false,
                    "visibility": "public",
                    "signature": "duplicate(int $postId, string $author, string $email, string $content, int $userId): bool",
                    "doc": "The same words on the same post from the same person, in any status but trash or spam.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "duplicateId",
                    "static": false,
                    "visibility": "public",
                    "signature": "duplicateId(int $postId, string $author, string $email, string $content, int $userId): ?int",
                    "doc": "The id of a comment this one would repeat (same post, same author, same words, not spam or trash), or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "lastCommentTime",
                    "static": false,
                    "visibility": "public",
                    "signature": "lastCommentTime(int $userId, string $address, string $email, string $sinceGmt): ?int",
                    "doc": "When the commenter last commented since the GMT time given, as a Unix\ntime: matched by user id when signed in, else by address, or by email\neither way. Null when they have not.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sinceGmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "pendingCounts",
                    "static": false,
                    "visibility": "public",
                    "signature": "pendingCounts(array $postIds): array",
                    "doc": "Held comments per post, for the ids given (a post without any reads 0).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postIds",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "previouslyApproved",
                    "static": false,
                    "visibility": "public",
                    "signature": "previouslyApproved(string $author, string $email): bool",
                    "doc": "True when this name and email already have an approved comment.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "author",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "insert",
                    "static": false,
                    "visibility": "public",
                    "signature": "insert(array $columns): int",
                    "doc": "Inserts a row from column => value pairs and returns the new id.",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(int $id, array $columns): void",
                    "doc": "Sets the given columns on one comment.",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "fieldLengths",
                    "static": false,
                    "visibility": "public",
                    "signature": "fieldLengths(): array",
                    "doc": "How long each comment form field may be, read from the table as it is:\na character column allows its declared length, a text column ten bytes\nfewer than it holds. A column the schema does not describe keeps the\nstock table's length.",
                    "shapes": [
                        "@return array<string, int>"
                    ],
                    "params": [],
                    "line": 136,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "idsOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "idsOf(int $postId): array",
                    "doc": "The ids of every comment on a post, whatever its status, oldest first. @return list<int>",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "statusesOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "statusesOf(int $postId): array",
                    "doc": "Every comment on a post as id => status, which the trash keeps to give back. @return array<int, string>",
                    "shapes": [
                        "@return array<int, string>"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "setStatusOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "setStatusOf(array $ids, string $status): void",
                    "doc": "Sets one status on the given comments. @param list<int> $ids",
                    "shapes": [
                        "@param list<int> $ids"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "orphanReplies",
                    "static": false,
                    "visibility": "public",
                    "signature": "orphanReplies(int $id, int $parent): void",
                    "doc": "A deleted comment's replies move up to its parent.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 180,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(int $id): void",
                    "doc": "Removes the comment and its meta; the post's count is the caller's to recount.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "recount",
                    "static": false,
                    "visibility": "public",
                    "signature": "recount(int $postId): void",
                    "doc": "Recomputes a post's stored comment_count (approved comments only).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 201
                },
                {
                    "routes": [],
                    "name": "statusOf",
                    "static": true,
                    "visibility": "public",
                    "signature": "statusOf(string $approved): string",
                    "doc": "DB approval token to the wp/v2 status string.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "approved",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 204,
                    "end": 211
                },
                {
                    "routes": [],
                    "name": "tokensFor",
                    "static": true,
                    "visibility": "public",
                    "signature": "tokensFor(string $status): ?array",
                    "doc": "wp/v2 status parameter to DB token(s); null for an unknown status.",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "changedColumns",
                    "static": true,
                    "visibility": "public",
                    "signature": "changedColumns(array $data, array $current): array",
                    "doc": "The columns an update really changes, compared as strings against the\nstored row; the approval shorthands hold/approve become the stored 0/1.",
                    "shapes": [
                        "@param array<string, mixed> $data",
                        "@param array<string, mixed> $current",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "current",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 253
                }
            ]
        },
        {
            "name": "Minn\\Content\\ContentScan",
            "short": "ContentScan",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/ContentScan.php",
            "lines": 196,
            "doc": "What a site's stored content asks of the engine: shortcodes, block\nnames, extra tables, extra post types. Preflight lights the findings;\nthe scan itself is pure string and list work so a suite can pin it\nwithout a database.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Parser"
            ],
            "usedBy": [
                "Minn\\Cli\\Preflight"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CORE_TABLES",
                    "value": "array (   0 => 'commentmeta',   1 => 'comments',   2 => 'links',   3 => 'options',   4 => 'postmeta',   5 => 'posts',   6 => 'term_relationships',   7 => 'term_taxonomy',   8 => 'termmeta',   9 => 'terms',   10 => 'usermeta',   11 => 'users', )",
                    "doc": "Tables the engine already speaks. Anything else is plugin data.",
                    "visibility": "public"
                },
                {
                    "name": "CORE_TYPES",
                    "value": "array (   0 => 'post',   1 => 'page',   2 => 'attachment',   3 => 'revision',   4 => 'nav_menu_item',   5 => 'custom_css',   6 => 'customize_changeset',   7 => 'oembed_cache',   8 => 'user_request',   9 => 'wp_block',   10 => 'wp_template',   11 => 'wp_template_part',   12 => 'wp_global_styles',   13 => 'wp_navigation',   14 => 'wp_font_family',   15 => 'wp_font_face', )",
                    "doc": "Built-in types the engine stores. Public ones are in data/types.json;\nthe rest are silent core types that still occupy the posts table.",
                    "visibility": "public"
                },
                {
                    "name": "CONTENT_TYPES",
                    "value": "array (   0 => 'post',   1 => 'page',   2 => 'wp_block',   3 => 'wp_template',   4 => 'wp_template_part',   5 => 'wp_navigation', )",
                    "doc": "post_content that a visitor (or a theme template) can actually see.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "shortcodes",
                    "static": true,
                    "visibility": "public",
                    "signature": "shortcodes(string $content): array",
                    "doc": "Opening shortcode tags in $content. Escaped [[tag]] is skipped;\nclosers [/tag] never match because a tag name starts with a letter.",
                    "shapes": [
                        "@return array<string, int> tag => occurrences"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "blocks",
                    "static": true,
                    "visibility": "public",
                    "signature": "blocks(string $content): array",
                    "doc": "Block names in $content, namespace included. A delimiter without a\nnamespace is core/, matching the parser.",
                    "shapes": [
                        "@return array<string, int> name => occurrences"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "extraTables",
                    "static": true,
                    "visibility": "public",
                    "signature": "extraTables(array $tables, string $prefix): array",
                    "doc": "The tables under the prefix that are not the reference's own.",
                    "shapes": [
                        "@param list<string> $tables names from SHOW TABLES",
                        "@return list<string> bare names after stripping the prefix"
                    ],
                    "params": [
                        {
                            "name": "tables",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "names from SHOW TABLES"
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "tableFamilies",
                    "static": true,
                    "visibility": "public",
                    "signature": "tableFamilies(array $bare): array",
                    "doc": "Group extra tables by the first underscore segment. Wordfence's\ntables are wfHits and wfls_* with no shared underscore prefix, so\nthose two stems collapse to one family.",
                    "shapes": [
                        "@param list<string> $bare",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "bare",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 137,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "extraTypes",
                    "static": true,
                    "visibility": "public",
                    "signature": "extraTypes(array $types): array",
                    "doc": "The post types in use that the reference does not register itself.",
                    "shapes": [
                        "@param list<string> $types",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "thirdParty",
                    "static": true,
                    "visibility": "public",
                    "signature": "thirdParty(array $named): array",
                    "doc": "The block names that are not core/*, with their counts.",
                    "shapes": [
                        "@param array<string, int> $named",
                        "@return array<string, int>"
                    ],
                    "params": [
                        {
                            "name": "named",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "listed",
                    "static": true,
                    "visibility": "public",
                    "signature": "listed(array $names, int $cap = 40): string",
                    "doc": "Names sorted and comma-separated, cut with a count past the cap.",
                    "shapes": [
                        "@param list<string> $names"
                    ],
                    "params": [
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "cap",
                            "type": "int",
                            "shape": "",
                            "default": "40",
                            "doc": ""
                        }
                    ],
                    "line": 190,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "walk",
                    "static": true,
                    "visibility": "private",
                    "signature": "walk(array $blocks, array $found): void",
                    "doc": "",
                    "shapes": [
                        "@param list<\\Minn\\Blocks\\Block> $blocks @param array<string, int> $found"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "list<\\Minn\\Blocks\\Block>",
                            "default": null,
                            "doc": "@param array<string, int> $found"
                        },
                        {
                            "name": "found",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 200,
                    "end": 209
                }
            ]
        },
        {
            "name": "Minn\\Content\\Emoji",
            "short": "Emoji",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Emoji.php",
            "lines": 68,
            "doc": "Emoji as the reference's mail and feeds carry them, from the list the\nreference ships (data/emoji.json, read from it): encode() turns each emoji\ncharacter into its entity; staticize() turns each listed sequence in the\ntext (outside tags, and outside code and pre) into a CDN image, longest\nsequence first. Text that already holds an entity is not encoded first;\nonce anything matched, the variation selectors left over are dropped.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "IGNORED",
                    "value": "array (   0 => 'code',   1 => 'pre', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "list",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "public",
                    "signature": "encode(string $text): string",
                    "doc": "Each emoji character in the text as its hexadecimal entity.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "staticize",
                    "static": true,
                    "visibility": "public",
                    "signature": "staticize(string $text, string $baseUrl, string $extension): string",
                    "doc": "The text with its emoji as images under $baseUrl (each file named for its code points, $extension after).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "baseUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extension",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "replaceInText",
                    "static": true,
                    "visibility": "private",
                    "signature": "replaceInText(string $text, array $images): string",
                    "doc": "The replacements made in text runs only, never inside a tag or a code or pre element. @param array<string, string> $images",
                    "shapes": [
                        "@param array<string, string> $images"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "images",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "list",
                    "static": true,
                    "visibility": "private",
                    "signature": "list(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{entities: list<string>, partials: list<string>}"
                    ],
                    "params": [],
                    "line": 80,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Content\\Excerpt",
            "short": "Excerpt",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Excerpt.php",
            "lines": 90,
            "doc": "The reference's generated excerpt, as captured from probe posts:\n\n- Only text-bearing blocks contribute. Containers (group, columns,\ncolumn, media-text) pass their allowed children through; anything not\non the list vanishes with everything inside it (code, details, buttons,\nimages, galleries, covers, dynamic blocks, and the nested list-item,\nso a modern list contributes nothing while a classic one does).\n- The text stops at the first <!--more--> (in a feed it runs on).\n- Block-level tags read as spaces; inline tags (and <br>) read as nothing.\n- Whitespace collapses, 55 words, an ellipsis when cut, wrapped in <p>,\ntexturized (a feed texturizes first, so its inline code stays raw). A hand-written excerpt skips the block filter.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\RenderState",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Texturize"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Front\\Renderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ALLOWED",
                    "value": "array (   0 => 'core/paragraph',   1 => 'core/heading',   2 => 'core/list',   3 => 'core/quote',   4 => 'core/pullquote',   5 => 'core/verse',   6 => 'core/preformatted',   7 => 'core/table',   8 => 'core/group',   9 => 'core/columns',   10 => 'core/column',   11 => 'core/media-text',   12 => 'core/html',   13 => 'core/more',   14 => 'core/freeform', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "INLINE",
                    "value": "array (   0 => 'a',   1 => 'abbr',   2 => 'b',   3 => 'bdi',   4 => 'bdo',   5 => 'br',   6 => 'cite',   7 => 'code',   8 => 'data',   9 => 'dfn',   10 => 'em',   11 => 'i',   12 => 'kbd',   13 => 'mark',   14 => 'q',   15 => 's',   16 => 'samp',   17 => 'small',   18 => 'span',   19 => 'strong',   20 => 'sub',   21 => 'sup',   22 => 'time',   23 => 'u',   24 => 'var',   25 => 'wbr',   26 => 'del',   27 => 'ins', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(Minn\\Content\\PostRecord $post): string",
                    "doc": "The more tag ends a listing's excerpt but not a feed's, and a feed\ntexturizes before the tags go (so inline code keeps straight quotes)\nwhere a listing texturizes the finished text.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "source",
                    "static": true,
                    "visibility": "private",
                    "signature": "source(Minn\\Content\\PostRecord $post): string",
                    "doc": "The stored excerpt, or the content's allowed markup.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "words",
                    "static": true,
                    "visibility": "private",
                    "signature": "words(string $source): string",
                    "doc": "The first 55 words with tags gone, an ellipsis when cut, empty for none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "recordRendered",
                    "static": true,
                    "visibility": "private",
                    "signature": "recordRendered(array $blocks): void",
                    "doc": "A generated excerpt drops the disallowed blocks first and renders the\nrest before trimming, so the allowed blocks count as rendered on the\npage: the stylesheet prints their block styles even when nothing of\ntheirs survives the trim.",
                    "shapes": [
                        "@param list<Block> $blocks"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "list<Block>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "allowedMarkup",
                    "static": true,
                    "visibility": "private",
                    "signature": "allowedMarkup(array $blocks): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 112
                }
            ]
        },
        {
            "name": "Minn\\Content\\Inventory",
            "short": "Inventory",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Inventory.php",
            "lines": 253,
            "doc": "Plugins, themes, must-use plugins, and drop-ins as they sit on disk.\nThe shapes match `wp plugin list` / `wp theme list` captured from the\nreference: name is the directory (or the drop-in filename), title and\nversion come from the file headers, status from the options.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Support\\FileHeaders",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\AssetUpdate",
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\PluginCommand",
                "Minn\\Cli\\ThemeCommand",
                "Minn\\Content\\PluginState",
                "Minn\\Ops\\InstalledSoftware",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Updates",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(string $contentDir, Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "contentDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 47,
                "end": 49
            },
            "cases": [],
            "constants": [
                {
                    "name": "DROPINS",
                    "value": "array (   0 => 'advanced-cache.php',   1 => 'db.php',   2 => 'db-error.php',   3 => 'fatal-error-handler.php',   4 => 'install.php',   5 => 'maintenance.php',   6 => 'object-cache.php',   7 => 'php-error.php',   8 => 'sunrise.php', )",
                    "doc": "Drop-in filenames at wp-content/ that hosting tools treat as WordPress drop-ins.",
                    "visibility": "private"
                },
                {
                    "name": "KNOWN_DROPINS",
                    "value": "array (   'advanced-cache.php' =>    array (     0 => 'Advanced caching plugin.',     1 => 'WP_CACHE',   ),   'db.php' =>    array (     0 => 'Custom database class.',     1 => true,   ),   'db-error.php' =>    array (     0 => 'Custom database error message.',     1 => true,   ),   'install.php' =>    array (     0 => 'Custom installation script.',     1 => true,   ),   'maintenance.php' =>    array (     0 => 'Custom maintenance message.',     1 => true,   ),   'object-cache.php' =>    array (     0 => 'External object cache.',     1 => true,   ),   'php-error.php' =>    array (     0 => 'Custom PHP error message.',     1 => true,   ),   'fatal-error-handler.php' =>    array (     0 => 'Custom PHP fatal error handler.',     1 => true,   ), )",
                    "doc": "The drop-ins a single site recognises, in the reference's order: the\nfile => its description and the constant that must be true for it to\nload (true when nothing gates it).",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "contentDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "plugins",
                    "static": false,
                    "visibility": "public",
                    "signature": "plugins(): array",
                    "doc": "Regular plugins, then must-use, then drop-ins, each group sorted by name.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 56,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "mustUse",
                    "static": false,
                    "visibility": "public",
                    "signature": "mustUse(): array",
                    "doc": "The mu-plugins folder's PHP files, each with its header.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 66,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "dropins",
                    "static": false,
                    "visibility": "public",
                    "signature": "dropins(): array",
                    "doc": "The drop-in files present in wp-content.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 101,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "themes",
                    "static": false,
                    "visibility": "public",
                    "signature": "themes(): array",
                    "doc": "Every theme folder with its style.css header.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 128,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "pluginFiles",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginFiles(): array",
                    "doc": "Every regular plugin's main file: relative \"dir/file.php\" (or\n\"file.php\" for a single-file plugin) to its absolute path.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 212,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "regularPlugins",
                    "static": false,
                    "visibility": "private",
                    "signature": "regularPlugins(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 161,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "mainPluginFile",
                    "static": true,
                    "visibility": "private",
                    "signature": "mainPluginFile(string $dir, string $slug): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 236,
                    "end": 251
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": true,
                    "visibility": "private",
                    "signature": "item(string $name, string $title, string $status, string $version, string|false $update, bool $auto): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "update",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "auto",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 267
                }
            ]
        },
        {
            "name": "Minn\\Content\\Links",
            "short": "Links",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Links.php",
            "lines": 102,
            "doc": "The links manager's table, as get_bookmarks and wp_insert_link read and\nwrite it (probe plugin-queue4). A query narrows by the ids included (which\nset aside every other narrowing), the ids excluded, the link categories\n(joined, so a link filed under two of them comes back twice, with the\njoin's columns), visibility and a search over the address, name and\ndescription; it sorts by one or more of the link's columns (name when none\nis known), ascending unless told otherwise.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 27
            },
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   0 => 'link_id',   1 => 'link_url',   2 => 'link_name',   3 => 'link_image',   4 => 'link_target',   5 => 'link_description',   6 => 'link_visible',   7 => 'link_owner',   8 => 'link_rating',   9 => 'link_updated',   10 => 'link_rel',   11 => 'link_notes',   12 => 'link_rss', )",
                    "doc": "The columns a link row holds, in the table's order.",
                    "visibility": "public"
                },
                {
                    "name": "ORDERS",
                    "value": "array (   'name' => 'link_name',   'url' => 'link_url',   'rating' => 'link_rating',   'id' => 'link_id',   'owner' => 'link_owner',   'visible' => 'link_visible',   'updated' => 'link_updated',   'notes' => 'link_notes',   'description' => 'link_description',   'rel' => 'link_rel',   'target' => 'link_target',   'image' => 'link_image',   'rss' => 'link_rss',   'length' => 'length',   'rand' => 'RAND()', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(int $id): ?array",
                    "doc": "A link's row, its values as strings the way the reference reads them. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "matching",
                    "static": false,
                    "visibility": "public",
                    "signature": "matching(array $args, array $categories, int $recentMinutes): array",
                    "doc": "The links a get_bookmarks call asks for.",
                    "shapes": [
                        "@param array<string, mixed> $args orderby, order, limit, hide_invisible, show_updated, include, exclude, search",
                        "@param list<int> $categories link category term ids, empty for any",
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "orderby, order, limit, hide_invisible, show_updated, include, exclude, search"
                        },
                        {
                            "name": "categories",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "link category term ids, empty for any"
                        },
                        {
                            "name": "recentMinutes",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": "how recent an update counts as recent, when show_updated asks"
                        }
                    ],
                    "line": 44,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "save",
                    "static": false,
                    "visibility": "public",
                    "signature": "save(int $id, array $fields): int",
                    "doc": "A link written: a new row when the id is 0, else that row's columns\nset. The id it was written under.",
                    "shapes": [
                        "@param array<string, mixed> $fields columns of FIELDS"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "columns of FIELDS"
                        }
                    ],
                    "line": 89,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(int $id): void",
                    "doc": "A link's row removed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "narrowing",
                    "static": false,
                    "visibility": "private",
                    "signature": "narrowing(array $args, array $categories): array",
                    "doc": "",
                    "shapes": [
                        "@return array{string, list<mixed>} the WHERE and its parameters when no ids are included"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "categories",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "strings",
                    "static": true,
                    "visibility": "private",
                    "signature": "strings(array $row): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $row @return array<string, string|null>"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, string|null>"
                        }
                    ],
                    "line": 109,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": true,
                    "visibility": "private",
                    "signature": "ids(mixed $list): array",
                    "doc": "",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "list",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 118
                }
            ]
        },
        {
            "name": "Minn\\Content\\MediaShortcodes",
            "short": "MediaShortcodes",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/MediaShortcodes.php",
            "lines": 187,
            "doc": "The [video] and [audio] shortcodes as the reference prints them: a\nplugin may take either over first (wp_*_shortcode_override, handed the\nshortcode's own attributes and its instance number), then the source by\nsrc or by each format's attribute (a file of another kind is only a\nlink; YouTube and Vimeo addresses are video of their own; with none,\nthe post's first attached video or audio), the player's attributes (a\nvideo no wider than the content, its height in proportion; the flags\nbare), each source numbered by the instance, a fallback link, and the\nclass, library and final HTML through their filters.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Escape",
                "Minn\\Support\\Flag"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "YOUTUBE",
                    "value": "'#^https?://(?:www\\\\.)?(?:youtube\\\\.com/watch|youtu\\\\.be/)#'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "VIMEO",
                    "value": "'#^https?://(.+\\\\.)?vimeo\\\\.com/.*#'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "video",
                    "static": true,
                    "visibility": "public",
                    "signature": "video(array|string $attr, string $content): ?string",
                    "doc": "[video]. @param array<string, mixed>|string $attr",
                    "shapes": [
                        "@param array<string, mixed>|string $attr"
                    ],
                    "params": [
                        {
                            "name": "attr",
                            "type": "array|string",
                            "shape": "array<string, mixed>|string",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "audio",
                    "static": true,
                    "visibility": "public",
                    "signature": "audio(array|string $attr, string $content): ?string",
                    "doc": "[audio]. @param array<string, mixed>|string $attr",
                    "shapes": [
                        "@param array<string, mixed>|string $attr"
                    ],
                    "params": [
                        {
                            "name": "attr",
                            "type": "array|string",
                            "shape": "array<string, mixed>|string",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "attached",
                    "static": true,
                    "visibility": "public",
                    "signature": "attached(string $type, mixed $post): array",
                    "doc": "get_attached_media: the post's attachments of a kind (\"video\", \"audio\", a MIME type), as the reference's children query finds them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "sources",
                    "static": true,
                    "visibility": "private",
                    "signature": "sources(array $atts, array $types, ?string $hosted, string $kind): array|string|null",
                    "doc": "The sources a shortcode names: the order they print in, the first\nfile, and the attachment when the post's own media stands in. A\nsrc of another kind answers as a link; nothing at all as null.",
                    "shapes": [
                        "@param array<string, mixed> $atts",
                        "@param list<string> $types",
                        "@return array{order: list<string>, file: string, attachment: ?\\WP_Post, atts: array<string, mixed>}|string|null"
                    ],
                    "params": [
                        {
                            "name": "atts",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hosted",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "anyOwnFormat",
                    "static": true,
                    "visibility": "private",
                    "signature": "anyOwnFormat(array $atts, array $types): bool",
                    "doc": "Whether any format attribute names a file of its own kind. @param array<string, mixed> $atts @param list<string> $types",
                    "shapes": [
                        "@param array<string, mixed> $atts @param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "atts",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $types"
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "sourceTags",
                    "static": true,
                    "visibility": "private",
                    "signature": "sourceTags(array $atts, array $order, int $instance, ?string $hosted): string",
                    "doc": "Each source as a source tag, numbered by the instance (src a hosted video's own type when it is one). @param array<string, mixed> $atts @param list<string> $order",
                    "shapes": [
                        "@param array<string, mixed> $atts @param list<string> $order"
                    ],
                    "params": [
                        {
                            "name": "atts",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $order"
                        },
                        {
                            "name": "order",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hosted",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "attributes(array $attributes, array $omitEmpty): string",
                    "doc": "The attributes as written: the flags bare when on, the empty ones left out. @param array<string, mixed> $attributes @param list<string> $omitEmpty",
                    "shapes": [
                        "@param array<string, mixed> $attributes @param list<string> $omitEmpty"
                    ],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $omitEmpty"
                        },
                        {
                            "name": "omitEmpty",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "fitted",
                    "static": true,
                    "visibility": "private",
                    "signature": "fitted(int $width, int $height): array",
                    "doc": "A video no wider than the content: wider, it takes the content's width and keeps its proportion. @return array{0: int, 1: int}",
                    "shapes": [
                        "@return array{0: int, 1: int}"
                    ],
                    "params": [
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 176
                },
                {
                    "routes": [],
                    "name": "library",
                    "static": true,
                    "visibility": "private",
                    "signature": "library(string $kind): string",
                    "doc": "The player library (wp_*_shortcode_library), its scripts and styles queued when it is the reference's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 187
                },
                {
                    "routes": [],
                    "name": "fallback",
                    "static": true,
                    "visibility": "private",
                    "signature": "fallback(string $file, string $library): string",
                    "doc": "The link a player without the library falls back to (wp_mediaelement_fallback).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "library",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 190,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "postId",
                    "static": true,
                    "visibility": "private",
                    "signature": "postId(): int",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 195,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "instance",
                    "static": true,
                    "visibility": "private",
                    "signature": "instance(string $kind): int",
                    "doc": "The shortcode's instance number this request, counted whether or not a plugin takes it over.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 201,
                    "end": 207
                }
            ]
        },
        {
            "name": "Minn\\Content\\MenuItem",
            "short": "MenuItem",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/MenuItem.php",
            "lines": 22,
            "doc": "One classic nav_menu_item, fields resolved from the post, its\n`_menu_item_*` meta, and the object it points at.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Content\\Menus",
                "Minn\\Rest\\MenuItemObject"
            ],
            "constructor": {
                "signature": "__construct(int $id, string $title, string $url, string $type, string $object, int $objectId, int $parent, int $menuOrder, string $target, array $classes, array $xfn, string $attrTitle, string $description, string $status, int $menuId, bool $invalid)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "id",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "title",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "type",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "objectId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parent",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "menuOrder",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "target",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "classes",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "xfn",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "attrTitle",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "description",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "status",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "menuId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "invalid",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 34
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "id",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "title",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "type",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "objectId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "parent",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "menuOrder",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "target",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "classes",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "xfn",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "attrTitle",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "description",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "status",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "menuId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "invalid",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Content\\Menus",
            "short": "Menus",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Menus.php",
            "lines": 511,
            "doc": "Classic nav_menu terms and nav_menu_item posts. The front uses these\nwhen a navigation block has no inner blocks and no wp_navigation post;\nREST serves the same rows as wp/v2/menus and menu-items.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Content\\MenuItem",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\Runtime\\Refusal",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Rest\\MenuObject",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\Services",
                "Minn\\Runtime\\MenuEvents"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Content\\Terms $terms, Minn\\Front\\Permalinks $permalinks, ?Minn\\Content\\PostWriter $writer = NULL, ?Minn\\Content\\Site $site = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writer",
                        "type": "?Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "?Minn\\Content\\Site",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 29
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writer",
                    "type": "?Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "?Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every nav_menu term.",
                    "shapes": [
                        "@return list<TermRecord>"
                    ],
                    "params": [],
                    "line": 37,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(int $id): ?Minn\\Content\\TermRecord",
                    "doc": "One menu by id, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "idByName",
                    "static": false,
                    "visibility": "public",
                    "signature": "idByName(string $name): ?int",
                    "doc": "The id of the menu with exactly this name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "items",
                    "static": false,
                    "visibility": "public",
                    "signature": "items(?int $menuId = NULL): array",
                    "doc": "The items of one menu, or of every menu, in menu order.",
                    "shapes": [
                        "@return list<MenuItem>"
                    ],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "fallbackBlocks",
                    "static": false,
                    "visibility": "public",
                    "signature": "fallbackBlocks(): array",
                    "doc": "Navigation-link blocks for the first classic menu. Empty when the\nsite has no nav_menu terms with items.",
                    "shapes": [
                        "@return list<Block>"
                    ],
                    "params": [],
                    "line": 95,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "toBlock",
                    "static": false,
                    "visibility": "public",
                    "signature": "toBlock(Minn\\Content\\MenuItem $item): Minn\\Blocks\\Block",
                    "doc": "A menu item as the navigation block it renders through (its classes: its own, then the menu item ones).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "Minn\\Content\\MenuItem",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "linkAttributes",
                    "static": true,
                    "visibility": "public",
                    "signature": "linkAttributes(array $item): array",
                    "doc": "A menu item's navigation link attributes, as the reference writes them\nfor a menu turned into blocks (probe navigation-blocks): its classes\njoined, its description, the object it links to (none for a custom\nlink) and that object's kind, its title as the label, a new tab for a\n_blank target, its XFN as rel, its attribute title, its URL.",
                    "shapes": [
                        "@param array<string, mixed> $item a menu item's fields, by their WordPress names",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "a menu item's fields, by their WordPress names"
                        }
                    ],
                    "line": 134,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "autoAdd",
                    "static": false,
                    "visibility": "public",
                    "signature": "autoAdd(int $menuId): bool",
                    "doc": "Whether this menu auto-adds new top-level pages, from the nav_menu_options blob.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 170
                },
                {
                    "routes": [],
                    "name": "locationsFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "locationsFor(int $menuId): array",
                    "doc": "Location slugs from the active theme's theme_mods that point at this menu.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "themeLocations",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeLocations(): array",
                    "doc": "The theme's registered locations mapped to menu ids, from theme_mods.",
                    "shapes": [
                        "@return array<string, int> location => menu term id"
                    ],
                    "params": [],
                    "line": 193,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "findItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "findItem(int $id): ?Minn\\Content\\MenuItem",
                    "doc": "One nav_menu_item by id, or null when it is missing or trashed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 318,
                    "end": 326
                },
                {
                    "routes": [],
                    "name": "refuseName",
                    "static": false,
                    "visibility": "public",
                    "signature": "refuseName(string $name, int $keeping = 0): ?Minn\\Runtime\\Refusal",
                    "doc": "Whether a name may be given to a menu. A menu keeps its own name; any\nother menu holding it refuses the write, and the refused id rides along\nso a caller can point at the menu in the way.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "keeping",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 333,
                    "end": 347
                },
                {
                    "routes": [],
                    "name": "createItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "createItem(array $fields): int",
                    "doc": "title: string,\nurl: string,\ntype: string,\nobject: string,\nobjectId: int,\nparent: int,\nmenuOrder: int,\ntarget: string,\nstatus: string,\nmenuId: int,\nattrTitle: string,\ndescription: string,\nauthorId: int,\nclasses?: list<string>,\nxfn?: string\n} $fields",
                    "shapes": [
                        "@param array{"
                    ],
                    "params": [
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 368,
                    "end": 414
                },
                {
                    "routes": [],
                    "name": "updateItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateItem(int $id, array $fields): void",
                    "doc": "Applies the given fields to one item, stored the way the reference stores them.",
                    "shapes": [
                        "@param array<string, mixed> $fields"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 421,
                    "end": 453
                },
                {
                    "routes": [],
                    "name": "itemsPointingAt",
                    "static": false,
                    "visibility": "public",
                    "signature": "itemsPointingAt(int $objectId, string $type): array",
                    "doc": "The ids of the menu items, in any menu or none, that point at an object of a kind (post_type, taxonomy). @return list<int>",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 456,
                    "end": 467
                },
                {
                    "routes": [],
                    "name": "appendPage",
                    "static": false,
                    "visibility": "public",
                    "signature": "appendPage(int $menuId, int $pageId, int $authorId): int",
                    "doc": "Adds a page to the end of a menu, titled by the page itself, as a menu set to add new pages takes it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pageId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authorId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 470,
                    "end": 481
                },
                {
                    "routes": [],
                    "name": "hydrate",
                    "static": false,
                    "visibility": "private",
                    "signature": "hydrate(array $row, ?int $knownMenuId): Minn\\Content\\MenuItem",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "knownMenuId",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 211,
                    "end": 267
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "private",
                    "signature": "meta(int $postId): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 270,
                    "end": 281
                },
                {
                    "routes": [],
                    "name": "menuIdOf",
                    "static": false,
                    "visibility": "private",
                    "signature": "menuIdOf(int $itemId): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "itemId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 283,
                    "end": 292
                },
                {
                    "routes": [],
                    "name": "classList",
                    "static": true,
                    "visibility": "private",
                    "signature": "classList(?string $blob): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 295,
                    "end": 302
                },
                {
                    "routes": [],
                    "name": "xfnList",
                    "static": true,
                    "visibility": "private",
                    "signature": "xfnList(?string $blob): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 305,
                    "end": 315
                },
                {
                    "routes": [],
                    "name": "writeMeta",
                    "static": false,
                    "visibility": "private",
                    "signature": "writeMeta(int $id, array $meta): void",
                    "doc": "The item's _menu_item_* meta, as the reference keeps it (the classes a\nlist; no title attribute, which is the excerpt).",
                    "shapes": [
                        "@param array<string, string|list<string>> $meta"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, string|list<string>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 489,
                    "end": 496
                },
                {
                    "routes": [],
                    "name": "originalParent",
                    "static": false,
                    "visibility": "private",
                    "signature": "originalParent(string $type, string $object, int $objectId): int",
                    "doc": "What an item stores as its parent post: the parent of the post or term it points at.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "object",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 499,
                    "end": 506
                },
                {
                    "routes": [],
                    "name": "content",
                    "static": true,
                    "visibility": "private",
                    "signature": "content(string $type, string $title, string $description): string",
                    "doc": "An item's content: its description, or a space for an item that names nothing of its own (as the reference keeps one).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 509,
                    "end": 512
                },
                {
                    "routes": [],
                    "name": "writer",
                    "static": false,
                    "visibility": "private",
                    "signature": "writer(): Minn\\Content\\PostWriter",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 514,
                    "end": 520
                },
                {
                    "routes": [],
                    "name": "site",
                    "static": false,
                    "visibility": "private",
                    "signature": "site(): Minn\\Content\\Site",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 522,
                    "end": 528
                }
            ]
        },
        {
            "name": "Minn\\Content\\MoreTag",
            "short": "MoreTag",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/MoreTag.php",
            "lines": 20,
            "doc": "The `<!--more-->` marker that splits a post into the part a listing shows\nand the part only the single view does. The marker may carry its own link\ntext; a second marker further down is ordinary content and stays where it\nis, as does the `<!--noteaser-->` flag that follows some of them.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "split",
                    "static": true,
                    "visibility": "public",
                    "signature": "split(string $content): array",
                    "doc": "The content on either side of a more tag, with the tag's own text.",
                    "shapes": [
                        "@return array{main: string, extended: string, more_text: string}"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 31
                }
            ]
        },
        {
            "name": "Minn\\Content\\NoteMarkers",
            "short": "NoteMarkers",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/NoteMarkers.php",
            "lines": 34,
            "doc": "The markers the block editor's notes leave in content: a mark element\nwhose class list holds \"wp-note\". A rendered block loses the marker and\nkeeps what it wrapped, nested markers too, an unclosed one losing only its\nopening tag; any other mark stays whole (probe comment-helpers).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "strip",
                    "static": true,
                    "visibility": "public",
                    "signature": "strip(string $html): string",
                    "doc": "Markup with every note marker's tags taken out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "isNote",
                    "static": true,
                    "visibility": "private",
                    "signature": "isNote(string $tag): bool",
                    "doc": "Whether a mark's opening tag carries the \"wp-note\" class.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Content\\ObjectLabels",
            "short": "ObjectLabels",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/ObjectLabels.php",
            "lines": 24,
            "doc": "A post type's or taxonomy's labels from its own and the defaults\n(_get_custom_object_labels, probe post-more): the name from its label when\nunset, the singular from the name, the admin bar from the singular (else\nthe object's name), the menu from the name, all items from the menu,\narchives from all items; then the defaults (the caller picks the flat or\nthe hierarchical set) under those, in the defaults' order.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "build",
                    "static": true,
                    "visibility": "public",
                    "signature": "build(array $labels, ?string $label, string $name, array $defaults): array",
                    "doc": "The labels, the object's own filled in by the rules above and laid over the defaults.",
                    "shapes": [
                        "@param array<string, mixed> $labels the object's own",
                        "@param array<string, mixed> $defaults key => the default for this object",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "labels",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the object's own"
                        },
                        {
                            "name": "label",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "defaults",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "key => the default for this object"
                        }
                    ],
                    "line": 24,
                    "end": 37
                }
            ]
        },
        {
            "name": "Minn\\Content\\Page",
            "short": "Page",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Page.php",
            "lines": 43,
            "doc": "One page of a listing: the rows on it and how many rows the whole\nlisting has, which is what pagination is counted from.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Front\\Renderer",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(array $posts, int $total)",
                "doc": "",
                "shapes": [
                    "@param list<PostRecord> $posts"
                ],
                "params": [
                    {
                        "name": "posts",
                        "type": "array",
                        "shape": "list<PostRecord>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "total",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 14,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "total",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "empty",
                    "static": true,
                    "visibility": "public",
                    "signature": "empty(): self",
                    "doc": "No rows and a total of zero.",
                    "shapes": [],
                    "params": [],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "isEmpty",
                    "static": false,
                    "visibility": "public",
                    "signature": "isEmpty(): bool",
                    "doc": "Whether the page holds no rows.",
                    "shapes": [],
                    "params": [],
                    "line": 27,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "count",
                    "static": false,
                    "visibility": "public",
                    "signature": "count(): int",
                    "doc": "How many rows are on this page.",
                    "shapes": [],
                    "params": [],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": false,
                    "visibility": "public",
                    "signature": "ids(): array",
                    "doc": "The ids of the rows on this page.",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "totalPages",
                    "static": false,
                    "visibility": "public",
                    "signature": "totalPages(int $perPage): int",
                    "doc": "How many pages the whole listing makes at this page size.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "perPage",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                }
            ]
        },
        {
            "name": "Minn\\Content\\PasswordGate",
            "short": "PasswordGate",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/PasswordGate.php",
            "lines": 75,
            "doc": "A password-protected post on the front end: its body is the password\nform, its excerpt a fixed sentence, its title prefixed, exactly as the\nreference shows them to a reader who has not entered the password.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\PortableHash",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Reader",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Front\\Renderer",
                "Minn\\Theme\\ClassicContent"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "EXCERPT",
                    "value": "'There is no excerpt because this is a protected post.'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "is",
                    "static": true,
                    "visibility": "public",
                    "signature": "is(Minn\\Content\\PostRecord $post): bool",
                    "doc": "True while the post has a password the reader's cookie does not match.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "cookieUnlocks",
                    "static": true,
                    "visibility": "public",
                    "signature": "cookieUnlocks(string $password, string $cookie): bool",
                    "doc": "Whether a wp-postpass cookie opens a post with this password. Only a\nhash in the setting the reference writes (\"$P$B\") is tried, as the\nreference tries it: a cookie naming its own work factor could\notherwise make one request hash up to 2^30 times.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "cookie",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "title",
                    "static": true,
                    "visibility": "public",
                    "signature": "title(Minn\\Content\\PostRecord $post): string",
                    "doc": "\"Protected: \" for a password, \"Private: \" for a private post, as the reference prefixes titles.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "form",
                    "static": true,
                    "visibility": "public",
                    "signature": "form(Minn\\Content\\PostRecord $post, string $siteUrl, string $permalink, string $invalid = ''): string",
                    "doc": "The form, with the reference's stray closing p after the hidden field;\nwith the message a wrong password earns ($invalid, see invalid()) above\nthe field and named by it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invalid",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "formForReader",
                    "static": true,
                    "visibility": "public",
                    "signature": "formForReader(Minn\\Content\\PostRecord $post, string $siteUrl, string $permalink): string",
                    "doc": "The form as the current reader sees it: with the wrong-password message when their own form sent them back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "invalid",
                    "static": true,
                    "visibility": "public",
                    "signature": "invalid(string $permalink, string $referer, string $cookie, Closure $post): string",
                    "doc": "The message over the form for a reader the post's own page sent back\nwith a password cookie set (the referer is exactly its address), as\nplugins word it (the_password_form_incorrect_password); '' for anyone\nelse. The cookie is not checked: the form only shows while it fails.\n$post gives the post the filter is handed, asked for only then.",
                    "shapes": [
                        "@param \\Closure(): mixed $post"
                    ],
                    "params": [
                        {
                            "name": "permalink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "referer",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "cookie",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Closure",
                            "shape": "\\Closure(): mixed",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 90
                }
            ]
        },
        {
            "name": "Minn\\Content\\PersonalData",
            "short": "PersonalData",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/PersonalData.php",
            "lines": 36,
            "doc": "Personal data as the privacy tools hand it over (probe privacy): an\nexported item is a labelled group of name and value rows in which a row\nwithout a value is left out, and an export file is old once it was last\nwritten before the cut-off (the folder's index.php and hidden files are\nnever old).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "item",
                    "static": true,
                    "visibility": "public",
                    "signature": "item(string $groupId, string $groupLabel, string $groupDescription, string $itemId, array $rows): array",
                    "doc": "One exported item, its rows in the order given, a row whose value is empty left out.",
                    "shapes": [
                        "@param array<string, mixed> $rows name => value",
                        "@return array{group_id: string, group_label: string, group_description: string, item_id: string, data: list<array{name: string, value: mixed}>}"
                    ],
                    "params": [
                        {
                            "name": "groupId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "groupLabel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "groupDescription",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "itemId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "name => value"
                        }
                    ],
                    "line": 22,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "expiredExports",
                    "static": true,
                    "visibility": "public",
                    "signature": "expiredExports(string $dir, int $before): array",
                    "doc": "The export files in $dir last written before $before.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 48
                }
            ]
        },
        {
            "name": "Minn\\Content\\Playlist",
            "short": "Playlist",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Playlist.php",
            "lines": 25,
            "doc": "The [playlist] shortcode's markup as the reference prints it (probe\nplugin-queue5): the player for audio (with the current-item box) or for\nvideo (with its height), the next and previous controls, a noscript list\nof links to the files, and the tracks as JSON for wp-playlist; and the\ntwo Underscore templates the script draws them with\n(data/playlist-templates.html).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "markup",
                    "static": true,
                    "visibility": "public",
                    "signature": "markup(string $type, string $style, int $width, int $height, array $links, string $json): string",
                    "doc": "The player and its data.",
                    "shapes": [
                        "@param list<string> $links one link per track, for the noscript list"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "style",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "links",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "one link per track, for the noscript list"
                        },
                        {
                            "name": "json",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": "the type, the flags and the tracks, encoded"
                        }
                    ],
                    "line": 23,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "templates",
                    "static": true,
                    "visibility": "public",
                    "signature": "templates(string $quoted): string",
                    "doc": "The two templates, each title wrapped in the quoting format given (its %s takes the title placeholder).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "quoted",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 38
                }
            ]
        },
        {
            "name": "Minn\\Content\\PluginState",
            "short": "PluginState",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/PluginState.php",
            "lines": 72,
            "doc": "Switching plugins on and off: a WordPress plugin file goes through the\nreference's activation and deactivation (PluginActivation: requirements,\nthe plugin loaded, its hooks, the sorted active_plugins list); a Minn\nextension joins or leaves minn_active_extensions, and deactivating one\nalso releases, silently, the plugin files it stood in for. The REST\ntoggle and the CLI verbs share this so they cannot drift; both run with\nthe runtime booted.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Site",
                "Minn\\Extension\\Loader",
                "Minn\\Extension\\Manifest",
                "Minn\\Json",
                "Minn\\Runtime\\PluginActivation",
                "Minn\\Runtime\\Refusal",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\PluginCommand",
                "Minn\\Rest\\PluginsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Content\\Inventory $inventory, Minn\\Extension\\Loader $extensions)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "inventory",
                        "type": "Minn\\Content\\Inventory",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "extensions",
                        "type": "Minn\\Extension\\Loader",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "inventory",
                    "type": "Minn\\Content\\Inventory",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "extensions",
                    "type": "Minn\\Extension\\Loader",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(string $slug): Minn\\Extension\\Manifest|string|null",
                    "doc": "The relative \"dir/file.php\" of a WordPress plugin, else the extension\nfor a slug, else null. A folder carrying both records in\nactive_plugins like the reference does (the loader counts its own\nfolder there as active); only a pure extension uses the engine's list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "isActive",
                    "static": false,
                    "visibility": "public",
                    "signature": "isActive(Minn\\Extension\\Manifest|string $plugin): bool",
                    "doc": "Whether a plugin, by file, or a Minn extension is active.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "Minn\\Extension\\Manifest|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "activate",
                    "static": false,
                    "visibility": "public",
                    "signature": "activate(Minn\\Extension\\Manifest|string $plugin): ?Minn\\Runtime\\Refusal",
                    "doc": "Records a plugin or an extension as active, in the option each kind\nuses; null, or why a plugin was refused (unexpected_output leaves it\nactive, as the reference does).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "Minn\\Extension\\Manifest|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "deactivate",
                    "static": false,
                    "visibility": "public",
                    "signature": "deactivate(Minn\\Extension\\Manifest|string $plugin): void",
                    "doc": "Records a plugin, by file, or a Minn extension as inactive; an extension also deactivates the plugins it replaced.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "Minn\\Extension\\Manifest|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "ownWithout",
                    "static": false,
                    "visibility": "private",
                    "signature": "ownWithout(Minn\\Extension\\Manifest $plugin): array",
                    "doc": "The active extensions minus one. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "Minn\\Extension\\Manifest",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 94
                }
            ]
        },
        {
            "name": "Minn\\Content\\PostClasses",
            "short": "PostClasses",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/PostClasses.php",
            "lines": 52,
            "doc": "The class list a post carries on its article element, in the reference's\norder: caller extras, identity, type, status, format, password state,\nthumbnail, sticky, hentry, then one class per term of every public\ntaxonomy (post_tag reads as \"tag-\"; the format's term counts too, as\npost_format-post-format-aside; probe post-template-remaining).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Theme\\QueryClasses"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "build",
                    "static": true,
                    "visibility": "public",
                    "signature": "build(array $post, array $extra, ?string $format, bool $thumbnail, bool $sticky, bool $passwordRequired, bool $hasPassword, array $terms): array",
                    "doc": "The class list a post carries on its article element, in the reference's order.",
                    "shapes": [
                        "@param list<string> $extra",
                        "@param list<array{taxonomy: string, slug: string, term_id: int}> $terms",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "thumbnail",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sticky",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "passwordRequired",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hasPassword",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "list<array{taxonomy: string, slug: string, term_id: int}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "htmlClass",
                    "static": true,
                    "visibility": "public",
                    "signature": "htmlClass(string $value): string",
                    "doc": "The reference keeps letters, digits, hyphens and underscores in a class name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 64
                }
            ]
        },
        {
            "name": "Minn\\Content\\PostRecord",
            "short": "PostRecord",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/PostRecord.php",
            "lines": 156,
            "doc": "One row of the posts table, read by name. The columns keep their\nWordPress spelling on the way in (row()) and get plain names here:\n$post->title, $post->slug, $post->status. A record is built from a row\nand can hand the row back, so a writer or a REST shaper that still\nworks in columns is not disturbed.\n\nArray access is the migration bridge: code that still reads\n$post['post_title'] keeps working while it is moved over. New code\nreads the properties. The style suite counts the bracket reads down.",
            "implements": [
                "ArrayAccess"
            ],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostStatus"
            ],
            "usedBy": [
                "Minn\\Blocks\\Context",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Content\\Excerpt",
                "Minn\\Content\\Page",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\PostStatus",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Posts",
                "Minn\\Engine",
                "Minn\\Extension\\SeamRunner",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\Canonical",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\Resolution",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\RuleRoutes",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Front\\SingleQueries",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Rest\\RenderedFields",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Runtime\\CommentCloser",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\PostSave",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\UserStyles"
            ],
            "constructor": {
                "signature": "__construct(int $id, int $authorId, string $date, string $dateGmt, string $content, string $title, string $excerpt, string $status, string $commentStatus, string $pingStatus, string $password, string $slug, string $modified, string $modifiedGmt, int $parentId, string $guid, int $menuOrder, string $type, string $mimeType, int $commentCount, array $row)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed> $row"
                ],
                "params": [
                    {
                        "name": "id",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "authorId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "date",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "dateGmt",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "content",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "title",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "excerpt",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "status",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "commentStatus",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "pingStatus",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "password",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "slug",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "modified",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "modifiedGmt",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parentId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "guid",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "menuOrder",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "type",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "mimeType",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "commentCount",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "row",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 26,
                "end": 49
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "id",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "authorId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "date",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "dateGmt",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "content",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "title",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "excerpt",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "status",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "commentStatus",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "pingStatus",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "password",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "slug",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "modified",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "modifiedGmt",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "parentId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "guid",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "menuOrder",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "type",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "mimeType",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "commentCount",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "row",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromRow",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRow(array $row): self",
                    "doc": "A record from a posts row; a missing column reads as empty.",
                    "shapes": [
                        "@param array<string, mixed> $row a posts-table row, joined columns welcome"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "a posts-table row, joined columns welcome"
                        }
                    ],
                    "line": 56,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "fromRows",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRows(array $rows): array",
                    "doc": "A record for every row, in order.",
                    "shapes": [
                        "@param list<array<string, mixed>> $rows @return list<self>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "@return list<self>"
                        }
                    ],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "row",
                    "static": false,
                    "visibility": "public",
                    "signature": "row(): array",
                    "doc": "The stored row, for the writers and shapers that still spell columns.\n\nThe row as the table holds it, joined columns and all.",
                    "shapes": [],
                    "params": [],
                    "line": 98,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": false,
                    "visibility": "public",
                    "signature": "status(): ?Minn\\Content\\PostStatus",
                    "doc": "The status as an enum case, or null for a status only a plugin knows.",
                    "shapes": [],
                    "params": [],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "isPublished",
                    "static": false,
                    "visibility": "public",
                    "signature": "isPublished(): bool",
                    "doc": "Published, and so public.",
                    "shapes": [],
                    "params": [],
                    "line": 110,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "isLive",
                    "static": false,
                    "visibility": "public",
                    "signature": "isLive(): bool",
                    "doc": "Publish, future or private: it counts, it links, it is not a draft.",
                    "shapes": [],
                    "params": [],
                    "line": 116,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "isTrashed",
                    "static": false,
                    "visibility": "public",
                    "signature": "isTrashed(): bool",
                    "doc": "In the trash.",
                    "shapes": [],
                    "params": [],
                    "line": 122,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "isProtected",
                    "static": false,
                    "visibility": "public",
                    "signature": "isProtected(): bool",
                    "doc": "Behind a password.",
                    "shapes": [],
                    "params": [],
                    "line": 128,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "isPage",
                    "static": false,
                    "visibility": "public",
                    "signature": "isPage(): bool",
                    "doc": "A page.",
                    "shapes": [],
                    "params": [],
                    "line": 134,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "isAttachment",
                    "static": false,
                    "visibility": "public",
                    "signature": "isAttachment(): bool",
                    "doc": "An attachment.",
                    "shapes": [],
                    "params": [],
                    "line": 140,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "column",
                    "static": false,
                    "visibility": "public",
                    "signature": "column(string $name): mixed",
                    "doc": "One stored column by its database name, or null.\n\nA joined column, or any column by its table name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 150,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "offsetExists",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetExists(mixed $offset): bool",
                    "doc": "The migration bridge: the record answers to its column names the way the row did.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "offsetGet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetGet(mixed $offset): mixed",
                    "doc": "The migration bridge: one column by its stored name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "offsetSet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetSet(mixed $offset, mixed $value): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "offsetUnset",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetUnset(mixed $offset): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 174,
                    "end": 177
                }
            ]
        },
        {
            "name": "Minn\\Content\\PostSlugs",
            "short": "PostSlugs",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/PostSlugs.php",
            "lines": 75,
            "doc": "Which slug a live post may take beside the others, as the reference\nsettles it (probe insert-defaults). A flat type's slugs are its own: a\npost, a page and a plugin's type may share one. A hierarchical type's\nare its own and its attachments' under the same parent. An attachment's\nare every post's. Never free: the feed names and embed; for a\nhierarchical type, a number or a page number (2, page2); for posts, a\nnumber a date archive would answer to: any number when the permalink\nstructure begins with the post name, a month (below 13) when the post\nname follows the year, a day (below 32) when it follows the month. A post\nkeeps a number it already has. A taken slug gets the first free -2, -3\nform, cut (and stripped of a trailing hyphen) to fit the column's 200\ncharacters. The slug is taken as given, not sanitized.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Content\\PostWriter",
                "Minn\\Runtime\\PostSave"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 32
            },
            "cases": [],
            "constants": [
                {
                    "name": "LENGTH",
                    "value": "200",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "FEEDS",
                    "value": "array (   0 => 'feed',   1 => 'rdf',   2 => 'rss',   3 => 'rss2',   4 => 'atom', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "unique",
                    "static": false,
                    "visibility": "public",
                    "signature": "unique(string $slug, int $excludeId, string $type, int $parent, ?Closure $bad = NULL): string",
                    "doc": "The slug, or its first free numbered form.",
                    "shapes": [
                        "@param Closure(string): bool|null $bad a plugin's say over the slug asked for (the bad-slug filters), asked last"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "excludeId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bad",
                            "type": "?Closure",
                            "shape": "Closure(string): bool|null",
                            "default": "NULL",
                            "doc": "a plugin's say over the slug asked for (the bad-slug filters), asked last"
                        }
                    ],
                    "line": 39,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "taken",
                    "static": false,
                    "visibility": "private",
                    "signature": "taken(string $slug, int $excludeId, string $type, int $parent): bool",
                    "doc": "Whether another post in the slug's scope has it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "excludeId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "reserved",
                    "static": false,
                    "visibility": "private",
                    "signature": "reserved(string $slug, int $excludeId, string $type): bool",
                    "doc": "Whether the slug names something else: a feed, embeds, a page number, a date archive.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "excludeId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "hierarchical",
                    "static": false,
                    "visibility": "private",
                    "signature": "hierarchical(string $type): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 98
                }
            ]
        },
        {
            "name": "Minn\\Content\\PostStatus",
            "short": "PostStatus",
            "namespace": "Minn\\Content",
            "kind": "enum",
            "file": "public/minn/src/Minn/Content/PostStatus.php",
            "lines": 42,
            "doc": "The statuses a post row can hold; the value is the column's own spelling.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord"
            ],
            "usedBy": [
                "Minn\\Content\\PostRecord",
                "Minn\\Rest\\PostsWriteController"
            ],
            "constructor": null,
            "cases": [
                {
                    "name": "Publish",
                    "value": "publish",
                    "doc": ""
                },
                {
                    "name": "Draft",
                    "value": "draft",
                    "doc": ""
                },
                {
                    "name": "Pending",
                    "value": "pending",
                    "doc": ""
                },
                {
                    "name": "Private",
                    "value": "private",
                    "doc": ""
                },
                {
                    "name": "Future",
                    "value": "future",
                    "doc": ""
                },
                {
                    "name": "Trash",
                    "value": "trash",
                    "doc": ""
                },
                {
                    "name": "Inherit",
                    "value": "inherit",
                    "doc": ""
                },
                {
                    "name": "AutoDraft",
                    "value": "auto-draft",
                    "doc": ""
                }
            ],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(Minn\\Content\\PostRecord|array $row): ?self",
                    "doc": "A row's status, or null for a value no enum case spells (a plugin's own status).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "row",
                            "type": "Minn\\Content\\PostRecord|array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "isLive",
                    "static": false,
                    "visibility": "public",
                    "signature": "isLive(): bool",
                    "doc": "Publish, future and private are live: they count, they link, they are not drafts.",
                    "shapes": [],
                    "params": [],
                    "line": 26,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "isPublic",
                    "static": false,
                    "visibility": "public",
                    "signature": "isPublic(): bool",
                    "doc": "Whether the status shows the post to anonymous readers.",
                    "shapes": [],
                    "params": [],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "values",
                    "static": true,
                    "visibility": "public",
                    "signature": "values(array $statuses): array",
                    "doc": "The stored strings of these statuses.",
                    "shapes": [
                        "@param list<self> $statuses @return list<string> the column values, for a query"
                    ],
                    "params": [
                        {
                            "name": "statuses",
                            "type": "array",
                            "shape": "list<self>",
                            "default": null,
                            "doc": "@return list<string> the column values, for a query"
                        }
                    ],
                    "line": 45,
                    "end": 48
                }
            ]
        },
        {
            "name": "Minn\\Content\\PostWriter",
            "short": "PostWriter",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/PostWriter.php",
            "lines": 503,
            "doc": "Every write to the posts table and its satellites: rows, meta, term\nlinks with the published counts the reference trusts on read, sticky\nand format side effects, and revision snapshots.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\PostSlugs",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Content\\Slug",
                "Minn\\Db",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\EditorController",
                "Minn\\Content\\Menus",
                "Minn\\Content\\Revisions",
                "Minn\\Cron\\Cron",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Services",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\PostInsert",
                "Minn\\Runtime\\TermWriter",
                "Minn\\Theme\\TemplateWriter",
                "Minn\\Theme\\UserStyles"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 30
            },
            "cases": [],
            "constants": [
                {
                    "name": "FLOATING",
                    "value": "array (   0 => 'draft',   1 => 'pending',   2 => 'auto-draft', )",
                    "doc": "The statuses whose post may have a floating date (no GMT date yet).",
                    "visibility": "public"
                },
                {
                    "name": "ZERO_DATE",
                    "value": "'0000-00-00 00:00:00'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "LENGTHS",
                    "value": "array (   'post_status' => 20,   'comment_status' => 20,   'ping_status' => 20,   'post_password' => 255,   'post_name' => 200,   'guid' => 255,   'post_type' => 20,   'post_mime_type' => 100, )",
                    "doc": "The posts table's short text columns, cut to fit as the reference's database layer cuts them.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "hasTerm",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasTerm(string $taxonomy, int $termId): bool",
                    "doc": "Whether a term of the taxonomy has the id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "insert",
                    "static": false,
                    "visibility": "public",
                    "signature": "insert(array $columns): int",
                    "doc": "Inserts a posts row from column => value pairs and returns the new id.",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(int $id, array $columns): void",
                    "doc": "Sets the given columns on one post; nothing happens for none.",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "setStatus",
                    "static": false,
                    "visibility": "public",
                    "signature": "setStatus(int $id, string $status): void",
                    "doc": "Changes one post's status.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "setType",
                    "static": false,
                    "visibility": "public",
                    "signature": "setType(int $id, string $type): bool",
                    "doc": "Moves a post to another type, leaving it alone when it is already there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "setMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "setMeta(int $id, string $key, string $value): void",
                    "doc": "Sets one meta value, inserting the row when the key is new.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "floating",
                    "static": true,
                    "visibility": "public",
                    "signature": "floating(Minn\\Content\\PostRecord $post): bool",
                    "doc": "Whether a post's date floats: never given one, it is still a draft or pending with no GMT date.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "addMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "addMeta(int $id, string $key, string $value): void",
                    "doc": "Adds a meta row even when the key already has one (a non-unique key).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "rememberOld",
                    "static": false,
                    "visibility": "public",
                    "signature": "rememberOld(int $id, string $key, string $was, string $now): void",
                    "doc": "Keeps a published post's previous slug or date on record\n(_wp_old_slug, _wp_old_date) so its old address still finds it: the\nvalue it moves to stops being an old one, the value it leaves becomes\none, once.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "was",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "ensureCategory",
                    "static": false,
                    "visibility": "public",
                    "signature": "ensureCategory(int $id): void",
                    "doc": "Gives a post the site's default category when it has none, as every save of a post does in the reference.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "trash",
                    "static": false,
                    "visibility": "public",
                    "signature": "trash(Minn\\Content\\PostRecord $post): void",
                    "doc": "The row of a post moving to the trash, as the reference writes it: the\nslug gains __trashed, the modified time moves, a floating draft's date\nsettles, a post keeps a category, and the published counts follow. What\nthe trash keeps for the way back (the status, the time, the slug it\nhad) is meta the caller adds, and the revision comes from the save.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "deleteMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteMeta(int $id, string $key): void",
                    "doc": "Removes every meta row with this key from a post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 163
                },
                {
                    "routes": [],
                    "name": "uniqueSlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "uniqueSlug(string $desired, int $excludeId, string $type = 'post', int $parent = 0): string",
                    "doc": "A free slug for the desired text, sanitized first, in the type's scope (see PostSlugs).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "desired",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "excludeId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": "'post'",
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 166,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "slugs",
                    "static": false,
                    "visibility": "public",
                    "signature": "slugs(): Minn\\Content\\PostSlugs",
                    "doc": "The rules a live post's slug is settled by.",
                    "shapes": [],
                    "params": [],
                    "line": 172,
                    "end": 175
                },
                {
                    "routes": [],
                    "name": "setTerms",
                    "static": false,
                    "visibility": "public",
                    "signature": "setTerms(int $id, string $taxonomy, array $termIds): void",
                    "doc": "Replaces a post's links in one taxonomy and refreshes that taxonomy's counts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termIds",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "taxonomiesOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomiesOf(int $id): array",
                    "doc": "The taxonomies a post has terms in.",
                    "shapes": [
                        "@return list<string> the distinct taxonomies a post has links in"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 217,
                    "end": 226
                },
                {
                    "routes": [],
                    "name": "recountTaxonomiesOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "recountTaxonomiesOf(int $id): void",
                    "doc": "Recounts every term the post is in, after a status change.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 229,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "recount",
                    "static": false,
                    "visibility": "public",
                    "signature": "recount(string $taxonomy): void",
                    "doc": "term_taxonomy.count is stored and trusted on read, so every status change refreshes it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "isSticky",
                    "static": false,
                    "visibility": "public",
                    "signature": "isSticky(int $id): bool",
                    "doc": "Whether the post is in the sticky_posts option.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 250,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "stick",
                    "static": false,
                    "visibility": "public",
                    "signature": "stick(int $id): void",
                    "doc": "Puts a post on the sticky list, then post_stuck when it was not on it (probe rest-sticky).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 265
                },
                {
                    "routes": [],
                    "name": "unstick",
                    "static": false,
                    "visibility": "public",
                    "signature": "unstick(int $id): void",
                    "doc": "Takes a post off the sticky list, then post_unstuck when it was on it (probe rest-sticky).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 268,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "setFormat",
                    "static": false,
                    "visibility": "public",
                    "signature": "setFormat(int $id, string $format): void",
                    "doc": "Assigns (or clears) the post-format term, creating it on first use.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 297,
                    "end": 319
                },
                {
                    "routes": [],
                    "name": "applyExtendedFields",
                    "static": false,
                    "visibility": "public",
                    "signature": "applyExtendedFields(int $id, array $body, string $type): void",
                    "doc": "The side effects shared by create and update: sticky, format, featured media.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 322,
                    "end": 338
                },
                {
                    "routes": [],
                    "name": "applyCoreMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "applyCoreMeta(int $id, array $body, string $type): void",
                    "doc": "The meta core registers, written directly when no plugins are loaded: footnotes, and a pattern's sync status.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 341,
                    "end": 349
                },
                {
                    "routes": [],
                    "name": "applyTerms",
                    "static": false,
                    "visibility": "public",
                    "signature": "applyTerms(int $id, array $body): void",
                    "doc": "Assigns categories, tags, and pattern categories from a write body, replacing existing links.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 352,
                    "end": 357
                },
                {
                    "routes": [],
                    "name": "requestedTerms",
                    "static": true,
                    "visibility": "public",
                    "signature": "requestedTerms(array $body, ?array $map = NULL): array",
                    "doc": "The terms a REST body names, by taxonomy: categories, tags, and pattern\ncategories, each only when the body has the field.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@param array<string, string>|null $map REST field => taxonomy; the core taxonomies when null",
                        "@return array<string, list<int>>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "map",
                            "type": "?array",
                            "shape": "array<string, string>|null",
                            "default": "NULL",
                            "doc": "REST field => taxonomy; the core taxonomies when null"
                        }
                    ],
                    "line": 367,
                    "end": 376
                },
                {
                    "routes": [],
                    "name": "maybeSaveRevision",
                    "static": false,
                    "visibility": "public",
                    "signature": "maybeSaveRevision(int $id, int $userId): void",
                    "doc": "Snapshots the post's NEW state as a revision exactly when the\nreference would: compared against the latest revision, identical\ncontent-bearing fields add nothing, and the first update always\nsnapshots.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 384,
                    "end": 392
                },
                {
                    "routes": [],
                    "name": "revisionColumns",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisionColumns(int $id, int $userId): ?array",
                    "doc": "The row of the revision a post's current state calls for, or null\nwhen it calls for none (an unrevisioned type, or nothing changed\nsince the latest revision).",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 428,
                    "end": 470
                },
                {
                    "routes": [],
                    "name": "insertRevision",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertRevision(array $columns): int",
                    "doc": "Writes a revision row and gives it its guid; returns its id. @param array<string, mixed> $columns",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 473,
                    "end": 478
                },
                {
                    "routes": [],
                    "name": "reparentChildren",
                    "static": false,
                    "visibility": "public",
                    "signature": "reparentChildren(int $id, int $parent, array $types): void",
                    "doc": "Moves a deleted post's children of the given types to another parent, the way the reference keeps pages and attachments attached. @param list<string> $types",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 482,
                    "end": 487
                },
                {
                    "routes": [],
                    "name": "reassignAuthor",
                    "static": false,
                    "visibility": "public",
                    "signature": "reassignAuthor(int $from, int $to): void",
                    "doc": "Moves every post of one author to another.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 490,
                    "end": 493
                },
                {
                    "routes": [],
                    "name": "db",
                    "static": false,
                    "visibility": "public",
                    "signature": "db(): Minn\\Db",
                    "doc": "The database door this writer writes through, for a caller wrapping several of its verbs in one transaction.",
                    "shapes": [],
                    "params": [],
                    "line": 496,
                    "end": 499
                },
                {
                    "routes": [],
                    "name": "destroy",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroy(int $id): void",
                    "doc": "Hard-deletes a post with its revisions and its meta.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 502,
                    "end": 517
                },
                {
                    "routes": [],
                    "name": "fit",
                    "static": true,
                    "visibility": "private",
                    "signature": "fit(array $columns): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $columns @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 178,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "announceSticky",
                    "static": false,
                    "visibility": "private",
                    "signature": "announceSticky(string $hook, int $id): void",
                    "doc": "Inside a request: fires post_stuck or post_unstuck.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 279,
                    "end": 284
                },
                {
                    "routes": [],
                    "name": "saveSticky",
                    "static": false,
                    "visibility": "private",
                    "signature": "saveSticky(array $ids): void",
                    "doc": "",
                    "shapes": [
                        "@param list<int> $ids"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 287,
                    "end": 294
                },
                {
                    "routes": [],
                    "name": "revisionsToKeep",
                    "static": true,
                    "visibility": "private",
                    "signature": "revisionsToKeep(): int",
                    "doc": "How many revisions a post keeps without plugins: WP_POST_REVISIONS, all (-1) when unset or true.",
                    "shapes": [],
                    "params": [],
                    "line": 395,
                    "end": 399
                },
                {
                    "routes": [],
                    "name": "pruneRevisions",
                    "static": false,
                    "visibility": "private",
                    "signature": "pruneRevisions(int $id, int $keep): void",
                    "doc": "The oldest revisions past the limit removed, with their meta; autosaves stay.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "keep",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 402,
                    "end": 419
                }
            ]
        },
        {
            "name": "Minn\\Content\\Posts",
            "short": "Posts",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Posts.php",
            "lines": 553,
            "doc": "Reads over the posts table. A post comes back as a PostRecord; a listing\nis the main query's (WP_Query); rendering and escaping happen elsewhere.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\RowCache",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SiteController",
                "Minn\\Auth\\Capabilities",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\ImageTags",
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\Menus",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\SiteIcon",
                "Minn\\Cron\\Cron",
                "Minn\\Engine",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\Archives",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\RuleRoutes",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Front\\SingleQueries",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\Subjects",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Runtime\\MenuEvents",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\QueryClasses",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\UserStyles"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 17
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(int $id): ?Minn\\Content\\PostRecord",
                    "doc": "The post with this id, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "prime",
                    "static": false,
                    "visibility": "public",
                    "signature": "prime(array $ids, array $taxonomies = array ( )): void",
                    "doc": "Reads a list's posts, their meta and their terms in the given\ntaxonomies in one query each, as update_post_caches does, so the\nlist's rendering reads none of them again.",
                    "shapes": [
                        "@param list<int> $ids",
                        "@param list<string> $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "rememberRows",
                    "static": false,
                    "visibility": "public",
                    "signature": "rememberRows(array $rows): void",
                    "doc": "Keeps rows a query already read (WP_Query's whole posts), so priming\nthose posts reads them no second time.",
                    "shapes": [
                        "@param list<array<string, mixed>> $rows"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "primeRows",
                    "static": false,
                    "visibility": "public",
                    "signature": "primeRows(array $ids): void",
                    "doc": "Reads the rows of the posts not read yet, in one query. @param list<int> $ids",
                    "shapes": [
                        "@param list<int> $ids"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "primeMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "primeMeta(array $ids): void",
                    "doc": "Reads the meta of the posts whose meta is not read yet, in one query (update_post_meta_cache). @param list<int> $ids",
                    "shapes": [
                        "@param list<int> $ids"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "primeTerms",
                    "static": false,
                    "visibility": "public",
                    "signature": "primeTerms(array $ids, array $taxonomies): void",
                    "doc": "Reads the posts' terms in the given taxonomies, in one query, for the\nposts some of whose taxonomies are not read yet.",
                    "shapes": [
                        "@param list<int> $ids",
                        "@param list<string> $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "findByName",
                    "static": false,
                    "visibility": "public",
                    "signature": "findByName(string $name, array $types): ?Minn\\Content\\PostRecord",
                    "doc": "The post with this slug among the given types; published only unless asked otherwise.",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "findByNameAnyStatus",
                    "static": false,
                    "visibility": "public",
                    "signature": "findByNameAnyStatus(string $name, array $types): ?Minn\\Content\\PostRecord",
                    "doc": "The post with this slug among the given types in any status but trash, or null. @param list<string> $types",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "byOldSlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "byOldSlug(string $slug, array $types): ?Minn\\Content\\PostRecord",
                    "doc": "The post that once answered to the slug: every former slug stays in\n`_wp_old_slug` meta, and the reference redirects it to the current\nlink whatever the post's status (a draft or trashed post goes to\nits `?p=` form).",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 173,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "pageByPath",
                    "static": false,
                    "visibility": "public",
                    "signature": "pageByPath(array $segments): ?Minn\\Content\\PostRecord",
                    "doc": "Walks a page hierarchy: [\"sample-page\", \"docs\"] finds the page named\ndocs whose parent is named sample-page at the root.",
                    "shapes": [
                        "@param list<string> $segments"
                    ],
                    "params": [
                        {
                            "name": "segments",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 190,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "pageByPathAnyStatus",
                    "static": false,
                    "visibility": "public",
                    "signature": "pageByPathAnyStatus(array $segments): ?Minn\\Content\\PostRecord",
                    "doc": "The page at a slug path in any status but trash, or null. @param list<string> $segments",
                    "shapes": [
                        "@param list<string> $segments"
                    ],
                    "params": [
                        {
                            "name": "segments",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 199
                },
                {
                    "routes": [],
                    "name": "byTypedPath",
                    "static": false,
                    "visibility": "public",
                    "signature": "byTypedPath(array $segments, array $types): ?Minn\\Content\\PostRecord",
                    "doc": "The post at a slug path among the given types (each segment's parent\nthe one before it), in any status but trash; at the last segment the\nfirst type wins over the others, as the reference prefers the type it\nwas asked for over the attachment it also looks at.",
                    "shapes": [
                        "@param list<string> $segments",
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "segments",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "pathOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "pathOf(Minn\\Content\\PostRecord $page): string",
                    "doc": "The slash-joined ancestry of a page: \"sample-page/docs\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "page",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 249,
                    "end": 262
                },
                {
                    "routes": [],
                    "name": "guess",
                    "static": false,
                    "visibility": "public",
                    "signature": "guess(string $prefix, array $types): ?Minn\\Content\\PostRecord",
                    "doc": "The published post whose name starts with the given text, among the\ngiven types, as the reference guesses a destination for a missing\nURL: one prefix query and no order of its own, so the database's\nplan for it decides which match comes first (on a small table its\nname index, alphabetical; on a large one its type and date index,\noldest first), the same on both stacks over one database.",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 274,
                    "end": 281
                },
                {
                    "routes": [],
                    "name": "hasPublished",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasPublished(string $type): bool",
                    "doc": "Whether any post of a type is published.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 284,
                    "end": 287
                },
                {
                    "routes": [],
                    "name": "idsOfType",
                    "static": false,
                    "visibility": "public",
                    "signature": "idsOfType(string $type): array",
                    "doc": "Every post id of a type, whatever its status, as stored (strings), in the table's order. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 290,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "public",
                    "signature": "meta(int $postId, string $key): ?string",
                    "doc": "One meta value of a post, or null when it has none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 296,
                    "end": 306
                },
                {
                    "routes": [],
                    "name": "terms",
                    "static": false,
                    "visibility": "public",
                    "signature": "terms(int $postId, string $taxonomy): array",
                    "doc": "The post's terms in one taxonomy, as [term_id, slug] pairs.",
                    "shapes": [
                        "@return list<array{0: int, 1: string}> term id and slug pairs, by name"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 313,
                    "end": 316
                },
                {
                    "routes": [],
                    "name": "revisionCount",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisionCount(int $postId): int",
                    "doc": "How many revisions the post has.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 333,
                    "end": 336
                },
                {
                    "routes": [],
                    "name": "primeRevisions",
                    "static": false,
                    "visibility": "public",
                    "signature": "primeRevisions(array $ids): void",
                    "doc": "Reads many posts' revision counts and latest revisions in one query,\nfor a list that links to each post's history (a REST list).",
                    "shapes": [
                        "@param list<int> $ids"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 344,
                    "end": 352
                },
                {
                    "routes": [],
                    "name": "latestRevisionId",
                    "static": false,
                    "visibility": "public",
                    "signature": "latestRevisionId(int $postId): int",
                    "doc": "The latest revision id, an autosave counting as one, newest by date then id (probe rest-latest-revision), or 0.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 380,
                    "end": 383
                },
                {
                    "routes": [],
                    "name": "hasNewerAutosave",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasNewerAutosave(int $postId, string $modifiedGmt): bool",
                    "doc": "Whether a live post carries an autosave newer than its saved state.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "modifiedGmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 386,
                    "end": 393
                },
                {
                    "routes": [],
                    "name": "newest",
                    "static": false,
                    "visibility": "public",
                    "signature": "newest(array $types, string $column): ?string",
                    "doc": "The newest value of a date column (post_date, post_modified, or their\nGMT twins) among published posts of the types given, for\nget_lastpostdate and get_lastpostmodified.",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 402,
                    "end": 409
                },
                {
                    "routes": [],
                    "name": "daysWithPosts",
                    "static": false,
                    "visibility": "public",
                    "signature": "daysWithPosts(int $year, int $month, string $type): array",
                    "doc": "The days of one month a published post of a type was dated on, ascending.",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "year",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "month",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 416,
                    "end": 424
                },
                {
                    "routes": [],
                    "name": "archiveBuckets",
                    "static": false,
                    "visibility": "public",
                    "signature": "archiveBuckets(string $granularity, string $type, string $order, int $limit, string $where = '', string $join = ''): array",
                    "doc": "The periods holding a published post of a type, newest first by\ndefault: one row per month, year, day, or week, with the count and the\nearliest post date inside it. A WHERE and JOIN given (what\nwp_get_archives' getarchives_where and getarchives_join answered) are\nused as they are.",
                    "shapes": [
                        "@return list<array{year: int, month: int, day: int, week: int, count: int, first: string}>"
                    ],
                    "params": [
                        {
                            "name": "granularity",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "order",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "limit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "join",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 435,
                    "end": 452
                },
                {
                    "routes": [],
                    "name": "adjacentClauses",
                    "static": false,
                    "visibility": "public",
                    "signature": "adjacentClauses(Minn\\Content\\PostRecord $post, string $direction, string $taxonomy, array $sameTerms, array $excluded, string $private, int $reader): array",
                    "doc": "The JOIN, WHERE and ORDER BY of the post before ($direction \"previous\")\nor after a post, written as the reference writes them for\nget_adjacent_post (probe filter-inputs), for its filters to edit: kept\nto $sameTerms in $taxonomy when there are some, out of the $excluded\nterms, and published, or private too ($private \"all\"), or the\nreader's own private ones too ($private \"own\").",
                    "shapes": [
                        "@param list<int> $sameTerms",
                        "@param list<int> $excluded",
                        "@return array{0: string, 1: string, 2: string}"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "direction",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sameTerms",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "excluded",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "private",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reader",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 472,
                    "end": 492
                },
                {
                    "routes": [],
                    "name": "adjacentId",
                    "static": false,
                    "visibility": "public",
                    "signature": "adjacentId(string $join, string $where, string $sort): int",
                    "doc": "The post the clauses find (as their filters left them), or 0.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "join",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sort",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 495,
                    "end": 498
                },
                {
                    "routes": [],
                    "name": "archiveList",
                    "static": false,
                    "visibility": "public",
                    "signature": "archiveList(string $type, string $orderBy, string $order, int $limit, string $where = '', string $join = ''): array",
                    "doc": "Published posts of a type for a post-by-post archive, by date or by\ntitle; a WHERE and JOIN given are used as they are (archiveBuckets).",
                    "shapes": [
                        "@return list<PostRecord>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "orderBy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "order",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "limit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "join",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 506,
                    "end": 515
                },
                {
                    "routes": [],
                    "name": "monthBefore",
                    "static": false,
                    "visibility": "public",
                    "signature": "monthBefore(int $year, int $month, string $type): ?array",
                    "doc": "The nearest month before one with a published post of a type, as [year, month], or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "year",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "month",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 518,
                    "end": 522
                },
                {
                    "routes": [],
                    "name": "monthAfter",
                    "static": false,
                    "visibility": "public",
                    "signature": "monthAfter(int $year, int $month, string $type): ?array",
                    "doc": "The nearest month after one with a published post of a type, as [year, month], or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "year",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "month",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 525,
                    "end": 529
                },
                {
                    "routes": [],
                    "name": "newestAutosave",
                    "static": false,
                    "visibility": "public",
                    "signature": "newestAutosave(int $postId, int $userId = 0): ?Minn\\Content\\PostRecord",
                    "doc": "The newest autosave of a post (by date, then id), by one author or, given 0, any (probe revision-more); null when there is none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 542,
                    "end": 550
                },
                {
                    "routes": [],
                    "name": "firstCategorySlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "firstCategorySlug(int $postId): ?string",
                    "doc": "The slug of the post's first category, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 553,
                    "end": 564
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": true,
                    "visibility": "private",
                    "signature": "record(?array $row): ?Minn\\Content\\PostRecord",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed>|null $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": true,
                    "visibility": "private",
                    "signature": "ids(array $ids): array",
                    "doc": "",
                    "shapes": [
                        "@param list<int> $ids @return list<int> the positive ids, once each"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "@return list<int> the positive ids, once each"
                        }
                    ],
                    "line": 133,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "byName",
                    "static": false,
                    "visibility": "private",
                    "signature": "byName(string $name, array $types, string $status): ?Minn\\Content\\PostRecord",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 163
                },
                {
                    "routes": [],
                    "name": "byPath",
                    "static": false,
                    "visibility": "private",
                    "signature": "byPath(array $segments, string $status): ?Minn\\Content\\PostRecord",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $segments"
                    ],
                    "params": [
                        {
                            "name": "segments",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 230,
                    "end": 246
                },
                {
                    "routes": [],
                    "name": "readTerms",
                    "static": false,
                    "visibility": "private",
                    "signature": "readTerms(int $postId, string $taxonomy): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array{0: int, 1: string}>"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 319,
                    "end": 330
                },
                {
                    "routes": [],
                    "name": "revisions",
                    "static": false,
                    "visibility": "private",
                    "signature": "revisions(int $postId): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: int, 1: int} how many revisions a post has, and the latest one's id (newest by date then id), or 0"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 355,
                    "end": 358
                },
                {
                    "routes": [],
                    "name": "readRevisions",
                    "static": false,
                    "visibility": "private",
                    "signature": "readRevisions(array $postIds): array",
                    "doc": "Revision counts and latest ids for many posts in one query.",
                    "shapes": [
                        "@param list<int> $postIds",
                        "@return array<int, array{0: int, 1: int}>"
                    ],
                    "params": [
                        {
                            "name": "postIds",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 366,
                    "end": 377
                },
                {
                    "routes": [],
                    "name": "weekMode",
                    "static": false,
                    "visibility": "private",
                    "signature": "weekMode(): int",
                    "doc": "MySQL's WEEK() mode for the site's first day of the week: 0 for Sunday, 1 for Monday.",
                    "shapes": [],
                    "params": [],
                    "line": 455,
                    "end": 458
                },
                {
                    "routes": [],
                    "name": "monthBeside",
                    "static": false,
                    "visibility": "private",
                    "signature": "monthBeside(string $type, string $clause, string $edge): ?array",
                    "doc": "",
                    "shapes": [
                        "@return array{int, int}|null"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clause",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "edge",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 532,
                    "end": 539
                }
            ]
        },
        {
            "name": "Minn\\Content\\Reader",
            "short": "Reader",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Reader.php",
            "lines": 65,
            "doc": "Who is reading this request: their user id, whether they may read\nprivate content, whether they may edit a given post, and the\npost-password cookie they carry. Built once per surface by the engine,\ncarried by the request's context, and consulted by the resolver, the\nqueries, and the renderers.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\PasswordGate",
                "Minn\\Context",
                "Minn\\Engine",
                "Minn\\Extension\\Seams",
                "Minn\\Front\\Resolver",
                "Minn\\Runtime\\CurrentUser",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(int $userId, bool $readsPrivatePosts, bool $readsPrivatePages, Closure $canEditPost, string $postPassword, string $sessionToken = '', array $roles = array ( ))",
                "doc": "",
                "shapes": [
                    "@param Closure(int): bool $canEditPost"
                ],
                "params": [
                    {
                        "name": "userId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "readsPrivatePosts",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "readsPrivatePages",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "canEditPost",
                        "type": "Closure",
                        "shape": "Closure(int): bool",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "postPassword",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "sessionToken",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "roles",
                        "type": "array",
                        "shape": "",
                        "default": "array ( )",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 31
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "userId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "readsPrivatePosts",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "readsPrivatePages",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "canEditPost",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "postPassword",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "sessionToken",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "roles",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "anonymous",
                    "static": true,
                    "visibility": "public",
                    "signature": "anonymous(string $postPassword = ''): self",
                    "doc": "The reader who is nobody: no session, no private posts, only the post password they typed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postPassword",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "forUser",
                    "static": true,
                    "visibility": "public",
                    "signature": "forUser(int $userId, Minn\\Auth\\Capabilities $capabilities, string $postPassword = '', string $sessionToken = ''): self",
                    "doc": "The reader a signed-in user is, asked of the capability engine: what\nthey may read privately, what they may edit, and the roles they hold.\nUser 0 is nobody, whatever the capabilities say.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "capabilities",
                            "type": "Minn\\Auth\\Capabilities",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postPassword",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "sessionToken",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": true,
                    "visibility": "public",
                    "signature": "current(): self",
                    "doc": "The reader of the request being answered. The runtime holds it (the\ncontext it was built with carries it), so there is one holder and a\nrequest cannot see the reader of the one before it. Without a\nruntime, on the command line and in unit tests, nobody is reading.",
                    "shapes": [],
                    "params": [],
                    "line": 66,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "loggedIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "loggedIn(): bool",
                    "doc": "Whether the reader has a session.",
                    "shapes": [],
                    "params": [],
                    "line": 72,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "canEdit",
                    "static": false,
                    "visibility": "public",
                    "signature": "canEdit(int $postId): bool",
                    "doc": "Whether this reader may edit a given post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 81
                }
            ]
        },
        {
            "name": "Minn\\Content\\Revisions",
            "short": "Revisions",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Revisions.php",
            "lines": 95,
            "doc": "Revision rows: the plain snapshots and the per-author autosave slots.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Site",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\PostWriter $writer, Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writer",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 12,
                "end": 17
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writer",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "revisionsOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisionsOf(int $parentId): array",
                    "doc": "The revisions, or the autosaves, of a post, newest first, as rows.",
                    "shapes": [
                        "@return list<array> newest first"
                    ],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "allOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "allOf(int $parentId): array",
                    "doc": "Every revision of a post, its autosaves among them, newest first by date then id, as rows: what the revisions route lists (probe rest-latest-revision).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "autosavesOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "autosavesOf(int $parentId): array",
                    "doc": "The autosaves of a post, newest first, as rows.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "saveAutosave",
                    "static": false,
                    "visibility": "public",
                    "signature": "saveAutosave(int $parentId, int $userId, string $title, string $content, string $excerpt): int",
                    "doc": "One autosave slot per author: updated in place when it exists.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "excerpt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "named",
                    "static": false,
                    "visibility": "private",
                    "signature": "named(int $parentId, string $comparison): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "comparison",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 52
                }
            ]
        },
        {
            "name": "Minn\\Content\\RowCache",
            "short": "RowCache",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/RowCache.php",
            "lines": 100,
            "doc": "Rows read once a request: posts, their terms, users, and every object's\nmeta, as the reference keeps them in its object cache, so a loop or a\nREST list does not read the same row once per use. A write to a table\ndrops everything kept from it (Db::wrote, through the engine's own door\nor the facade's wpdb), as does a rolled-back transaction, so a read after\na write finds the row as it now is. Nothing outlives the request.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Terms",
                "Minn\\Content\\Users",
                "Minn\\Runtime\\CommentQueryRunner",
                "Minn\\Runtime\\Meta",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TermQuery",
                "Minn\\Theme\\Templates"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SOURCES",
                    "value": "array (   'posts' =>    array (     0 => 'posts',   ),   'post_terms' =>    array (     0 => 'term_relationships',     1 => 'term_taxonomy',     2 => 'terms',   ),   'revisions' =>    array (     0 => 'posts',   ),   'theme_templates' =>    array (     0 => 'posts',     1 => 'term_relationships',     2 => 'term_taxonomy',     3 => 'terms',   ),   'users' =>    array (     0 => 'users',   ),   'comments' =>    array (     0 => 'comments',   ),   'comment_queries' =>    array (     0 => 'comments',     1 => 'commentmeta',   ),   'term_rows' =>    array (     0 => 'terms',     1 => 'term_taxonomy',   ),   'post_meta' =>    array (     0 => 'postmeta',   ),   'user_meta' =>    array (     0 => 'usermeta',   ),   'term_meta' =>    array (     0 => 'termmeta',   ),   'comment_meta' =>    array (     0 => 'commentmeta',   ), )",
                    "doc": "The tables each kind of entry is read from.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "entries",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "listening",
                    "type": "bool",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "watched",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "remember",
                    "static": true,
                    "visibility": "public",
                    "signature": "remember(string $kind, string|int $key, Closure $load): mixed",
                    "doc": "The kept value of a kind for a key, read through $load the first time.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "load",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": true,
                    "visibility": "public",
                    "signature": "has(string $kind, string|int $key): bool",
                    "doc": "Whether a value is kept.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "peek",
                    "static": true,
                    "visibility": "public",
                    "signature": "peek(string $kind, string|int $key): mixed",
                    "doc": "A kept value, or null when there is none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "put",
                    "static": true,
                    "visibility": "public",
                    "signature": "put(string $kind, string|int $key, mixed $value): void",
                    "doc": "Keeps a value read elsewhere (a batch read for a whole list).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "watch",
                    "static": true,
                    "visibility": "public",
                    "signature": "watch(string $kind, string $table): void",
                    "doc": "Has a kind named at run time (a plugin's meta type, whose table only\nthe registration knows) dropped whenever that table is written, as\nthe kinds above are by theirs.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "forget",
                    "static": true,
                    "visibility": "public",
                    "signature": "forget(string $kind, string|int|null $key = NULL): void",
                    "doc": "Drops one kept value, or every one of a kind.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string|int|null",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "flush",
                    "static": true,
                    "visibility": "public",
                    "signature": "flush(): void",
                    "doc": "Drops everything kept.",
                    "shapes": [],
                    "params": [],
                    "line": 98,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "listen",
                    "static": true,
                    "visibility": "private",
                    "signature": "listen(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 103,
                    "end": 116
                }
            ]
        },
        {
            "name": "Minn\\Content\\Site",
            "short": "Site",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Site.php",
            "lines": 114,
            "doc": "Site-wide options and the site's clock.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\ActivityChart",
                "Minn\\Admin\\App",
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\Translations",
                "Minn\\Admin\\UploadsSize",
                "Minn\\Blocks\\Dynamic\\Dates",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Renderer",
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Menus",
                "Minn\\Content\\PluginState",
                "Minn\\Content\\PostSlugs",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Revisions",
                "Minn\\Content\\SiteIcon",
                "Minn\\Context",
                "Minn\\Cron\\Cron",
                "Minn\\Engine",
                "Minn\\Extension\\Loader",
                "Minn\\Extension\\Seams",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\ProbeController",
                "Minn\\Login\\LoginController",
                "Minn\\Mail\\MailSettings",
                "Minn\\Mail\\Mailer",
                "Minn\\Ops\\Changelog",
                "Minn\\Ops\\Diagnostics",
                "Minn\\Ops\\InstalledSoftware",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Releases",
                "Minn\\Ops\\Updates",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\Settings",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Runtime\\Plugins",
                "Minn\\Runtime\\Recovery",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\ClassicTheme",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplateWriter",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeStyles",
                "Minn\\Theme\\UserStyles"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "option",
                    "static": false,
                    "visibility": "public",
                    "signature": "option(string $name): ?string",
                    "doc": "One option's raw value, or null when it is unset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "setOption",
                    "static": false,
                    "visibility": "public",
                    "signature": "setOption(string $name, string $value, ?string $autoload = NULL): void",
                    "doc": "Writes an option, inserting it as autoloaded when it does not exist;\nthe option store hears of it. An $autoload given is written too, so a\ncache the engine reads on demand (autoload \"off\") stays out of the\nlist every request loads.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "autoload",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "deleteOption",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteOption(string $name): void",
                    "doc": "Removes an option row; the option store hears of it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "defaultDiscussion",
                    "static": false,
                    "visibility": "public",
                    "signature": "defaultDiscussion(string $type, string $kind): string",
                    "doc": "A new post's comment or ping status, as the reference picks it: a post\nfollows the site's two defaults, an attachment follows the comment\ndefault and never takes pings, a page and every other type start\nclosed; with plugins loaded, get_default_comment_status() decides\n(support a plugin removed, the filter). $kind is \"comment\" or\n\"pingback\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "timezone",
                    "static": false,
                    "visibility": "public",
                    "signature": "timezone(): DateTimeZone",
                    "doc": "The site's timezone (wp_timezone): the zone timezone_string names, else\ngmt_offset as a fixed offset. With a zone set, the stored gmt_offset is\nnot read at all, as the reference does not read it.",
                    "shapes": [],
                    "params": [],
                    "line": 76,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "gmtOffset",
                    "static": false,
                    "visibility": "public",
                    "signature": "gmtOffset(): int",
                    "doc": "The site's offset from UTC in seconds now: the zone's, daylight saving included, or gmt_offset's.",
                    "shapes": [],
                    "params": [],
                    "line": 91,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "localNow",
                    "static": false,
                    "visibility": "public",
                    "signature": "localNow(): string",
                    "doc": "Now in the site's local time, MySQL format.",
                    "shapes": [],
                    "params": [],
                    "line": 97,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "localDate",
                    "static": false,
                    "visibility": "public",
                    "signature": "localDate(string $input): array",
                    "doc": "A site-local datetime from a write body (\"2031-01-01T00:00:00\") to\nthe pair of columns it fills, plus its timestamp.",
                    "shapes": [
                        "@return array{0: string, 1: string, 2: int} local, gmt, timestamp"
                    ],
                    "params": [
                        {
                            "name": "input",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "gmtDate",
                    "static": false,
                    "visibility": "public",
                    "signature": "gmtDate(string $input): array",
                    "doc": "A GMT datetime from a write body (date_gmt) to the same pair of\ncolumns, its local half in the site's zone at that date.",
                    "shapes": [
                        "@return array{0: string, 1: string, 2: int} local, gmt, timestamp"
                    ],
                    "params": [
                        {
                            "name": "input",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 126
                }
            ]
        },
        {
            "name": "Minn\\Content\\SiteIcon",
            "short": "SiteIcon",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/SiteIcon.php",
            "lines": 63,
            "doc": "The site icon: the attachment the site_icon option names, as the file\nunder uploads it points at. Read by the favicon route, the head links,\nand the admin app's sidebar.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\Media\\Metadata"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BootPayload",
                "Minn\\Engine",
                "Minn\\Front\\ProbeController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 17,
                "end": 22
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "file",
                    "static": false,
                    "visibility": "public",
                    "signature": "file(): ?string",
                    "doc": "The icon's path under uploads, or null when the site has none.",
                    "shapes": [],
                    "params": [],
                    "line": 25,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "urlAt",
                    "static": false,
                    "visibility": "public",
                    "signature": "urlAt(int $size): string",
                    "doc": "The URL of the icon's smallest generated size that covers a square of\n$size pixels, or of the original when no size does; empty without an icon.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "size",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": false,
                    "visibility": "public",
                    "signature": "url(): string",
                    "doc": "The icon's URL, empty when the site has none.",
                    "shapes": [],
                    "params": [],
                    "line": 59,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "public",
                    "signature": "links(): string",
                    "doc": "The head links a site with an icon prints (wp_site_icon): the 32 and 192 pixel icons, the Apple touch icon, and the tile image; empty without one.",
                    "shapes": [],
                    "params": [],
                    "line": 66,
                    "end": 76
                }
            ]
        },
        {
            "name": "Minn\\Content\\Slug",
            "short": "Slug",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Slug.php",
            "lines": 81,
            "doc": "",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Accents"
            ],
            "usedBy": [
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Terms",
                "Minn\\Content\\Users",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\TemplatesController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SAVE_DASHES",
                    "value": "array (   0 => '%c2%a0',   1 => '%e2%80%93',   2 => '%e2%80%94',   3 => '&nbsp;',   4 => '&#160;',   5 => '&ndash;',   6 => '&#8211;',   7 => '&mdash;',   8 => '&#8212;',   9 => '/', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SAVE_DROPPED",
                    "value": "array (   0 => '%c2%ad',   1 => '%c2%a1',   2 => '%c2%bf',   3 => '%c2%ab',   4 => '%c2%bb',   5 => '%e2%80%b9',   6 => '%e2%80%ba',   7 => '%e2%80%98',   8 => '%e2%80%99',   9 => '%e2%80%9c',   10 => '%e2%80%9d',   11 => '%e2%80%9a',   12 => '%e2%80%9b',   13 => '%e2%80%9e',   14 => '%e2%80%9f',   15 => '%e2%80%a2',   16 => '%c2%a9',   17 => '%c2%ae',   18 => '%c2%b0',   19 => '%e2%80%a6',   20 => '%e2%84%a2',   21 => '%c2%b4',   22 => '%cb%8a',   23 => '%cc%81',   24 => '%cd%81',   25 => '%cc%80',   26 => '%cc%84',   27 => '%cc%8c',   28 => '%e2%82%ac',   29 => '%c2%a3',   30 => '%e2%80%80',   31 => '%e2%80%81',   32 => '%e2%80%82',   33 => '%e2%80%83',   34 => '%e2%80%84',   35 => '%e2%80%85',   36 => '%e2%80%86',   37 => '%e2%80%87',   38 => '%e2%80%88',   39 => '%e2%80%89',   40 => '%e2%80%8a',   41 => '%e2%80%8b',   42 => '%e2%80%8c',   43 => '%e2%80%8d',   44 => '%e2%80%8e',   45 => '%e2%80%8f',   46 => '%e2%80%aa',   47 => '%e2%80%ab',   48 => '%e2%80%ac',   49 => '%e2%80%ad',   50 => '%e2%80%ae',   51 => '%e2%80%af',   52 => '%e2%81%9f',   53 => '%e3%80%80',   54 => '%ef%bb%bf', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(string $text, string $locale = ''): string",
                    "doc": "A title as the reference's sanitize_title makes a slug of it when\nsaving, without the filters (the runtime's sanitize_title adds those):\naccents spelled plainly, then the dash form, non-ASCII percent-encoded\nup to 200 bytes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 21
                },
                {
                    "routes": [],
                    "name": "uriEncode",
                    "static": true,
                    "visibility": "public",
                    "signature": "uriEncode(string $text, int $length, Closure $ascii): string",
                    "doc": "Non-ASCII characters as lower-case percent escapes, a whole character\nat a time, stopping before one would take the text past $length bytes\n(0 for no limit); each ASCII character goes through $ascii (as it is,\nor rawurlencode).",
                    "shapes": [
                        "@param Closure(string): string $ascii"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ascii",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "truncate",
                    "static": true,
                    "visibility": "public",
                    "signature": "truncate(string $slug, int $length): string",
                    "doc": "A slug cut to a byte length without splitting a multibyte character or\nleaving a dash hanging off the end.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "dashes",
                    "static": true,
                    "visibility": "public",
                    "signature": "dashes(string $title, bool $forSave, Closure $utf8Encode): string",
                    "doc": "The reference's dash form of a title: tags and marks stripped, spaces to dashes, and the save-time rules when saving.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "forSave",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "utf8Encode",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 89
                }
            ]
        },
        {
            "name": "Minn\\Content\\TagBalancer",
            "short": "TagBalancer",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/TagBalancer.php",
            "lines": 82,
            "doc": "Closes what markup leaves open and drops what it closes without opening,\nas the reference's force_balance_tags does, from its observed rules\n(contracts/runtime.md \"The content filters\"): tag names are lowercased; a\nvoid element is written self-closed (bare as <br />, with attributes as\n<img src=\"x\"/>, one already self-closed as given); reopening the\ninnermost open element closes it first unless it is one of the ten that\nmay contain themselves; a closer shuts every element opened inside its\nown; a closer with nothing to close goes; what is still open at the end\ncloses in reverse. Script and style text is left as it is, and a \"<\" not\nfollowed by a name is text.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "VOID",
                    "value": "array (   0 => 'area',   1 => 'base',   2 => 'basefont',   3 => 'br',   4 => 'col',   5 => 'command',   6 => 'embed',   7 => 'frame',   8 => 'hr',   9 => 'img',   10 => 'input',   11 => 'isindex',   12 => 'link',   13 => 'meta',   14 => 'param',   15 => 'source',   16 => 'track',   17 => 'wbr', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "NESTABLE",
                    "value": "array (   0 => 'article',   1 => 'aside',   2 => 'blockquote',   3 => 'details',   4 => 'div',   5 => 'figure',   6 => 'object',   7 => 'q',   8 => 'section',   9 => 'span', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "RAW",
                    "value": "array (   0 => 'script',   1 => 'style', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TAG",
                    "value": "'/<(\\\\/?)([a-zA-Z][\\\\w:-]*)(\\\\s[^>]*|\\\\/)?>/'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "balance",
                    "static": true,
                    "visibility": "public",
                    "signature": "balance(string $text): string",
                    "doc": "The markup with every element closed in order and every stray closer gone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "close",
                    "static": true,
                    "visibility": "private",
                    "signature": "close(array $stack, string $name): string",
                    "doc": "A closer: every element opened inside the named one closes with it; with nothing to close it is dropped. @param list<string> $stack",
                    "shapes": [
                        "@param list<string> $stack"
                    ],
                    "params": [
                        {
                            "name": "stack",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "voidAttributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "voidAttributes(string $attributes): string",
                    "doc": "A void element's attributes, written self-closed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "rawText",
                    "static": true,
                    "visibility": "private",
                    "signature": "rawText(string $text, int $offset, string $name): array",
                    "doc": "Script or style text up to the element's own closer, which stays for the main loop. @return array{0: string, 1: int}",
                    "shapes": [
                        "@return array{0: string, 1: int}"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Content\\TermLinks",
            "short": "TermLinks",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/TermLinks.php",
            "lines": 37,
            "doc": "A post's terms rendered as links, in the two shapes the reference\nemits: a plain joined run for a taxonomy, and the category list, which\nbecomes a `post-categories` unordered list when the caller names no\nseparator and a joined run when it does.\n\nNames arrive already filtered; the caller applies the reference's own\nfilters around the result.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "joined",
                    "static": true,
                    "visibility": "public",
                    "signature": "joined(array $terms, string $rel, string $sep): string",
                    "doc": "Anchor tags for these terms joined by a separator, the way the reference prints a term list.",
                    "shapes": [
                        "@param list<array{name: string, url: string}> $terms"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "list<array{name: string, url: string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sep",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "categories",
                    "static": true,
                    "visibility": "public",
                    "signature": "categories(array $categories, string $separator): string",
                    "doc": "The category list: an unordered list when the separator is empty,\na joined run otherwise. Both carry rel=\"category tag\". A row may bring\nmarkup to go before its link (its parents) and the space before rel.",
                    "shapes": [
                        "@param list<array{name: string, url: string, before?: string, space?: string}> $categories"
                    ],
                    "params": [
                        {
                            "name": "categories",
                            "type": "array",
                            "shape": "list<array{name: string, url: string, before?: string, space?: string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "separator",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "anchor",
                    "static": true,
                    "visibility": "private",
                    "signature": "anchor(string $url, string $name, string $rel, string $space = ' '): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "space",
                            "type": "string",
                            "shape": "",
                            "default": "' '",
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 53
                }
            ]
        },
        {
            "name": "Minn\\Content\\TermRecord",
            "short": "TermRecord",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/TermRecord.php",
            "lines": 88,
            "doc": "One term with its taxonomy row, read by name: $term->name, ->slug,\n->taxonomy, ->parentId, ->count. The taxonomy and description are empty\nwhen the query that built the record did not select them. Array access\nis the migration bridge, read-only.",
            "implements": [
                "ArrayAccess"
            ],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Content\\Menus",
                "Minn\\Content\\Terms",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Resolution",
                "Minn\\Rest\\MenuObject",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\TermFilters",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\TermsController",
                "Minn\\Runtime\\TermWriter"
            ],
            "constructor": {
                "signature": "__construct(int $id, string $name, string $slug, int $taxonomyId, string $taxonomy, string $description, int $parentId, int $count, array $row)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed> $row"
                ],
                "params": [
                    {
                        "name": "id",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "name",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "slug",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "taxonomyId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "taxonomy",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "description",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parentId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "count",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "row",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 21,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "id",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "name",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "slug",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "taxonomyId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "taxonomy",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "description",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "parentId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "count",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "row",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromRow",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRow(array $row): self",
                    "doc": "A record from a joined terms row; a missing column reads as empty.",
                    "shapes": [
                        "@param array<string, mixed> $row a terms row joined with term_taxonomy, whatever columns it carries"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "a terms row joined with term_taxonomy, whatever columns it carries"
                        }
                    ],
                    "line": 39,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "fromRows",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRows(array $rows): array",
                    "doc": "A record for every row, in order.",
                    "shapes": [
                        "@param list<array<string, mixed>> $rows @return list<self>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "@return list<self>"
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "row",
                    "static": false,
                    "visibility": "public",
                    "signature": "row(): array",
                    "doc": "The stored row, for the writers and shapers that still spell columns.",
                    "shapes": [],
                    "params": [],
                    "line": 65,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "hasParent",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasParent(): bool",
                    "doc": "Whether the term sits under another.",
                    "shapes": [],
                    "params": [],
                    "line": 71,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "column",
                    "static": false,
                    "visibility": "public",
                    "signature": "column(string $name): mixed",
                    "doc": "One stored column by its database name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "offsetExists",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetExists(mixed $offset): bool",
                    "doc": "The migration bridge: the record answers to its column names the way the row did.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "offsetGet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetGet(mixed $offset): mixed",
                    "doc": "The migration bridge: one column by its stored name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "offsetSet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetSet(mixed $offset, mixed $value): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "offsetUnset",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetUnset(mixed $offset): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 104
                }
            ]
        },
        {
            "name": "Minn\\Content\\Terms",
            "short": "Terms",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Terms.php",
            "lines": 219,
            "doc": "",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\RowCache",
                "Minn\\Content\\Slug",
                "Minn\\Content\\TermRecord",
                "Minn\\Db",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\Menus",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\TermsController",
                "Minn\\Runtime\\TermSave",
                "Minn\\Runtime\\TermWriter",
                "Minn\\Theme\\TemplateWriter",
                "Minn\\Theme\\UserStyles"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 12,
                "end": 14
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "findBySlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "findBySlug(string $taxonomy, string $slug): ?Minn\\Content\\TermRecord",
                    "doc": "A term joined with its taxonomy row: term_id, name, slug, term_taxonomy_id, parent, count.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(string $taxonomy, int $termId): ?Minn\\Content\\TermRecord",
                    "doc": "One term in a taxonomy, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "row",
                    "static": false,
                    "visibility": "public",
                    "signature": "row(int $termId, string $taxonomy): ?Minn\\Content\\TermRecord",
                    "doc": "The row shape the term controllers work with, including term_taxonomy_id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "idByName",
                    "static": false,
                    "visibility": "public",
                    "signature": "idByName(string $name, string $taxonomy): ?int",
                    "doc": "The id of the term with exactly this name in a taxonomy, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "uniqueSlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "uniqueSlug(string $base, string $taxonomy, int $skipId = 0): string",
                    "doc": "A slug unique within the taxonomy: base, -2, -3 on collision.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skipId",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(string $name, string $slug, string $taxonomy, string $description, int $parent): int",
                    "doc": "Inserts a term and its taxonomy row and returns the term id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "insertRow",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertRow(array $data): int",
                    "doc": "Inserts a terms row alone (name, slug, term_group), as the reference\nwrites it before the taxonomy row; returns the term id.",
                    "shapes": [
                        "@param array{name: string, slug: string, term_group: int} $data"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array{name: string, slug: string, term_group: int}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "addToTaxonomy",
                    "static": false,
                    "visibility": "public",
                    "signature": "addToTaxonomy(int $termId, string $taxonomy, string $description, int $parent): int",
                    "doc": "Puts a term in a taxonomy; returns the term_taxonomy id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "updateRow",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateRow(int $termId, array $data): void",
                    "doc": "Rewrites a terms row (name, slug, term_group).",
                    "shapes": [
                        "@param array{name: string, slug: string, term_group: int} $data"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array{name: string, slug: string, term_group: int}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "dropRows",
                    "static": false,
                    "visibility": "public",
                    "signature": "dropRows(int $termId, int $ttId): void",
                    "doc": "Drops a term's rows that a plugin's duplicate check said to give up.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ttId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "rename",
                    "static": false,
                    "visibility": "public",
                    "signature": "rename(int $termId, string $name, string $slug): void",
                    "doc": "Changes a term's name and slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "describe",
                    "static": false,
                    "visibility": "public",
                    "signature": "describe(int $termId, string $taxonomy, string $description, int $parent): void",
                    "doc": "Changes a term's description and parent within one taxonomy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 164
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Content\\TermRecord $term, bool $hierarchical): void",
                    "doc": "Reparents children to the grandparent, detaches relationships, drops the rows.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hierarchical",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 167,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "pathOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "pathOf(Minn\\Content\\TermRecord $term): string",
                    "doc": "\"parent/child\" for hierarchical taxonomies, the bare slug otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 214,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": true,
                    "visibility": "private",
                    "signature": "record(?array $row): ?Minn\\Content\\TermRecord",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed>|null $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 20
                },
                {
                    "routes": [],
                    "name": "refreshHierarchy",
                    "static": false,
                    "visibility": "private",
                    "signature": "refreshHierarchy(string $taxonomy): void",
                    "doc": "The reference keeps \"{taxonomy}_children\" (each parent's child term\nids, by id) for a hierarchical taxonomy and rewrites it on every term\nchange; one left stale hides new children from WordPress after a\nswitch back. Callers take a taxonomy as hierarchical when the change\nhas a parent, they know it is, or the option is already there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "keepsHierarchy",
                    "static": false,
                    "visibility": "private",
                    "signature": "keepsHierarchy(string $taxonomy): bool",
                    "doc": "Whether the taxonomy already has its children option, the mark of a hierarchical one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 208,
                    "end": 211
                }
            ]
        },
        {
            "name": "Minn\\Content\\TextFilters",
            "short": "TextFilters",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/TextFilters.php",
            "lines": 161,
            "doc": "The small text filters the reference runs over content, titles and\ncomments, each from its observed rules (contracts/runtime.md \"The content\nfilters\", \"The comment form\"): smilies, the capital P, insecure home\naddresses, the feed's embed clean-up, and a comment's links and spans.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "IMAGE",
                    "value": "'/\\\\.(png|gif|jpe?g|svg|webp)$/i'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "IGNORED",
                    "value": "array (   0 => 'code',   1 => 'pre',   2 => 'script',   3 => 'style',   4 => 'textarea', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "smiliesSearch",
                    "static": true,
                    "visibility": "public",
                    "signature": "smiliesSearch(array $codes): string",
                    "doc": "The search pattern smilies_init leaves in $wp_smiliessearch, from the\ncodes in their stored order (reverse-sorted): one alternative per first\ncharacter, its code's rest quoted and joined, each bounded by\nwhitespace, a no-break space or the line's ends (probe functions-utils).",
                    "shapes": [
                        "@param list<string> $codes"
                    ],
                    "params": [
                        {
                            "name": "codes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "smilies",
                    "static": true,
                    "visibility": "public",
                    "signature": "smilies(string $text, array $table, Closure $image): string",
                    "doc": "Smilies become their emoji, or an image for the few that have one: a\ncode only counts as a whole word between spaces, and nothing inside a\ncode, pre, script, style or textarea element, or inside a tag, changes.",
                    "shapes": [
                        "@param array<string, string> $table code => emoji, or an image file name",
                        "@param Closure(string $file, string $code): string $image the <img> for an image smiley"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "code => emoji, or an image file name"
                        },
                        {
                            "name": "image",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "capitalP",
                    "static": true,
                    "visibility": "public",
                    "signature": "capitalP(string $text): string",
                    "doc": "\"Wordpress\" spelled right after a space, a parenthesis, a tag, or an opening curly quote; elsewhere it stays.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "capitalPEverywhere",
                    "static": true,
                    "visibility": "public",
                    "signature": "capitalPEverywhere(string $text): string",
                    "doc": "\"Wordpress\" spelled right everywhere, as a title is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "secureHome",
                    "static": true,
                    "visibility": "public",
                    "signature": "secureHome(string $content, string $insecure, string $secure): string",
                    "doc": "The site's own http address made https, escaped forms included.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "insecure",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "secure",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "feedEmbeds",
                    "static": true,
                    "visibility": "public",
                    "signature": "feedEmbeds(string $content): string",
                    "doc": "A feed carries an embedded post's iframe without the style that hides it until its script runs.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "rel",
                    "static": true,
                    "visibility": "public",
                    "signature": "rel(string $slashed, string $rel, Closure $internal): string",
                    "doc": "Every link given a rel (wp_rel_nofollow, wp_rel_ugc), on slashed text\nas the content filters carry it, slashed again after (probes\ncomment-fields, plugin-queue5). A link to the site itself does not\ntake \"nofollow\".",
                    "shapes": [
                        "@param Closure(string $href): bool $internal whether an href points at the site itself"
                    ],
                    "params": [
                        {
                            "name": "slashed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "internal",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "linkRel",
                    "static": true,
                    "visibility": "public",
                    "signature": "linkRel(string $inner, string $rel, Closure $internal): string",
                    "doc": "One link's opening tag with the rel added (wp_rel_callback): a tag\nthat has a rel keeps its words first, gains the new ones, and is\nwritten again with every attribute double-quoted and rel last; one\nwithout keeps its attributes as written and takes rel at the end.",
                    "shapes": [
                        "@param Closure(string $href): bool $internal"
                    ],
                    "params": [
                        {
                            "name": "inner",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "internal",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "noteMentionClasses",
                    "static": true,
                    "visibility": "public",
                    "signature": "noteMentionClasses(string $slashed): string",
                    "doc": "A span keeps no class in a comment (where a note's mention would be faked); slashed text in, slashed out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slashed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "ignoring",
                    "static": true,
                    "visibility": "private",
                    "signature": "ignoring(string $tag, ?string $current): ?string",
                    "doc": "The element whose text is left alone after a tag: one of the ignored elements opening, or the one still open.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "current",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "words",
                    "static": true,
                    "visibility": "private",
                    "signature": "words(string $text, array $table, Closure $image): string",
                    "doc": "One text run, word by word. @param array<string, string> $table",
                    "shapes": [
                        "@param array<string, string> $table"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "image",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "attributes(string $raw): array",
                    "doc": "A tag's attributes in order, name => value (quotes removed; a bare name has null). @return array<string, ?string>",
                    "shapes": [
                        "@return array<string, ?string>"
                    ],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 175
                }
            ]
        },
        {
            "name": "Minn\\Content\\Texturize",
            "short": "Texturize",
            "namespace": "Minn\\Content",
            "kind": "final class",
            "file": "public/minn/src/Minn/Content/Texturize.php",
            "lines": 269,
            "doc": "The texturize subset the reference applies to rendered text: straight\nquotes, apostrophes, ellipses, dashes, and primes become numeric\nentities, outside the skip elements only. Coverage is pinned by the\ntexturize battery post; anything beyond it is a documented gap.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\Format",
                "Minn\\Admin\\Notifications",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\Excerpt",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SKIP",
                    "value": "array (   0 => 'pre',   1 => 'code',   2 => 'kbd',   3 => 'style',   4 => 'script',   5 => 'tt', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "run",
                    "type": "?bool",
                    "readonly": false,
                    "static": true,
                    "doc": "Whether text is texturized at all (run_wptexturize), once asked; null until then.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "characters",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "enabled",
                    "static": true,
                    "visibility": "public",
                    "signature": "enabled(): bool",
                    "doc": "Whether text is texturized at all (run_wptexturize): asked on the first\ntext of a request and again after askAgain(); once the answer is no, it\nholds for the rest of the request (probe filter-inputs-3).",
                    "shapes": [],
                    "params": [],
                    "line": 31,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "askAgain",
                    "static": true,
                    "visibility": "public",
                    "signature": "askAgain(): void",
                    "doc": "Has the next text ask run_wptexturize again (wptexturize's reset), unless the answer was already no.",
                    "shapes": [],
                    "params": [],
                    "line": 38,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "characters",
                    "static": true,
                    "visibility": "public",
                    "signature": "characters(): array",
                    "doc": "The characters texturizing writes, as the site's language writes them\n(each asked by its translation context, as the reference asks them):\nthe dashes, the curly quotes, the apostrophe and the primes.",
                    "shapes": [
                        "@return array{en: string, em: string, open1: string, close1: string, apostrophe: string, open2: string, close2: string, prime: string, prime2: string}"
                    ],
                    "params": [],
                    "line": 53,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "skipPattern",
                    "static": true,
                    "visibility": "public",
                    "signature": "skipPattern(): string",
                    "doc": "The elements whose text stays as written (no_texturize_tags: pre, code,\nkbd, style, script and tt), read on every text, as a pattern alternation.",
                    "shapes": [],
                    "params": [],
                    "line": 72,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(string $html, ?string $skip = NULL): string",
                    "doc": "Curly quotes, dashes, and ellipses in the text of HTML, leaving tags\nand the skipped elements alone; registered shortcodes stay as written\n(probe shortcode-run), and so does the text inside the ones\nno_texturize_shortcodes names ([code] by default). Nothing changes once\ntexturizing is off. A caller that already read the skip pattern hands\nit over, so each text asks the filters once.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "entities",
                    "static": true,
                    "visibility": "public",
                    "signature": "entities(string $html, string $skip): string",
                    "doc": "Bare ampersands made entities outside the skipped elements, as wptexturize leaves them after the rest.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "public",
                    "signature": "text(string $text): string",
                    "doc": "The same substitutions on a plain string with no tags.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "splitPattern",
                    "static": true,
                    "visibility": "public",
                    "signature": "splitPattern(string $shortcodes = ''): string",
                    "doc": "The pattern that cuts markup for texturizing (wp_html_split's pieces\nwith comments whole and, given, shortcodes): comments run to \"-->\" or\nthe end, a tag to its first \">\", and each piece is captured.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "shortcodes",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "shortcodeTags",
                    "static": true,
                    "visibility": "public",
                    "signature": "shortcodeTags(array $tags): string",
                    "doc": "The pattern fragment for shortcodes with these names: an opening or\nclosing tag, or an escaped [[one]], its name ended by a space, \"/\" or\n\"]\", its attributes up to the first \"]\".",
                    "shapes": [
                        "@param list<string> $tags"
                    ],
                    "params": [
                        {
                            "name": "tags",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 222,
                    "end": 225
                },
                {
                    "routes": [],
                    "name": "pushPop",
                    "static": true,
                    "visibility": "public",
                    "signature": "pushPop(string $text, array $stack, array $disabled): void",
                    "doc": "Keeps the stack of open elements texturize leaves alone: an opening\ntag or shortcode of a listed name is pushed (a self-closing one is\nnot), its closing one pops it when it is the last opened.",
                    "shapes": [
                        "@param list<string> $stack",
                        "@param list<string> $disabled"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stack",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "disabled",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 235,
                    "end": 248
                },
                {
                    "routes": [],
                    "name": "primes",
                    "static": true,
                    "visibility": "public",
                    "signature": "primes(string $haystack, string $needle, string $prime, string $closeQuote): string",
                    "doc": "Each $needle in the text made a prime after a digit; otherwise a\ndouble quote becomes the closing quote, and a single one does only\nwhere a word ends (before the end, whitespace, a no-break space or\n. , ; : ! ? ) ] } -), staying an apostrophe or opening quote elsewhere.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "haystack",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "needle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prime",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "closeQuote",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 277
                },
                {
                    "routes": [],
                    "name": "shortcodePattern",
                    "static": true,
                    "visibility": "private",
                    "signature": "shortcodePattern(string $html): string",
                    "doc": "The pattern for the registered shortcodes the text opens a bracket with, or \"\" for none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "quiet",
                    "static": true,
                    "visibility": "private",
                    "signature": "quiet(string $delimiter, array $open, array $quiet): void",
                    "doc": "Keeps count of the quiet shortcodes open around the text: an opening\none is pushed, its closing one pops it, others pass.",
                    "shapes": [
                        "@param list<string> $open @param list<string> $quiet"
                    ],
                    "params": [
                        {
                            "name": "delimiter",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "open",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@param list<string> $quiet"
                        },
                        {
                            "name": "quiet",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "endsWord",
                    "static": true,
                    "visibility": "private",
                    "signature": "endsWord(string $next): bool",
                    "doc": "Whether what follows a single quote ends a word: nothing, whitespace, a no-break space, or . , ; : ! ? ) ] } -.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "next",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 280,
                    "end": 283
                }
            ]
        },
        {
            "name": "Minn\\Content\\UserRecord",
            "short": "UserRecord",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/UserRecord.php",
            "lines": 96,
            "doc": "One row of the users table, read by name. Columns keep their WordPress\nspelling in row(); here they are $user->login, ->email, ->displayName.\nArray access is the migration bridge, read-only; new code reads the\nproperties.",
            "implements": [
                "ArrayAccess"
            ],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Auth\\AuthCookies",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Auth\\SignIn",
                "Minn\\Cli\\UserCommand",
                "Minn\\Content\\Users",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Resolution",
                "Minn\\Login\\LoginController",
                "Minn\\Login\\LoginHooks",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\UserObject",
                "Minn\\Rest\\UsersController"
            ],
            "constructor": {
                "signature": "__construct(int $id, string $login, string $passwordHash, string $nicename, string $email, string $url, string $registered, string $activationKey, int $status, string $displayName, array $row)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed> $row"
                ],
                "params": [
                    {
                        "name": "id",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "login",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "passwordHash",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "nicename",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "email",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "registered",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "activationKey",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "status",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "displayName",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "row",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 21,
                "end": 34
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "id",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "login",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "passwordHash",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "nicename",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "email",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "registered",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "activationKey",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "status",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "displayName",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "row",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromRow",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRow(array $row): self",
                    "doc": "A record from a users row; a missing column reads as empty.",
                    "shapes": [
                        "@param array<string, mixed> $row a users-table row, joined columns welcome"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "a users-table row, joined columns welcome"
                        }
                    ],
                    "line": 41,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "fromRows",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRows(array $rows): array",
                    "doc": "A record for every row, in order.",
                    "shapes": [
                        "@param list<array<string, mixed>> $rows @return list<self>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "@return list<self>"
                        }
                    ],
                    "line": 63,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "row",
                    "static": false,
                    "visibility": "public",
                    "signature": "row(): array",
                    "doc": "The stored row, for the writers and shapers that still spell columns.\n\nThe row as the table holds it.",
                    "shapes": [],
                    "params": [],
                    "line": 73,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "name",
                    "static": false,
                    "visibility": "public",
                    "signature": "name(): string",
                    "doc": "The name shown for this person: the display name, or the login when none was set.",
                    "shapes": [],
                    "params": [],
                    "line": 79,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "column",
                    "static": false,
                    "visibility": "public",
                    "signature": "column(string $name): mixed",
                    "doc": "One stored column by its database name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "offsetExists",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetExists(mixed $offset): bool",
                    "doc": "The migration bridge: the record answers to its column names the way the row did.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "offsetGet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetGet(mixed $offset): mixed",
                    "doc": "The migration bridge: one column by its stored name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "offsetSet",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetSet(mixed $offset, mixed $value): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "offsetUnset",
                    "static": false,
                    "visibility": "public",
                    "signature": "offsetUnset(mixed $offset): never",
                    "doc": "Records are read-only; writes go through the repository.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 112
                }
            ]
        },
        {
            "name": "Minn\\Content\\Users",
            "short": "Users",
            "namespace": "Minn\\Content",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Content/Users.php",
            "lines": 286,
            "doc": "",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Password",
                "Minn\\Auth\\Roles",
                "Minn\\Content\\RowCache",
                "Minn\\Content\\Slug",
                "Minn\\Content\\UserRecord",
                "Minn\\Db",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\Appearance",
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\HiddenIntegrations",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\Translations",
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Auth\\Sessions",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Renderer",
                "Minn\\Cli\\Runtime",
                "Minn\\Engine",
                "Minn\\Login\\LoginController",
                "Minn\\Login\\LoginHooks",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\UserObject",
                "Minn\\Rest\\UsersController",
                "Minn\\Runtime\\ApplicationPasswordSignIn"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 14,
                "end": 16
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(int $id): ?Minn\\Content\\UserRecord",
                    "doc": "The user with this id, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "findByLogin",
                    "static": false,
                    "visibility": "public",
                    "signature": "findByLogin(string $login): ?Minn\\Content\\UserRecord",
                    "doc": "The user with this login, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "findByEmail",
                    "static": false,
                    "visibility": "public",
                    "signature": "findByEmail(string $email): ?Minn\\Content\\UserRecord",
                    "doc": "The user with this email, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "findBySlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "findBySlug(string $nicename): ?Minn\\Content\\UserRecord",
                    "doc": "The user with this nicename, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "nicename",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "uniqueNicename",
                    "static": false,
                    "visibility": "public",
                    "signature": "uniqueNicename(string $base, int $skipId = 0): string",
                    "doc": "The unique-nicename rule: sanitized login, -2, -3 on collision.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skipId",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "createAccount",
                    "static": false,
                    "visibility": "public",
                    "signature": "createAccount(array $fields): int",
                    "doc": "Inserts a user and the 14 default meta rows the reference writes.\n\nlogin: string,\nemail: string,\npassword: string,\nrole: string,\ndisplay_name: string,\nurl?: string,\nnicename?: string,\nnickname?: string,\nfirst_name?: string,\nlast_name?: string,\ndescription?: string,\nlocale?: string,\n} $fields",
                    "shapes": [
                        "@param array{"
                    ],
                    "params": [
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "defaultDisplayName",
                    "static": true,
                    "visibility": "public",
                    "signature": "defaultDisplayName(string $first, string $last, string $login): string",
                    "doc": "The display name an account gets when none is given, as the reference\npicks it: first and last name, whichever of the two there is, or the\nlogin. The nickname plays no part.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "first",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "last",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "insertAccount",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertAccount(array $fields): int",
                    "doc": "A new account's row alone: the caller adds its meta and role, and keeps the count. @param array<string, mixed> $fields",
                    "shapes": [
                        "@param array<string, mixed> $fields"
                    ],
                    "params": [
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "profileMeta",
                    "static": true,
                    "visibility": "public",
                    "signature": "profileMeta(array $fields): array",
                    "doc": "The twelve profile meta rows the reference gives a new account, in its\norder (the role's two follow).",
                    "shapes": [
                        "@param array<string, mixed> $fields",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "recount",
                    "static": false,
                    "visibility": "public",
                    "signature": "recount(): void",
                    "doc": "Recounts the accounts into user_count, quietly.",
                    "shapes": [],
                    "params": [],
                    "line": 171,
                    "end": 174
                },
                {
                    "routes": [],
                    "name": "deleteRow",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteRow(int $id): void",
                    "doc": "Removes the account's row alone: the caller removes its meta and keeps the count.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "insert",
                    "static": false,
                    "visibility": "public",
                    "signature": "insert(array $columns): int",
                    "doc": "Inserts a users row from column => value pairs and returns the new id.",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 187,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(int $id, array $columns): void",
                    "doc": "Sets the given columns on one user.",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 199,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(int $id): void",
                    "doc": "Removes the user and their meta; their posts are reassigned or removed first by the caller.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 212
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": false,
                    "visibility": "public",
                    "signature": "ids(int $limit): array",
                    "doc": "User ids in login order, optionally the first N. @return list<int>",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "limit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "setPassword",
                    "static": false,
                    "visibility": "public",
                    "signature": "setPassword(int $userId, string $hash): void",
                    "doc": "Stores a new password hash and clears any pending reset key.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hash",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 221,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "count",
                    "static": false,
                    "visibility": "public",
                    "signature": "count(): int",
                    "doc": "How many users the site has.",
                    "shapes": [],
                    "params": [],
                    "line": 227,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "registeredAfter",
                    "static": false,
                    "visibility": "public",
                    "signature": "registeredAfter(string $since, int $limit): array",
                    "doc": "The newest users registered since a site-local time, up to the limit.",
                    "shapes": [
                        "@return list<array> the newest registrations after a site-local timestamp"
                    ],
                    "params": [
                        {
                            "name": "since",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "limit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 244
                },
                {
                    "routes": [],
                    "name": "deleteMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteMeta(int $userId, string $key): void",
                    "doc": "Removes one meta key from a user.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 247,
                    "end": 250
                },
                {
                    "routes": [],
                    "name": "withCapabilities",
                    "static": false,
                    "visibility": "public",
                    "signature": "withCapabilities(string $capabilitiesKey): array",
                    "doc": "Every user with a capabilities row under the key given, as the old\nget_users_of_blog listed them: id twice, login, display name, email\nand the stored capabilities, in id order.",
                    "shapes": [
                        "@return list<array<string, string>>"
                    ],
                    "params": [
                        {
                            "name": "capabilitiesKey",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 259,
                    "end": 265
                },
                {
                    "routes": [],
                    "name": "withoutRole",
                    "static": false,
                    "visibility": "public",
                    "signature": "withoutRole(string $capabilitiesKey, string $rolePattern): array",
                    "doc": "The ids of users whose capabilities row names none of the roles (a pattern of their names). @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "capabilitiesKey",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rolePattern",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 268,
                    "end": 274
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "public",
                    "signature": "meta(int $userId, string $key): ?string",
                    "doc": "One usermeta value, raw. Serialized blobs come back as stored.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 277,
                    "end": 284
                },
                {
                    "routes": [],
                    "name": "setMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "setMeta(int $userId, string $key, string $value): void",
                    "doc": "Replaces one usermeta row. The (user_id, meta_key) pair carries no\nunique index on the stock schema, so this is a delete plus insert\nrather than an upsert.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 291,
                    "end": 296
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": true,
                    "visibility": "private",
                    "signature": "record(?array $row): ?Minn\\Content\\UserRecord",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed>|null $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 22
                },
                {
                    "routes": [],
                    "name": "refreshCount",
                    "static": false,
                    "visibility": "private",
                    "signature": "refreshCount(): void",
                    "doc": "The user_count option, which the reference keeps current as accounts\ncome and go. A site without the row is left without it.",
                    "shapes": [],
                    "params": [],
                    "line": 101,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "writeAccount",
                    "static": false,
                    "visibility": "private",
                    "signature": "writeAccount(array $fields): int",
                    "doc": "The account's row and the fourteen meta rows the reference gives a new\nuser, written as one unit by createAccount().",
                    "shapes": [
                        "@param array<string, mixed> $fields"
                    ],
                    "params": [
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 126
                }
            ]
        },
        {
            "name": "Minn\\Context",
            "short": "Context",
            "namespace": "Minn",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Context.php",
            "lines": 41,
            "doc": "One request, as a value: the database door, who is asking, what they\nmay do, and where the site's files are. It is built once at the front\ndoor and handed down, so nothing below has to reach for a global to\nlearn what request it is answering.\n\nThe reader is the one part that differs by surface (REST resolves it\nfrom the nonce-bound caller, the front from the session cookie), so a\ncontext is made with the reader its surface resolved.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Http\\Request"
            ],
            "usedBy": [
                "Minn\\Cli\\Runtime",
                "Minn\\Engine",
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, ?Minn\\Http\\Request $request, Minn\\Content\\Reader $reader, Minn\\Auth\\Capabilities $capabilities, string $engineDir, string $absPath, string $version)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "request",
                        "type": "?Minn\\Http\\Request",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "reader",
                        "type": "Minn\\Content\\Reader",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "absPath",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "version",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 37
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "request",
                    "type": "?Minn\\Http\\Request",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "reader",
                    "type": "Minn\\Content\\Reader",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "the minn/ folder: the engine's own files",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "absPath",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "the site root with a trailing slash, as ABSPATH holds it",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "version",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "the WordPress release whose contracts the runtime speaks",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "withReader",
                    "static": false,
                    "visibility": "public",
                    "signature": "withReader(Minn\\Content\\Reader $reader): self",
                    "doc": "The same context with another reader, for a surface that resolves one later.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "reader",
                            "type": "Minn\\Content\\Reader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "contentDir",
                    "static": false,
                    "visibility": "public",
                    "signature": "contentDir(): string",
                    "doc": "wp-content under the site root.",
                    "shapes": [],
                    "params": [],
                    "line": 46,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "themesDir",
                    "static": false,
                    "visibility": "public",
                    "signature": "themesDir(): string",
                    "doc": "The themes folder under wp-content.",
                    "shapes": [],
                    "params": [],
                    "line": 52,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "isSecure",
                    "static": false,
                    "visibility": "public",
                    "signature": "isSecure(): bool",
                    "doc": "Whether the request is over HTTPS.",
                    "shapes": [],
                    "params": [],
                    "line": 58,
                    "end": 61
                }
            ]
        },
        {
            "name": "Minn\\Cron\\Cron",
            "short": "Cron",
            "namespace": "Minn\\Cron",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Cron/Cron.php",
            "lines": 175,
            "doc": "The engine's scheduled work: scheduled posts go live when their time\ncomes, the cron option's due events fire, expired throttle rows and\ntransients are swept, and the daily auto-update check runs. Triggered\nby wp-cron.php, `wp minn cron`, `minn cron`, or a front request that\nfinds something due (after its response is sent). One run at a time,\nthrough a short-lived lock option.\n\nFiring the cron option's due hooks needs the booted runtime and the\nfacade, so it arrives as a closure the caller supplies (from the front\npipeline, or the CLI once it has booted the runtime); with none, only\nthe engine's own scheduled posts and sweeps run.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\LoginThrottle",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Ops\\AutoUpdates",
                "Minn\\Ops\\Updates",
                "Minn\\Runtime\\CronTable",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Cli\\MinnCommand",
                "Minn\\Engine",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\ProbeController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Content\\PostWriter $writer, ?Minn\\Ops\\Updates $updates = NULL, ?Closure $fireDueEvents = NULL)",
                "doc": "",
                "shapes": [
                    "@param ?Closure(): int $fireDueEvents fires the cron option's due hooks and returns how many ran"
                ],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writer",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "updates",
                        "type": "?Minn\\Ops\\Updates",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "fireDueEvents",
                        "type": "?Closure",
                        "shape": "?Closure(): int",
                        "default": "NULL",
                        "doc": "fires the cron option's due hooks and returns how many ran"
                    }
                ],
                "visibility": "public",
                "line": 38,
                "end": 40
            },
            "cases": [],
            "constants": [
                {
                    "name": "LOCK",
                    "value": "'minn_cron_lock'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "LOCK_TTL",
                    "value": "60",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writer",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "updates",
                    "type": "?Minn\\Ops\\Updates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "fireDueEvents",
                    "type": "?Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "create",
                    "static": true,
                    "visibility": "public",
                    "signature": "create(Minn\\Db $db, Minn\\Content\\Site $site, string $contentDir, ?Closure $fireDueEvents): self",
                    "doc": "The one recipe every trigger builds from: the post writer, the\nupdater over the site's wp-content, and the runtime's firing closure.",
                    "shapes": [
                        "@param ?Closure(): int $fireDueEvents"
                    ],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fireDueEvents",
                            "type": "?Closure",
                            "shape": "?Closure(): int",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(): array",
                    "doc": "Runs every due job; the report lists what happened. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 55,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "idle",
                    "static": false,
                    "visibility": "public",
                    "signature": "idle(): bool",
                    "doc": "True when a hit has nothing to do: no job is due and the housekeeping\n(expired transients and throttle rows) ran within the last minute, so\na request repeated as fast as a visitor can send it costs two reads.",
                    "shapes": [],
                    "params": [],
                    "line": 84,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "due",
                    "static": false,
                    "visibility": "public",
                    "signature": "due(): bool",
                    "doc": "True when a scheduled post's time has come or the cron option holds a due event.",
                    "shapes": [],
                    "params": [],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "fireEvents",
                    "static": false,
                    "visibility": "private",
                    "signature": "fireEvents(): string",
                    "doc": "Fires the due events through the runtime. A callback that throws\nends the events step, as a fatal ends the reference's cron request;\nthe event was already rescheduled or removed, so it does not repeat\non the next trigger, and the sweeps still run.",
                    "shapes": [],
                    "params": [],
                    "line": 101,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "applyAutoUpdates",
                    "static": false,
                    "visibility": "private",
                    "signature": "applyAutoUpdates(): array",
                    "doc": "The daily auto-update pass. The stamp is written before the pass so\na failing update is retried tomorrow, not on every trigger; what was\nrefused is reported by name.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 119,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "postDue",
                    "static": false,
                    "visibility": "private",
                    "signature": "postDue(): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 130,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "publishDue",
                    "static": false,
                    "visibility": "private",
                    "signature": "publishDue(): int",
                    "doc": "A scheduled post goes live as the reference publishes it: status only,\ndates and modified untouched, term counts refreshed. With plugins\nloaded it goes through check_and_publish_future_post, the reference's\nown publish_future_post work, so they hear publish_post and the\ntransition; a plugin that throws on one post holds back no other.",
                    "shapes": [],
                    "params": [],
                    "line": 145,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "sweepTransients",
                    "static": false,
                    "visibility": "private",
                    "signature": "sweepTransients(): int",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 167,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "sweepThrottle",
                    "static": false,
                    "visibility": "private",
                    "signature": "sweepThrottle(): int",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 181,
                    "end": 184
                },
                {
                    "routes": [],
                    "name": "lock",
                    "static": false,
                    "visibility": "private",
                    "signature": "lock(): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 186,
                    "end": 199
                },
                {
                    "routes": [],
                    "name": "unlock",
                    "static": false,
                    "visibility": "private",
                    "signature": "unlock(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 201,
                    "end": 205
                }
            ]
        },
        {
            "name": "Minn\\Db",
            "short": "Db",
            "namespace": "Minn",
            "kind": "final class",
            "file": "public/minn/src/Minn/Db.php",
            "lines": 370,
            "doc": "The one door to the database. Every query is a prepared statement; the\nplaceholder types are derived from the PHP values, so callers pass plain\narrays and never spell out \"issd\". A parameter that is a list stands for\na list of values: its \"?\" becomes as many placeholders as the list is\nlong, so \"post_type IN (?)\" takes the types themselves.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\ActivityChart",
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Auth\\AuthCookies",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\LoginThrottle",
                "Minn\\Auth\\Roles",
                "Minn\\Blocks\\Dynamic\\Archives",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\SyncedPattern",
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Renderer",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\Comments",
                "Minn\\Content\\Links",
                "Minn\\Content\\Menus",
                "Minn\\Content\\PostSlugs",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Revisions",
                "Minn\\Content\\RowCache",
                "Minn\\Content\\Site",
                "Minn\\Content\\Terms",
                "Minn\\Content\\Users",
                "Minn\\Context",
                "Minn\\Cron\\Cron",
                "Minn\\Engine",
                "Minn\\Extension\\Seams",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\Canonical",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Mail\\Mailer",
                "Minn\\Ops\\Diagnostics",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\Subjects",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UserObject",
                "Minn\\Rest\\UsersController",
                "Minn\\Runtime\\CommentQuery",
                "Minn\\Runtime\\DbDelta",
                "Minn\\Runtime\\Meta",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\PostLookup",
                "Minn\\Runtime\\PostQuery",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TermQuery",
                "Minn\\Runtime\\TermWriter",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\QueryClasses",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplateWriter",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\UserStyles"
            ],
            "constructor": {
                "signature": "__construct(mysqli $connection, string $prefix)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "connection",
                        "type": "mysqli",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "prefix",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 46,
                "end": 50
            },
            "cases": [],
            "constants": [
                {
                    "name": "INCOMPATIBLE_MODES",
                    "value": "array (   0 => 'NO_ZERO_DATE',   1 => 'ONLY_FULL_GROUP_BY',   2 => 'STRICT_TRANS_TABLES',   3 => 'STRICT_ALL_TABLES',   4 => 'TRADITIONAL',   5 => 'ANSI', )",
                    "doc": "The SQL modes WordPress turns off for its session (wpdb's incompatible modes): strictness and the modes that change what queries mean.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "shared",
                    "type": "?self",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "inTransaction",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "Whether a transaction this door opened is still open, so a nested call joins it instead of starting another.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "connection",
                    "type": "mysqli",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "prefix",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writeListeners",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "optionSource",
                    "type": "?Closure",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "columnLength",
                    "static": true,
                    "visibility": "public",
                    "signature": "columnLength(string $type): array|false",
                    "doc": "The most a column of a MySQL type holds, as wpdb::get_col_length\nanswers: characters for char and varchar, bytes for the binary, blob\nand text types; false for any other type.",
                    "shapes": [
                        "@return array{type: string, length: int}|false"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": true,
                    "visibility": "public",
                    "signature": "current(): self",
                    "doc": "The connection the request being answered speaks through: its\nruntime's own, so nothing deep in a render can reach a connection\nbelonging to another request. With no runtime (the command line, the\nunit suite) it is the process's own connection.\n\nThis is the one place in the core that asks the runtime anything; the\nalternative is a database door threaded through every renderer, and\nthe seam is here until that threading is done.",
                    "shapes": [],
                    "params": [],
                    "line": 62,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "shared",
                    "static": true,
                    "visibility": "public",
                    "signature": "shared(): self",
                    "doc": "The one connection for this process, opened from wp-config's constants\non first use, its session without the incompatible modes, as\nWordPress's own connection is (a plugin's insert that leaves out a text\ncolumn then succeeds, as it does there).",
                    "shapes": [],
                    "params": [],
                    "line": 76,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "sessionModes",
                    "static": true,
                    "visibility": "public",
                    "signature": "sessionModes(string $modes): string",
                    "doc": "The session's modes: the server's, less the reference's incompatible\nones and NO_BACKSLASH_ESCAPES, which the engine's own literal escaping\n(Query\\Sql) relies on being off. Plugins see only the reference's list\n(incompatible_sql_modes).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "modes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "compatibleModes",
                    "static": true,
                    "visibility": "public",
                    "signature": "compatibleModes(string $modes, array $incompatible): string",
                    "doc": "A comma-separated SQL mode list without the incompatible ones (any case).",
                    "shapes": [
                        "@param list<string> $incompatible"
                    ],
                    "params": [
                        {
                            "name": "modes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "incompatible",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "setModes",
                    "static": false,
                    "visibility": "public",
                    "signature": "setModes(string $modes): void",
                    "doc": "Sets this session's SQL modes, never NO_BACKSLASH_ESCAPES: the\nengine's literals escape quotes with a backslash (Query\\Sql), which\nthat mode would turn into a plain character, so a set_sql_mode()\nasking for it gets every other mode it named.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "modes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "connection",
                    "static": false,
                    "visibility": "public",
                    "signature": "connection(): mysqli",
                    "doc": "The underlying mysqli handle, for the facade's wpdb.",
                    "shapes": [],
                    "params": [],
                    "line": 121,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "escape",
                    "static": false,
                    "visibility": "public",
                    "signature": "escape(string $value): string",
                    "doc": "A value escaped for direct interpolation into SQL, for callers that build their own statements.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "prefix",
                    "static": false,
                    "visibility": "public",
                    "signature": "prefix(): string",
                    "doc": "The table prefix from wp-config.",
                    "shapes": [],
                    "params": [],
                    "line": 133,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "table",
                    "static": false,
                    "visibility": "public",
                    "signature": "table(string $name): string",
                    "doc": "`posts` becomes `wp_posts`; the prefix comes from wp-config.php.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "rows",
                    "static": false,
                    "visibility": "public",
                    "signature": "rows(string $sql, array $params = array ( )): array",
                    "doc": "Every row of a prepared query, as associative arrays.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "row",
                    "static": false,
                    "visibility": "public",
                    "signature": "row(string $sql, array $params = array ( )): ?array",
                    "doc": "The first row of a prepared query, or null.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "value",
                    "static": false,
                    "visibility": "public",
                    "signature": "value(string $sql, array $params = array ( )): string|int|float|null",
                    "doc": "The first column of the first row, or null when there is no row.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "execute",
                    "static": false,
                    "visibility": "public",
                    "signature": "execute(string $sql, array $params = array ( )): int",
                    "doc": "Runs a write and returns the affected row count.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "onWrite",
                    "static": true,
                    "visibility": "public",
                    "signature": "onWrite(string $table, Closure $listener): void",
                    "doc": "Asks to be told whenever a write statement names a table (Content\\RowCache drops what it kept from it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "listener",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 183,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "wrote",
                    "static": true,
                    "visibility": "public",
                    "signature": "wrote(string $sql): void",
                    "doc": "Tells the listeners of every table a write statement names, whichever\ndoor ran it (this one, or the facade's wpdb for plugin code). A name\nthat merely contains another (wp_postmeta for posts) is not it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "expand",
                    "static": true,
                    "visibility": "public",
                    "signature": "expand(string $sql, array $params): array",
                    "doc": "Rewrites every \"?\" whose parameter is a list into that many\nplaceholders, and flattens the values to match, so \"IN (?)\" becomes\n\"IN (?, ?, ?)\". An empty list becomes NULL, which nothing is IN, so a\ncaller that means \"everything\" when the list is empty says so itself.",
                    "shapes": [
                        "@param list<mixed> $params",
                        "@return array{0: string, 1: list<mixed>}"
                    ],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "transaction",
                    "static": false,
                    "visibility": "public",
                    "signature": "transaction(callable $work): mixed",
                    "doc": "Runs a unit of work as one transaction: everything the closure writes\nlands, or none of it does. The closure's return value is passed back.\n\nA transaction already open is joined rather than nested, since the\nstorage engine has no nested transactions; the outermost call is the\none that commits. A table that cannot do transactions (MyISAM, which\nno WordPress core table uses) silently keeps each write, which is the\nbehaviour there was before this existed.",
                    "shapes": [
                        "@param callable(): T $work"
                    ],
                    "params": [
                        {
                            "name": "work",
                            "type": "callable",
                            "shape": "callable(): T",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 296,
                    "end": 319
                },
                {
                    "routes": [],
                    "name": "insertId",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertId(): int",
                    "doc": "The id the last INSERT produced.",
                    "shapes": [],
                    "params": [],
                    "line": 322,
                    "end": 325
                },
                {
                    "routes": [],
                    "name": "option",
                    "static": false,
                    "visibility": "public",
                    "signature": "option(string $name): ?string",
                    "doc": "One option's stored value, or null when it is unset; home and siteurl\nanswer to WP_HOME and WP_SITEURL. Once the runtime boots, the read is\nits option store's (the autoloaded list, wp_cache's options group),\nso the engine's own reads cost no query each, as get_option()'s don't.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 336,
                    "end": 339
                },
                {
                    "routes": [],
                    "name": "readOptionsThrough",
                    "static": true,
                    "visibility": "public",
                    "signature": "readOptionsThrough(?Closure $source): void",
                    "doc": "Where option reads come from from now on: the runtime's option store, or null for the row itself.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "source",
                            "type": "?Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 342,
                    "end": 345
                },
                {
                    "routes": [],
                    "name": "configured",
                    "static": true,
                    "visibility": "public",
                    "signature": "configured(string $name): ?string",
                    "doc": "What wp-config.php sets for an option, or null: WP_HOME and WP_SITEURL,\nwhen defined, stand for home and siteurl on every read, as on the\nreference (_config_wp_home), without a trailing slash.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 352,
                    "end": 356
                },
                {
                    "routes": [],
                    "name": "storedOption",
                    "static": false,
                    "visibility": "public",
                    "signature": "storedOption(string $name): ?string",
                    "doc": "One option's row as stored, whatever wp-config.php says, or null when it is unset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 359,
                    "end": 366
                },
                {
                    "routes": [],
                    "name": "placeholders",
                    "static": true,
                    "visibility": "private",
                    "signature": "placeholders(string $sql): array",
                    "doc": "The statement split into placeholders and everything between them. A\n\"?\" inside a quoted string is text, not a placeholder.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 249,
                    "end": 280
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "private",
                    "signature": "run(string $sql, array $params): mysqli_stmt",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 368,
                    "end": 385
                }
            ]
        },
        {
            "name": "Minn\\Engine",
            "short": "Engine",
            "namespace": "Minn",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Engine.php",
            "lines": 335,
            "doc": "The engine's front door. An unmodified wp-config.php ends by requiring\nwp-settings.php, which is the engine's own boot file; it hands off here.\nREST is dispatched first (from the path or from ?rest_route=), then the\nadmin, the login endpoint, and finally the public site.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\AdminTypes",
                "Minn\\Admin\\App",
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\Appearance",
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\HiddenIntegrations",
                "Minn\\Admin\\Translations",
                "Minn\\Auth\\AuthCookies",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\Cookie",
                "Minn\\Auth\\LoginThrottle",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Auth\\Salts",
                "Minn\\Auth\\Sessions",
                "Minn\\Auth\\SignIn",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Content\\SiteIcon",
                "Minn\\Content\\Users",
                "Minn\\Context",
                "Minn\\Cron\\Cron",
                "Minn\\Db",
                "Minn\\Extension\\Extensions",
                "Minn\\Extension\\Loader",
                "Minn\\Extension\\Seams",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\AssetsController",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\Resolution",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Failure",
                "Minn\\Http\\Kernel",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Router",
                "Minn\\I18n\\Gettext",
                "Minn\\Login\\LoginController",
                "Minn\\Login\\ServeLogin",
                "Minn\\RestError",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\Types",
                "Minn\\Runtime\\AjaxController",
                "Minn\\Runtime\\DebugMode",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\Plugins",
                "Minn\\Runtime\\Recovery",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\ClassicTheme",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Cli\\Runtime",
                "Minn\\Ops\\Directory"
            ],
            "constructor": {
                "signature": "__construct(string $version, string $engineDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "version",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 71,
                "end": 76
            },
            "cases": [],
            "constants": [
                {
                    "name": "WP_VERSION",
                    "value": "'7.1.3'",
                    "doc": "The WordPress release whose contracts the runtime speaks; wp-includes/version.php says the same.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "version",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "the minn/ folder: the engine's own files (assets, data, the admin bundle)",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "serve",
                    "static": false,
                    "visibility": "public",
                    "signature": "serve(): void",
                    "doc": "The front door: answer the request that arrived and send it. This is\nthe only place the engine touches the world, so everything under it\nis a function of a request, callable more than once in a process.",
                    "shapes": [],
                    "params": [],
                    "line": 83,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "answer",
                    "static": false,
                    "visibility": "public",
                    "signature": "answer(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The response for one request, whatever happens: a database that\ncannot be reached, salts that are not set, or a failure anywhere\nunderneath, each answered in the language the request asked in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "restRoute",
                    "static": true,
                    "visibility": "private",
                    "signature": "restRoute(Minn\\Http\\Request $request): ?string",
                    "doc": "The REST route a request names, in the path or in ?rest_route=, or null when it is not a REST request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "bootRuntimeForRest",
                    "static": false,
                    "visibility": "private",
                    "signature": "bootRuntimeForRest(Minn\\Context $context, Minn\\Rest\\Api $api, string $route): void",
                    "doc": "The WordPress runtime for a REST request: the caller the REST layer\nresolved is the reader, plugins load, and rest_api_init fires so\ntheir routes answer after the engine's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "context",
                            "type": "Minn\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "api",
                            "type": "Minn\\Rest\\Api",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "recheckNonce",
                    "static": true,
                    "visibility": "private",
                    "signature": "recheckNonce(Minn\\Rest\\Api $api, Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "A plugin's nonce lifetime (nonce_life) is heard only once plugins\nload: a cookie caller's nonce is checked again under it, as the\nreference checks it. A caller the default lifetime refused was nobody\nwhile plugins loaded; when the plugin's lifetime proves the nonce, that\nuser reads the request from here (unless plugin code named someone).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "api",
                            "type": "Minn\\Rest\\Api",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "adoptSettledUser",
                    "static": true,
                    "visibility": "private",
                    "signature": "adoptSettledUser(Minn\\Rest\\Api $api, Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "The user plugin code settled (determine_current_user) as the REST\ncaller, as the reference's cookie check leaves it: a request a\nplugin signs in by its own token is that user; a sign-in cookie\nvouches only for its own user (another one fails its nonce, and\nwithout a nonce the request is nobody, plugin code included).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "api",
                            "type": "Minn\\Rest\\Api",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 199,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "markThemedRequest",
                    "static": true,
                    "visibility": "private",
                    "signature": "markThemedRequest(Minn\\Http\\Request $request): void",
                    "doc": "WordPress's index.php says its requests use themes before any plugin\nloads; its own scripts (sign-in, the admin, cron, XML-RPC) do not, and\nneither does Minn Admin (probe load-remaining).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 223,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "armRecoveryPause",
                    "static": true,
                    "visibility": "private",
                    "signature": "armRecoveryPause(Minn\\Db $db, Minn\\Http\\Request $request): void",
                    "doc": "With the database in hand, a fatal during boot can be blamed on the\nextension it came from; the second inside ten minutes pauses it, so\nthe next request comes back without it. The window in which this\napplies is opened by Plugins::load. Only a request that carries\nnothing a visitor chose counts: an extension that fails on some input\nfails for that input alone, and a visitor could otherwise pause it for\neveryone with two requests.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 240,
                    "end": 262
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": true,
                    "visibility": "private",
                    "signature": "plain(Minn\\Http\\Request $request): bool",
                    "doc": "Whether a request carries nothing a visitor chose but its path: a GET or HEAD with no query, body, upload or cookie.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 265,
                    "end": 269
                },
                {
                    "routes": [],
                    "name": "handle",
                    "static": false,
                    "visibility": "private",
                    "signature": "handle(Minn\\Db $db, Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 330
                },
                {
                    "routes": [],
                    "name": "frontPipeline",
                    "static": false,
                    "visibility": "private",
                    "signature": "frontPipeline(Minn\\Context $context, Minn\\Http\\Request $request, Minn\\Runtime\\Runtime $runtime, Minn\\Content\\Users $users, Minn\\Auth\\Cookie $cookie, Minn\\Auth\\Authenticator $authenticator, Minn\\Admin\\App $app, mixed $session, Minn\\Front\\Resolver $resolver, Minn\\Front\\Permalinks $permalinks, ?Minn\\Theme\\Theme $theme, ?Minn\\Theme\\ClassicTheme $classicTheme): Minn\\Http\\Response",
                    "doc": "The themed front, admin app, and probe pipeline; split out so a mid-request ServeLogin signal can unwind it cleanly.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "context",
                            "type": "Minn\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "users",
                            "type": "Minn\\Content\\Users",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "cookie",
                            "type": "Minn\\Auth\\Cookie",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authenticator",
                            "type": "Minn\\Auth\\Authenticator",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "app",
                            "type": "Minn\\Admin\\App",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "session",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolver",
                            "type": "Minn\\Front\\Resolver",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "theme",
                            "type": "?Minn\\Theme\\Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "classicTheme",
                            "type": "?Minn\\Theme\\ClassicTheme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 333,
                    "end": 399
                }
            ]
        },
        {
            "name": "Minn\\Extension\\Extension",
            "short": "Extension",
            "namespace": "Minn\\Extension",
            "kind": "interface",
            "file": "public/minn/src/Minn/Extension/Extension.php",
            "lines": 5,
            "doc": "What a Minn extension is: a class the engine constructs once per request\nand asks to register what it provides. Everything it can touch is on the\nSeams object; there is no global state to reach for.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Extension\\Seams"
            ],
            "usedBy": [
                "Minn\\Extension\\Loader"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Extension\\Seams $minn): void",
                    "doc": "Registers the extension's seams.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "minn",
                            "type": "Minn\\Extension\\Seams",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 15
                }
            ]
        },
        {
            "name": "Minn\\Extension\\Extensions",
            "short": "Extensions",
            "namespace": "Minn\\Extension",
            "kind": "final class",
            "file": "public/minn/src/Minn/Extension/Extensions.php",
            "lines": 14,
            "doc": "Where the engine looks for the seams an extension registered. The\nrequest's runtime holds them, so nothing here keeps state of its own\nand a request cannot inherit the extensions of the one before it.\nBefore the front has loaded any (REST and the command line never do)\nthere are none.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Extension\\SeamRunner",
                "Minn\\Extension\\Seams",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Renderer",
                "Minn\\Engine",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "set",
                    "static": true,
                    "visibility": "public",
                    "signature": "set(Minn\\Extension\\Seams $seams): void",
                    "doc": "Installs the seams for this request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "seams",
                            "type": "Minn\\Extension\\Seams",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 22
                },
                {
                    "routes": [],
                    "name": "runner",
                    "static": true,
                    "visibility": "public",
                    "signature": "runner(): ?Minn\\Extension\\SeamRunner",
                    "doc": "The engine side of the seams, if any.",
                    "shapes": [],
                    "params": [],
                    "line": 25,
                    "end": 28
                }
            ]
        },
        {
            "name": "Minn\\Extension\\Loader",
            "short": "Loader",
            "namespace": "Minn\\Extension",
            "kind": "final class",
            "file": "public/minn/src/Minn/Extension/Loader.php",
            "lines": 129,
            "doc": "Finds extensions under wp-content/plugins and wp-content/mu-plugins,\ndecides which are active, autoloads them, and asks each to register.\nAn extension that throws is logged and skipped; the page still renders.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Extension\\Extension",
                "Minn\\Extension\\Manifest",
                "Minn\\Extension\\Seams",
                "Minn\\Json",
                "Minn\\Runtime\\Plugins",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\PluginCommand",
                "Minn\\Content\\PluginState",
                "Minn\\Engine",
                "Minn\\Ops\\InstalledSoftware",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(string $contentDir, Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "contentDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 27
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "found",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "active",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "contentDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "found",
                    "static": false,
                    "visibility": "public",
                    "signature": "found(): array",
                    "doc": "Every extension manifest on disk.",
                    "shapes": [
                        "@return list<Manifest> every extension on disk"
                    ],
                    "params": [],
                    "line": 34,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "refresh",
                    "static": false,
                    "visibility": "public",
                    "signature": "refresh(): void",
                    "doc": "Forgets the cached activation list after an option write.",
                    "shapes": [],
                    "params": [],
                    "line": 50,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "active",
                    "static": false,
                    "visibility": "public",
                    "signature": "active(): array",
                    "doc": "The manifests that are active.",
                    "shapes": [
                        "@return list<Manifest> the extensions this site has switched on"
                    ],
                    "params": [],
                    "line": 60,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "declaredTypes",
                    "static": false,
                    "visibility": "public",
                    "signature": "declaredTypes(): array",
                    "doc": "Extra post types declared by active extensions, keyed by slug.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 87,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "replacements",
                    "static": false,
                    "visibility": "public",
                    "signature": "replacements(): array",
                    "doc": "Which active WordPress plugin files an extension stands in for. @return array<string, string> plugin file => extension slug",
                    "shapes": [
                        "@return array<string, string> plugin file => extension slug"
                    ],
                    "params": [],
                    "line": 102,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(Minn\\Extension\\Seams $seams): void",
                    "doc": "Registers every active extension, each on seams of its own; one that throws adds nothing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "seams",
                            "type": "Minn\\Extension\\Seams",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "autoload",
                    "static": true,
                    "visibility": "private",
                    "signature": "autoload(Minn\\Extension\\Manifest $manifest): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "manifest",
                            "type": "Minn\\Extension\\Manifest",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 145
                }
            ]
        },
        {
            "name": "Minn\\Extension\\Manifest",
            "short": "Manifest",
            "namespace": "Minn\\Extension",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Extension/Manifest.php",
            "lines": 78,
            "doc": "minn.json, read as data. A folder under wp-content/plugins (or\nmu-plugins) with this file is an extension; the same folder may also be\na WordPress plugin, in which case the two share a name and a version.\n\n{\n\"name\": \"Block Visibility for Minn\",\n\"version\": \"1.0.0\",\n\"license\": \"MIT\",\n\"replaces\": [\"block-visibility/block-visibility.php\"],\n\"autoload\": {\"Minn\\\\Ext\\\\BlockVisibility\\\\\": \"src/\"},\n\"extension\": \"Minn\\\\Ext\\\\BlockVisibility\\\\Extension\",\n\"shortcodes\": [\"example_tag\"],\n\"blocks\": [\"vendor/block\"],\n\"types\": [{\"slug\": \"zz_note\", \"name\": \"Notes\", \"rest_base\": \"zz-note\"}],\n\"needs\": {\"http\": [\"https://api.example.com/\"]}\n}\n\n\"replaces\" names the WordPress plugin files whose behaviour this\nextension stands in for; the extension is active whenever one of them is\nin active_plugins, or when its own folder is listed there, or when it is\nnamed in the minn_active_extensions option. \"shortcodes\" and \"blocks\"\nare the content tokens preflight treats as provided instead of missing.\n\"types\" are extra post types the engine should serve on wp/v2.\n\"needs\" says what the extension reaches outside the process: \"http\" is\nthe URL prefixes its $minn->http may request (true for any public host).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Cli\\Preflight",
                "Minn\\Content\\PluginState",
                "Minn\\Extension\\Loader",
                "Minn\\Extension\\Seams",
                "Minn\\Ops\\Packages",
                "Minn\\Rest\\PluginsController"
            ],
            "constructor": {
                "signature": "__construct(string $slug, string $dir, string $name, string $version, string $license, array $replaces, array $autoload, string $extension, string $covers = '', array $shortcodes = array ( ), array $blocks = array ( ), array $types = array ( ), ?array $http = NULL)",
                "doc": "",
                "shapes": [
                    "@param list<string> $replaces",
                    "@param array<string, string> $autoload namespace prefix => directory",
                    "@param list<string> $shortcodes",
                    "@param list<string> $blocks",
                    "@param list<array<string, mixed>> $types"
                ],
                "params": [
                    {
                        "name": "slug",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "dir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "name",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "version",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "license",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "replaces",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "autoload",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": "namespace prefix => directory"
                    },
                    {
                        "name": "extension",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "covers",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "shortcodes",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": ""
                    },
                    {
                        "name": "blocks",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "array",
                        "shape": "list<array<string, mixed>>",
                        "default": "array ( )",
                        "doc": ""
                    },
                    {
                        "name": "http",
                        "type": "?array",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 45,
                "end": 62
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "slug",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "dir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "name",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "version",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "license",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "replaces",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "autoload",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "extension",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "covers",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "what of the replaced plugin this provides, when not all of it",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "shortcodes",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "blocks",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "?array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $dir): ?self",
                    "doc": "A folder's minn.json, or null when there is none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "http",
                    "static": true,
                    "visibility": "private",
                    "signature": "http(mixed $asked): ?array",
                    "doc": "needs.http as a grant: true for any public host, or a URL prefix (or a\nlist of them) every request must start with; null when the manifest\ndoes not ask. A prefix naming only a host is closed with \"/\", so\nhttps://api.example.com does not also admit api.example.com.evil.net.",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "asked",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 112
                }
            ]
        },
        {
            "name": "Minn\\Extension\\Registrations",
            "short": "Registrations",
            "namespace": "Minn\\Extension",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Extension/Registrations.php",
            "lines": 25,
            "doc": "Everything the extensions registered for this request, handed from Seams to the runner once.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Extension\\SeamRunner",
                "Minn\\Extension\\Seams"
            ],
            "constructor": {
                "signature": "__construct(array $blockGates, array $blockFilters, array $shortcodes, array $contentFilters, array $head, array $footer, array $bodyClasses, array $documentFilters, ?Closure $title)",
                "doc": "",
                "shapes": [
                    "@param list<Closure> $blockGates",
                    "@param list<Closure> $blockFilters",
                    "@param array<string, Closure> $shortcodes",
                    "@param list<Closure> $contentFilters",
                    "@param list<Closure> $head",
                    "@param list<Closure> $footer",
                    "@param list<string> $bodyClasses",
                    "@param list<Closure> $documentFilters"
                ],
                "params": [
                    {
                        "name": "blockGates",
                        "type": "array",
                        "shape": "list<Closure>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "blockFilters",
                        "type": "array",
                        "shape": "list<Closure>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "shortcodes",
                        "type": "array",
                        "shape": "array<string, Closure>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentFilters",
                        "type": "array",
                        "shape": "list<Closure>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "head",
                        "type": "array",
                        "shape": "list<Closure>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "footer",
                        "type": "array",
                        "shape": "list<Closure>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bodyClasses",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "documentFilters",
                        "type": "array",
                        "shape": "list<Closure>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "title",
                        "type": "?Closure",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "blockGates",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "blockFilters",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "shortcodes",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "contentFilters",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "head",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "footer",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "bodyClasses",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "documentFilters",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "title",
                    "type": "?Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Extension\\SeamRunner",
            "short": "SeamRunner",
            "namespace": "Minn\\Extension",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Extension/SeamRunner.php",
            "lines": 79,
            "doc": "The engine's side of the seams: what the loader collected, called at the\nright moment and in registration order. An extension never sees this\nclass; it sees Seams, which is only the eight registrations.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Content\\PostRecord",
                "Minn\\Extension\\Registrations",
                "Minn\\Extension\\Seams",
                "Minn\\Extension\\Shortcodes"
            ],
            "usedBy": [
                "Minn\\Extension\\Extensions",
                "Minn\\Extension\\Seams",
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Extension\\Seams $seams, Minn\\Extension\\Registrations $registered)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "seams",
                        "type": "Minn\\Extension\\Seams",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "registered",
                        "type": "Minn\\Extension\\Registrations",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "seams",
                    "type": "Minn\\Extension\\Seams",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "registered",
                    "type": "Minn\\Extension\\Registrations",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "allowsBlock",
                    "static": false,
                    "visibility": "public",
                    "signature": "allowsBlock(Minn\\Blocks\\Block $block): bool",
                    "doc": "Whether every block gate lets a block render.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "filterBlock",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterBlock(Minn\\Blocks\\Block $block, string $html): string",
                    "doc": "A block's HTML through every block filter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "filterContent",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterContent(string $html, Minn\\Content\\PostRecord $post): string",
                    "doc": "Shortcodes, then the content filters, over rendered post content. An\nextension's filter is promised the post as a row (contracts/extensions.md),\nso a record is handed over as one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "title",
                    "static": false,
                    "visibility": "public",
                    "signature": "title(string $title): string",
                    "doc": "The document title through the title filter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "head",
                    "static": false,
                    "visibility": "public",
                    "signature": "head(): string",
                    "doc": "What the extensions add to the head.",
                    "shapes": [],
                    "params": [],
                    "line": 65,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "footer",
                    "static": false,
                    "visibility": "public",
                    "signature": "footer(): string",
                    "doc": "What the extensions add to the footer.",
                    "shapes": [],
                    "params": [],
                    "line": 71,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "bodyClasses",
                    "static": false,
                    "visibility": "public",
                    "signature": "bodyClasses(): array",
                    "doc": "The body classes the extensions add.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 81,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "filterDocument",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterDocument(string $html): string",
                    "doc": "The whole document through every document filter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 93
                }
            ]
        },
        {
            "name": "Minn\\Extension\\Seams",
            "short": "Seams",
            "namespace": "Minn\\Extension",
            "kind": "final class",
            "file": "public/minn/src/Minn/Extension/Seams.php",
            "lines": 145,
            "doc": "Where an extension can take part in a request: eight typed registrations,\nthe request they run in, and the outgoing HTTP its minn.json asks for.\nThis is the whole surface an extension sees. Each extension registers on\nits own (forExtension), and what it registered joins the request's once\nits register() returns (adopt). The engine calls what was registered\nthrough SeamRunner, at the right moment and in registration order.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Extension\\Manifest",
                "Minn\\Extension\\Registrations",
                "Minn\\Extension\\SeamRunner",
                "Minn\\Http",
                "Minn\\Http\\Request"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Extension\\Extension",
                "Minn\\Extension\\Extensions",
                "Minn\\Extension\\Loader",
                "Minn\\Extension\\SeamRunner",
                "Minn\\Extension\\Shortcodes"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Http\\Request $request, Minn\\Content\\Reader $reader, ?Minn\\Http $http = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "request",
                        "type": "Minn\\Http\\Request",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "reader",
                        "type": "Minn\\Content\\Reader",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "http",
                        "type": "?Minn\\Http",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 47,
                "end": 55
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "blockGates",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "blockFilters",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "shortcodes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "contentFilters",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "head",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "footer",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "bodyClasses",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "documentFilters",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "title",
                    "type": "?Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "Outgoing HTTP, bound to the hosts the extension's needs.http lists; a client that throws when it asked for none.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "request",
                    "type": "Minn\\Http\\Request",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "reader",
                    "type": "Minn\\Content\\Reader",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forExtension",
                    "static": false,
                    "visibility": "public",
                    "signature": "forExtension(Minn\\Extension\\Manifest $manifest): self",
                    "doc": "The seams one extension registers on: this request, and the outgoing\nHTTP its manifest grants. A manifest without needs.http gets a client\nthat throws at its first request, naming the key to add.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "manifest",
                            "type": "Minn\\Extension\\Manifest",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "adopt",
                    "static": false,
                    "visibility": "public",
                    "signature": "adopt(self $extension): void",
                    "doc": "Takes on what one extension registered, after its register() returned,\nso an extension that throws half-way adds nothing. A closure the\nengine hands seams to is handed that extension's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "extension",
                            "type": "self",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "gateBlocks",
                    "static": false,
                    "visibility": "public",
                    "signature": "gateBlocks(Closure $gate): void",
                    "doc": "Decides whether a block renders at all; the first gate to answer false wins.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "gate",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 102
                },
                {
                    "routes": [],
                    "name": "filterBlocks",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterBlocks(Closure $filter): void",
                    "doc": "Rewrites a block's rendered markup.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filter",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "shortcode",
                    "static": false,
                    "visibility": "public",
                    "signature": "shortcode(string $tag, Closure $render): void",
                    "doc": "Renders [tag attr=\"…\"]content[/tag] wherever it appears in post content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "render",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "filterContent",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterContent(Closure $filter): void",
                    "doc": "Rewrites rendered post content (after blocks and shortcodes).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filter",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "head",
                    "static": false,
                    "visibility": "public",
                    "signature": "head(Closure $render): void",
                    "doc": "Markup for the document head (a style, a meta tag, a script).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "render",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "footer",
                    "static": false,
                    "visibility": "public",
                    "signature": "footer(Closure $render): void",
                    "doc": "Markup before </body>.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "render",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "bodyClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "bodyClass(string $class): void",
                    "doc": "Adds a body class.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "title",
                    "static": false,
                    "visibility": "public",
                    "signature": "title(Closure $filter): void",
                    "doc": "Replaces the document title; receives the engine's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filter",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "filterDocument",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterDocument(Closure $filter): void",
                    "doc": "Rewrites the whole themed document before it is sent (what an output buffer did on the reference).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filter",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "registrations",
                    "static": false,
                    "visibility": "public",
                    "signature": "registrations(): Minn\\Extension\\Registrations",
                    "doc": "What was registered, for the engine's runner. Extensions have no reason to call this.",
                    "shapes": [],
                    "params": [],
                    "line": 153,
                    "end": 166
                }
            ]
        },
        {
            "name": "Minn\\Extension\\Shortcodes",
            "short": "Shortcodes",
            "namespace": "Minn\\Extension",
            "kind": "final class",
            "file": "public/minn/src/Minn/Extension/Shortcodes.php",
            "lines": 54,
            "doc": "The shortcode syntax in rendered content: [tag], [tag attr=\"v\" flag],\n[tag]inner[/tag], and [[tag]] as the escaped literal. Unregistered tags\nstay as written, which is what the reference shows for a plugin that is\nnot installed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Extension\\Seams"
            ],
            "usedBy": [
                "Minn\\Extension\\SeamRunner"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(string $html, array $registry, Minn\\Extension\\Seams $seams): string",
                    "doc": "Content with the registered shortcodes run.",
                    "shapes": [
                        "@param array<string, Closure> $registry"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registry",
                            "type": "array",
                            "shape": "array<string, Closure>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "seams",
                            "type": "Minn\\Extension\\Seams",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "public",
                    "signature": "attributes(string $text): array",
                    "doc": "A shortcode's attributes parsed, curly quotes included.",
                    "shapes": [
                        "@return array<string, string> named attributes; bare words keyed by position"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 69
                }
            ]
        },
        {
            "name": "Minn\\Feed\\Charset",
            "short": "Charset",
            "namespace": "Minn\\Feed",
            "kind": "final class",
            "file": "public/minn/src/Minn/Feed/Charset.php",
            "lines": 45,
            "doc": "A feed document as UTF-8. The encoding comes from a byte-order mark,\nthen the XML declaration, then the Content-Type charset, then UTF-8; a\ndocument in another encoding is converted and its declaration rewritten,\nso the parser only ever reads UTF-8.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Feed\\Document"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "toUtf8",
                    "static": true,
                    "visibility": "public",
                    "signature": "toUtf8(string $body, string $contentType = ''): string",
                    "doc": "The document converted to UTF-8, with no byte-order mark.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentType",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "declared",
                    "static": true,
                    "visibility": "public",
                    "signature": "declared(string $body): ?string",
                    "doc": "The encoding the XML declaration names, if it names one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "fromContentType",
                    "static": true,
                    "visibility": "private",
                    "signature": "fromContentType(string $contentType): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "contentType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "convert",
                    "static": true,
                    "visibility": "private",
                    "signature": "convert(string $body, string $encoding): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "encoding",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 56
                }
            ]
        },
        {
            "name": "Minn\\Feed\\Dates",
            "short": "Dates",
            "namespace": "Minn\\Feed",
            "kind": "final class",
            "file": "public/minn/src/Minn/Feed/Dates.php",
            "lines": 16,
            "doc": "Feed dates (RFC 822, W3C, and the looser forms feeds carry) as Unix timestamps; a date without a zone is UTC.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(?string $text): ?int",
                    "doc": "The timestamp, or null when the text names no date.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 26
                }
            ]
        },
        {
            "name": "Minn\\Feed\\Document",
            "short": "Document",
            "namespace": "Minn\\Feed",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Feed/Document.php",
            "lines": 114,
            "doc": "A parsed feed: the tree and the format it was recognized as (the\nreference's type bits: RSS 0.90 1, the 0.9x versions 2 to 32, RSS 1.0 64,\nRSS 2.0 128, Atom 0.3 256, Atom 1.0 512), with the lookups the feed\nobject is built on: the root's children, the channel's, the image's, and\nthe items of every format the document carries.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Feed\\Charset",
                "Minn\\Feed\\Tree"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(array $tree, int $type)",
                "doc": "",
                "shapes": [
                    "@param array{child?: array<string, mixed>} $tree"
                ],
                "params": [
                    {
                        "name": "tree",
                        "type": "array",
                        "shape": "array{child?: array<string, mixed>}",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "type",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 28
            },
            "cases": [],
            "constants": [
                {
                    "name": "NONE",
                    "value": "0",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RSS_090",
                    "value": "1",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RSS_10",
                    "value": "64",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RSS_20",
                    "value": "128",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ATOM_03",
                    "value": "256",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ATOM_10",
                    "value": "512",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RDF",
                    "value": "'http://www.w3.org/1999/02/22-rdf-syntax-ns#'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RSS_VERSIONS",
                    "value": "array (   '0.91' => 4,   '0.92' => 8,   '0.93' => 16,   '0.94' => 32, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "tree",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "type",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $body, string $contentType = ''): self",
                    "doc": "A document read from bytes; the type is NONE when it parsed but is no feed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentType",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "fromTree",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromTree(array $tree): self",
                    "doc": "A document over a tree already parsed (a cached feed), its type read from the root.",
                    "shapes": [
                        "@param array{child?: array<string, mixed>} $tree"
                    ],
                    "params": [
                        {
                            "name": "tree",
                            "type": "array",
                            "shape": "array{child?: array<string, mixed>}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "root",
                    "static": false,
                    "visibility": "public",
                    "signature": "root(): ?array",
                    "doc": "The root element (rss, rdf:RDF or feed), or null.",
                    "shapes": [],
                    "params": [],
                    "line": 62,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "channel",
                    "static": false,
                    "visibility": "public",
                    "signature": "channel(): ?array",
                    "doc": "The channel element: an RSS channel, or the Atom feed itself.",
                    "shapes": [],
                    "params": [],
                    "line": 73,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "image",
                    "static": false,
                    "visibility": "public",
                    "signature": "image(): ?array",
                    "doc": "The image element: inside an RSS 2.0 channel, beside an RSS 1.0 one.",
                    "shapes": [],
                    "params": [],
                    "line": 84,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "feedTags",
                    "static": false,
                    "visibility": "public",
                    "signature": "feedTags(string $ns, string $tag): ?array",
                    "doc": "Children of the root element by namespace and name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ns",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "channelTags",
                    "static": false,
                    "visibility": "public",
                    "signature": "channelTags(string $ns, string $tag): ?array",
                    "doc": "Children of the channel by namespace and name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ns",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "imageTags",
                    "static": false,
                    "visibility": "public",
                    "signature": "imageTags(string $ns, string $tag): ?array",
                    "doc": "Children of the image by namespace and name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ns",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "items",
                    "static": false,
                    "visibility": "public",
                    "signature": "items(): array",
                    "doc": "Every item node, in document order: Atom 1.0 and 0.3 entries, RSS 1.0\nand 0.90 items beside the channel, RSS 2.0 items inside it.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 115,
                    "end": 126
                }
            ]
        },
        {
            "name": "Minn\\Feed\\FeedError",
            "short": "FeedError",
            "namespace": "Minn\\Feed",
            "kind": "final class",
            "file": "public/minn/src/Minn/Feed/FeedError.php",
            "lines": 3,
            "doc": "A feed that could not be read: the message is the one the reference reports.",
            "implements": [
                "Stringable",
                "Throwable"
            ],
            "extends": "RuntimeException",
            "uses": [],
            "usedBy": [
                "Minn\\Feed\\Tree"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": []
        },
        {
            "name": "Minn\\Feed\\Iri",
            "short": "Iri",
            "namespace": "Minn\\Feed",
            "kind": "final class",
            "file": "public/minn/src/Minn/Feed/Iri.php",
            "lines": 109,
            "doc": "URLs in feeds: a reference resolved against its base (RFC 3986), then\nnormalized the way the reference prints them: scheme and host in lower\ncase, the default port dropped, dot segments removed, and every byte a\nURL may not carry (spaces, angle brackets, non-ASCII) percent-encoded.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Feed\\Locator",
                "Minn\\Feed\\Tree"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULT_PORTS",
                    "value": "array (   'http' => 80,   'https' => 443,   'ftp' => 21, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "resolve",
                    "static": true,
                    "visibility": "public",
                    "signature": "resolve(string $base, string $reference): ?string",
                    "doc": "The reference resolved against the base and normalized; null when neither is absolute.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reference",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "clean",
                    "static": true,
                    "visibility": "public",
                    "signature": "clean(string $url): string",
                    "doc": "An absolute URL normalized; anything else returned as given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "split",
                    "static": true,
                    "visibility": "private",
                    "signature": "split(string $url): array",
                    "doc": "",
                    "shapes": [
                        "@return array{scheme: ?string, authority: ?string, path: string, query: ?string, fragment: ?string}"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "merge",
                    "static": true,
                    "visibility": "private",
                    "signature": "merge(array $base, string $path): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "normalize",
                    "static": true,
                    "visibility": "private",
                    "signature": "normalize(array $parts): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "removeDots",
                    "static": true,
                    "visibility": "private",
                    "signature": "removeDots(string $path): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "private",
                    "signature": "encode(string $text, string $allowed): string",
                    "doc": "Percent-encodes every byte outside the unreserved and sub-delimiter sets and the extra characters a component allows.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\Feed\\Locator",
            "short": "Locator",
            "namespace": "Minn\\Feed",
            "kind": "final class",
            "file": "public/minn/src/Minn/Feed/Locator.php",
            "lines": 54,
            "doc": "Feed autodiscovery: the feeds an HTML page names in its\n<link rel=\"alternate\"> elements with a feed type, in page order, each\nresolved against the page (or its <base href>).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Feed\\Iri"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TYPES",
                    "value": "array (   0 => 'application/rss+xml',   1 => 'application/atom+xml',   2 => 'application/rdf+xml',   3 => 'application/xml',   4 => 'text/xml', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "looksLikeFeed",
                    "static": true,
                    "visibility": "public",
                    "signature": "looksLikeFeed(string $body, string $contentType): bool",
                    "doc": "Whether a response looks like a feed document rather than a page or text.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "alternates",
                    "static": true,
                    "visibility": "public",
                    "signature": "alternates(string $html, string $pageUrl): array",
                    "doc": "The feed URLs a page names, resolved, in page order, each once.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pageUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "attributes(string $raw): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 64
                }
            ]
        },
        {
            "name": "Minn\\Feed\\Parts",
            "short": "Parts",
            "namespace": "Minn\\Feed",
            "kind": "final class",
            "file": "public/minn/src/Minn/Feed/Parts.php",
            "lines": 140,
            "doc": "The repeating parts of a feed element read out of the tree as raw\nvalues: links by relation, categories, and enclosures (Media RSS\ncontents, Atom enclosure links, RSS enclosures). The feed object\nsanitizes and wraps them; each raw value travels with the node it came\nfrom, so a relative URL resolves against that node's base.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Feed\\Tree"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "IANA",
                    "value": "'http://www.iana.org/assignments/relation/'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "MEDIA",
                    "value": "'http://search.yahoo.com/mrss/'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "DC",
                    "value": "array (   0 => 'http://purl.org/dc/elements/1.1/',   1 => 'http://purl.org/dc/elements/1.0/', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "links",
                    "static": true,
                    "visibility": "public",
                    "signature": "links(array $child, array $plain, array $more, Closure $iri): array",
                    "doc": "Links by relation: Atom links (rel defaults to alternate, IANA names\nanswer to both spellings), then the RSS-style link elements and the\ngiven extra alternates.",
                    "shapes": [
                        "@param array<string, array<string, list<array<string, mixed>>>> $child the element's children",
                        "@param list<array{0: string, 1: string}> $plain RSS-style link tags, by namespace and name",
                        "@param list<string> $more alternates already in their final form",
                        "@param Closure(string, array<string, mixed>): string $iri a URL as the feed hands it out, given its node",
                        "@return array<string, list<string>>"
                    ],
                    "params": [
                        {
                            "name": "child",
                            "type": "array",
                            "shape": "array<string, array<string, list<array<string, mixed>>>>",
                            "default": null,
                            "doc": "the element's children"
                        },
                        {
                            "name": "plain",
                            "type": "array",
                            "shape": "list<array{0: string, 1: string}>",
                            "default": null,
                            "doc": "RSS-style link tags, by namespace and name"
                        },
                        {
                            "name": "more",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "alternates already in their final form"
                        },
                        {
                            "name": "iri",
                            "type": "Closure",
                            "shape": "Closure(string, array<string, mixed>): string",
                            "default": null,
                            "doc": "a URL as the feed hands it out, given its node"
                        }
                    ],
                    "line": 33,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "categories",
                    "static": true,
                    "visibility": "public",
                    "signature": "categories(array $child): array",
                    "doc": "Categories as raw text: Atom (term, scheme, label), RSS 2.0 (the text,\nthe domain as scheme), Dublin Core subjects.",
                    "shapes": [
                        "@param array<string, array<string, list<array<string, mixed>>>> $child",
                        "@return list<array{term: ?string, scheme: ?string, label: ?string, type: string}>"
                    ],
                    "params": [
                        {
                            "name": "child",
                            "type": "array",
                            "shape": "array<string, array<string, list<array<string, mixed>>>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "enclosures",
                    "static": true,
                    "visibility": "public",
                    "signature": "enclosures(array $item): array",
                    "doc": "An item's enclosures as raw fields, Media RSS contents first (with the\nitem's thumbnails when a content has none of its own), then Atom\nenclosure links, then RSS enclosures. \"node\" is where the URL came from.",
                    "shapes": [
                        "@param array<string, mixed> $item the item's node",
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the item's node"
                        }
                    ],
                    "line": 95,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "thumbnails",
                    "static": true,
                    "visibility": "public",
                    "signature": "thumbnails(array $node): array",
                    "doc": "The media:thumbnail URLs directly under an element, each with its node.",
                    "shapes": [
                        "@param array<string, mixed> $node",
                        "@return list<array{0: string, 1: array<string, mixed>}>"
                    ],
                    "params": [
                        {
                            "name": "node",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "media",
                    "static": true,
                    "visibility": "private",
                    "signature": "media(array $node, array $thumbnails): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $node a media:content element",
                        "@param list<array{0: string, 1: array<string, mixed>}> $thumbnails",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "node",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "a media:content element"
                        },
                        {
                            "name": "thumbnails",
                            "type": "array",
                            "shape": "list<array{0: string, 1: array<string, mixed>}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 154
                }
            ]
        },
        {
            "name": "Minn\\Feed\\Tree",
            "short": "Tree",
            "namespace": "Minn\\Feed",
            "kind": "final class",
            "file": "public/minn/src/Minn/Feed/Tree.php",
            "lines": 146,
            "doc": "A feed document parsed into the nested arrays plugin code reads through\nget_item_tags() and friends: each element is a node holding its own text\n(\"data\", whitespace between children included), its attributes grouped\nby namespace, the xml:base and xml:lang in force, and its children by\nnamespace and local name. Two shapes differ from plain XML: an Atom text\nconstruct of type \"xhtml\" keeps its markup as text, and an RSS title is\nstored HTML-escaped. Named HTML references are read as characters unless\nthe document brings its own DOCTYPE.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Feed\\FeedError",
                "Minn\\Feed\\Iri",
                "Minn\\Support\\KsesEntities"
            ],
            "usedBy": [
                "Minn\\Feed\\Document",
                "Minn\\Feed\\Parts"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "XML",
                    "value": "'http://www.w3.org/XML/1998/namespace'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ATOM_10",
                    "value": "'http://www.w3.org/2005/Atom'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ATOM_03",
                    "value": "'http://purl.org/atom/ns#'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RSS_10",
                    "value": "'http://purl.org/rss/1.0/'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RSS_090",
                    "value": "'http://my.netscape.com/rdf/simple/0.9/'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SEPARATOR",
                    "value": "'\u001f'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "VOID",
                    "value": "array (   0 => 'area',   1 => 'base',   2 => 'br',   3 => 'col',   4 => 'embed',   5 => 'hr',   6 => 'img',   7 => 'input',   8 => 'link',   9 => 'meta',   10 => 'param',   11 => 'source',   12 => 'track',   13 => 'wbr', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "stack",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "root",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "xhtmlDepth",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $utf8): array",
                    "doc": "The document's elements under a root holding only \"child\".",
                    "shapes": [
                        "@return array{child: array<string, array<string, list<array<string, mixed>>>>}"
                    ],
                    "params": [
                        {
                            "name": "utf8",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "prepare",
                    "static": true,
                    "visibility": "private",
                    "signature": "prepare(string $xml): string",
                    "doc": "The document as the parser reads it: HTML references made numeric, the declaration on a line of its own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "xml",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": false,
                    "visibility": "private",
                    "signature": "build(string $xml): array",
                    "doc": "",
                    "shapes": [
                        "@return array{child: array<string, array<string, list<array<string, mixed>>>>}"
                    ],
                    "params": [
                        {
                            "name": "xml",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": false,
                    "visibility": "private",
                    "signature": "open(XMLParser $parser, string $name, array $attributes): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parser",
                            "type": "XMLParser",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "close",
                    "static": false,
                    "visibility": "private",
                    "signature": "close(XMLParser $parser, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parser",
                            "type": "XMLParser",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": false,
                    "visibility": "private",
                    "signature": "text(XMLParser $parser, string $text): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parser",
                            "type": "XMLParser",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 138,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "append",
                    "static": false,
                    "visibility": "private",
                    "signature": "append(string $text): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "split",
                    "static": true,
                    "visibility": "private",
                    "signature": "split(string $name): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string, 1: string} namespace and local name"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "markupAttributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "markupAttributes(array $attributes): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 164
                }
            ]
        },
        {
            "name": "Minn\\Front\\AdminBar",
            "short": "AdminBar",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/AdminBar.php",
            "lines": 326,
            "doc": "The Minn bar on the public site: the same server-rendered chrome the\napp ships (assets/js/bar.js and assets/css/bar.css from the bundle),\nbuilt here for a signed-in reader who can edit. There is no other bar\nand no other admin on the engine, so it is on for everyone who passes\nthe edit_posts gate; the app's per-person opt-in does not apply.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\AdminTypes",
                "Minn\\Admin\\App",
                "Minn\\Admin\\Appearance",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\Nonce",
                "Minn\\Content\\Site",
                "Minn\\Content\\UserRecord",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Auth\\Authenticated $session, Minn\\Auth\\Capabilities $capabilities, Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Admin\\App $app, Minn\\Admin\\Appearance $appearance, Minn\\Admin\\AdminTypes $types)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "session",
                        "type": "Minn\\Auth\\Authenticated",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "app",
                        "type": "Minn\\Admin\\App",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "appearance",
                        "type": "Minn\\Admin\\Appearance",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Admin\\AdminTypes",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 37
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "session",
                    "type": "Minn\\Auth\\Authenticated",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "app",
                    "type": "Minn\\Admin\\App",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "appearance",
                    "type": "Minn\\Admin\\Appearance",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Admin\\AdminTypes",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forReader",
                    "static": true,
                    "visibility": "public",
                    "signature": "forReader(?Minn\\Auth\\Authenticated $session, Minn\\Auth\\Capabilities $capabilities, Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Admin\\App $app, Minn\\Admin\\Appearance $appearance, Minn\\Admin\\AdminTypes $types): ?self",
                    "doc": "The bar for a signed-in editor, or null for anyone else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "session",
                            "type": "?Minn\\Auth\\Authenticated",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "capabilities",
                            "type": "Minn\\Auth\\Capabilities",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "app",
                            "type": "Minn\\Admin\\App",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "appearance",
                            "type": "Minn\\Admin\\Appearance",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "Minn\\Admin\\AdminTypes",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "head",
                    "static": false,
                    "visibility": "public",
                    "signature": "head(): string",
                    "doc": "The stylesheet link for the head.",
                    "shapes": [],
                    "params": [],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Front\\Resolution $resolution): string",
                    "doc": "The bar markup, its config, and the script, for the end of the body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "t",
                    "static": true,
                    "visibility": "private",
                    "signature": "t(string $text): string",
                    "doc": "A string of Minn Admin's, in the site's language (its own text domain, as the plugin asks for it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "markup",
                    "static": false,
                    "visibility": "private",
                    "signature": "markup(?array $status, string $editUrl, string $editLabel): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "status",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "editUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "editLabel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "siteMenu",
                    "static": false,
                    "visibility": "private",
                    "signature": "siteMenu(Closure $can): string",
                    "doc": "The site menu: the app's main views this user may open.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "can",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "statusMenu",
                    "static": false,
                    "visibility": "private",
                    "signature": "statusMenu(?array $status, Closure $can): string",
                    "doc": "The status menu, only when the page carries a site status. @param array<string, mixed>|null $status",
                    "shapes": [
                        "@param array<string, mixed>|null $status"
                    ],
                    "params": [
                        {
                            "name": "status",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "can",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 181
                },
                {
                    "routes": [],
                    "name": "newMenu",
                    "static": false,
                    "visibility": "private",
                    "signature": "newMenu(Closure $can): string",
                    "doc": "The create menu: a post, and a page for those who may edit them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "can",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 184,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "notificationsMenu",
                    "static": true,
                    "visibility": "private",
                    "signature": "notificationsMenu(): string",
                    "doc": "The notifications menu; bar.js fills the items.",
                    "shapes": [],
                    "params": [],
                    "line": 198,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "userMenu",
                    "static": false,
                    "visibility": "private",
                    "signature": "userMenu(Minn\\Content\\UserRecord $user): string",
                    "doc": "The account menu: profile and sign out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 211,
                    "end": 221
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": false,
                    "visibility": "private",
                    "signature": "status(): ?array",
                    "doc": "The status chip: the one thing the engine can say about site\nvisibility is whether search engines are asked to stay away.",
                    "shapes": [
                        "@return array{tone: string, label: string, title: string, sub: string, fix: ?array}|null"
                    ],
                    "params": [],
                    "line": 229,
                    "end": 243
                },
                {
                    "routes": [],
                    "name": "editTarget",
                    "static": false,
                    "visibility": "private",
                    "signature": "editTarget(Minn\\Front\\Resolution $resolution): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string, 1: string, 2: string} url (or ''), label, hint"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 246,
                    "end": 262
                },
                {
                    "routes": [],
                    "name": "commands",
                    "static": false,
                    "visibility": "private",
                    "signature": "commands(string $editUrl, string $editLabel, string $editHint): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "editUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "editLabel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "editHint",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 264,
                    "end": 286
                },
                {
                    "routes": [],
                    "name": "searchTypes",
                    "static": false,
                    "visibility": "private",
                    "signature": "searchTypes(): array",
                    "doc": "post type slug => editor route base, for the palette's content results.",
                    "shapes": [],
                    "params": [],
                    "line": 289,
                    "end": 296
                },
                {
                    "routes": [],
                    "name": "customSchemeStyle",
                    "static": false,
                    "visibility": "private",
                    "signature": "customSchemeStyle(array $appearance): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "appearance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 298,
                    "end": 315
                },
                {
                    "routes": [],
                    "name": "appUrl",
                    "static": false,
                    "visibility": "private",
                    "signature": "appUrl(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 317,
                    "end": 320
                },
                {
                    "routes": [],
                    "name": "appPath",
                    "static": false,
                    "visibility": "private",
                    "signature": "appPath(string $path): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 322,
                    "end": 325
                },
                {
                    "routes": [],
                    "name": "assetUrl",
                    "static": false,
                    "visibility": "private",
                    "signature": "assetUrl(string $relative): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 327,
                    "end": 330
                },
                {
                    "routes": [],
                    "name": "icon",
                    "static": true,
                    "visibility": "private",
                    "signature": "icon(string $paths): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "paths",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 332,
                    "end": 335
                },
                {
                    "routes": [],
                    "name": "gridIcon",
                    "static": true,
                    "visibility": "private",
                    "signature": "gridIcon(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 337,
                    "end": 340
                },
                {
                    "routes": [],
                    "name": "menuItem",
                    "static": true,
                    "visibility": "private",
                    "signature": "menuItem(string $href, string $icon, string $title, string $sub = '', string $meta = ''): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "href",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "icon",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sub",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 342,
                    "end": 350
                }
            ]
        },
        {
            "name": "Minn\\Front\\ArchiveAddresses",
            "short": "ArchiveAddresses",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/ArchiveAddresses.php",
            "lines": 97,
            "doc": "The archives an address may stand for, as the reference answers them:\nthe front, a search, a term's (a category's, a tag's, a plugin\ntaxonomy's), an author's and a date's. Each is the archive when what it\nnames exists (a term by its path's last slug, a valid date; an author's for any\nname); whether its page has posts is the main query's to say, and an\nempty page past the first, or an empty date, is the 404 it decides\n(Theme\\FrontLifecycle::handle404).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Content\\UserRecord",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution"
            ],
            "usedBy": [
                "Minn\\Front\\Resolver",
                "Minn\\Front\\RuleRoutes"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Content\\Terms $terms, Minn\\Front\\Permalinks $permalinks, Closure $readable)",
                "doc": "",
                "shapes": [
                    "@param Closure(PostRecord): bool $readable whether the reader may read a post"
                ],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "readable",
                        "type": "Closure",
                        "shape": "Closure(PostRecord): bool",
                        "default": null,
                        "doc": "whether the reader may read a post"
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 34
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "readable",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "search",
                    "static": false,
                    "visibility": "public",
                    "signature": "search(string $term, int $paged): Minn\\Front\\Resolution",
                    "doc": "A search's results page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "home",
                    "static": false,
                    "visibility": "public",
                    "signature": "home(int $paged): Minn\\Front\\Resolution",
                    "doc": "The front: the static front page when there is one, else the posts listing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "taxonomy",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomy(string $taxonomy, array $slugs, int $paged): Minn\\Front\\Resolution",
                    "doc": "A plugin taxonomy's term archive by its path; a 404 when no term is\nat that path.",
                    "shapes": [
                        "@param list<string> $slugs"
                    ],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slugs",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": false,
                    "visibility": "public",
                    "signature": "term(string $taxonomy, array $slugs, int $paged): Minn\\Front\\Resolution",
                    "doc": "A category's or tag's archive by its path; a 404 when no term is at that path. @param list<string> $slugs",
                    "shapes": [
                        "@param list<string> $slugs"
                    ],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slugs",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "author",
                    "static": false,
                    "visibility": "public",
                    "signature": "author(string $name, int $paged): Minn\\Front\\Resolution",
                    "doc": "An author's archive by nicename: the archive for any name, the author's when one has it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "date",
                    "static": false,
                    "visibility": "public",
                    "signature": "date(array $segments, int $paged): Minn\\Front\\Resolution",
                    "doc": "A date archive by year, month and day; a 404 when the date is not one. @param list<string> $segments",
                    "shapes": [
                        "@param list<string> $segments"
                    ],
                    "params": [
                        {
                            "name": "segments",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "isDate",
                    "static": true,
                    "visibility": "public",
                    "signature": "isDate(int $year, ?int $month, ?int $day): bool",
                    "doc": "Whether a year, month and day (the last two optional, a day only with its month) name a date.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "year",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "month",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "day",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "at",
                    "static": false,
                    "visibility": "private",
                    "signature": "at(string $taxonomy, array $slugs): ?Minn\\Content\\TermRecord",
                    "doc": "The term a slug path names: its last slug's, whatever the segments\nbefore it say (the reference serves /category/any/child/ as the\nchild's archive, unmoved).",
                    "shapes": [
                        "@param list<string> $slugs"
                    ],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slugs",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 110
                }
            ]
        },
        {
            "name": "Minn\\Front\\Archives",
            "short": "Archives",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/Archives.php",
            "lines": 63,
            "doc": "The archive periods wp_get_archives lists: months, years, days and weeks\nthat hold a published post of a type, newest first, each with its post\ncount and archive URL, plus the post-by-post and alphabetical listings.\nLabels come from the caller's date formatter so the site's locale and\nweek start apply; the week label joins the week's first and last day.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Closure $date, Closure $dateLink, Closure $week)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, string): string $date formats a MySQL datetime with a PHP date format",
                    "@param Closure(int, ?int, ?int): string $dateLink the year, month, or day archive URL",
                    "@param Closure(string): array{start: int, end: int} $week the week's first and last second around a datetime"
                ],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "date",
                        "type": "Closure",
                        "shape": "Closure(string, string): string",
                        "default": null,
                        "doc": "formats a MySQL datetime with a PHP date format"
                    },
                    {
                        "name": "dateLink",
                        "type": "Closure",
                        "shape": "Closure(int, ?int, ?int): string",
                        "default": null,
                        "doc": "the year, month, or day archive URL"
                    },
                    {
                        "name": "week",
                        "type": "Closure",
                        "shape": "Closure(string): array{start: int, end: int}",
                        "default": null,
                        "doc": "the week's first and last second around a datetime"
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "date",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "dateLink",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "week",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "periods",
                    "static": false,
                    "visibility": "public",
                    "signature": "periods(string $granularity, string $type, string $order, int $limit, Closure $weekLink, string $where = '', string $join = ''): array",
                    "doc": "The periods of one granularity: monthly, yearly, daily, or weekly; a\nWHERE and JOIN given are the query's (Posts::archiveBuckets).",
                    "shapes": [
                        "@return list<array{period: array{year: int, month: int, day: int, week: int}, url: string, text: string, count: int}>"
                    ],
                    "params": [
                        {
                            "name": "granularity",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "order",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "limit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "weekLink",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "join",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "posts",
                    "static": false,
                    "visibility": "public",
                    "signature": "posts(string $type, string $orderBy, string $order, int $limit, Closure $title, Closure $link, string $where = '', string $join = ''): array",
                    "doc": "The posts themselves, by date or by title.",
                    "shapes": [
                        "@param Closure(int, string): string $title the post's title as displayed (or its id when empty)",
                        "@param Closure(int): string $link",
                        "@return list<array{url: string, text: string, count: int, id: int}>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "orderBy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "order",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "limit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "Closure",
                            "shape": "Closure(int, string): string",
                            "default": null,
                            "doc": "the post's title as displayed (or its id when empty)"
                        },
                        {
                            "name": "link",
                            "type": "Closure",
                            "shape": "Closure(int): string",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "join",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "weekPeriod",
                    "static": false,
                    "visibility": "private",
                    "signature": "weekPeriod(array $bucket, Closure $weekLink): array",
                    "doc": "",
                    "shapes": [
                        "@param array{year: int, week: int, first: string, count: int} $bucket",
                        "@return array{url: string, text: string, count: int}"
                    ],
                    "params": [
                        {
                            "name": "bucket",
                            "type": "array",
                            "shape": "array{year: int, week: int, first: string, count: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "weekLink",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 62
                }
            ]
        },
        {
            "name": "Minn\\Front\\AssetsController",
            "short": "AssetsController",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/AssetsController.php",
            "lines": 42,
            "doc": "The engine's own static assets, served under a reserved path.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(string $assetsDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "assetsDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 24
            },
            "cases": [],
            "constants": [
                {
                    "name": "TYPES",
                    "value": "array (   'css' => 'text/css',   'js' => 'application/javascript', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "EMBED_SCRIPTS",
                    "value": "array (   'wp-embed.min.js' => 'embed-host.js',   'wp-embed-template.min.js' => 'embed-card.js', )",
                    "doc": "The embed scripts, by the reference addresses a page and a card's sourceURL name them at.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "assetsDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn/assets/{path*} (public)"
                    ],
                    "name": "asset",
                    "static": false,
                    "visibility": "public",
                    "signature": "asset(Minn\\Http\\Request $request, string $path): Minn\\Http\\Response",
                    "doc": "One engine asset file.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 37
                },
                {
                    "routes": [
                        "GET /wp-includes/js/{file:wp-embed(?:-template)?\\.min\\.js} (public)"
                    ],
                    "name": "embedScript",
                    "static": false,
                    "visibility": "public",
                    "signature": "embedScript(Minn\\Http\\Request $request, string $file): Minn\\Http\\Response",
                    "doc": "The engine's embed scripts at the addresses the reference serves its own from.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [
                        "GET /wp-includes/js/jquery/{file:[a-z0-9.-]+\\.js} (public)"
                    ],
                    "name": "jquery",
                    "static": false,
                    "visibility": "public",
                    "signature": "jquery(Minn\\Http\\Request $request, string $file): Minn\\Http\\Response",
                    "doc": "The MIT libraries the engine ships, served at the paths the reference registers them under.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 55
                }
            ]
        },
        {
            "name": "Minn\\Front\\AttachmentAddresses",
            "short": "AttachmentAddresses",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/AttachmentAddresses.php",
            "lines": 80,
            "doc": "The addresses an attachment's page answers to besides those its rules\nfind (Front\\RuleTable: a loose one by its slug at the top, any by its\nslug under another address, \"attachment/\" between or not): by id or\nslug in the query (?attachment_id=, ?attachment=), and as a post (?p=,\n?page_id=), which moves to its own page. With\nattachment pages off (wp_attachment_pages_enabled, the default) every\naddress moves to the file itself; with them on, one that is not its own\nmoves to its page. An attachment is readable as its parent is.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Db",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Redirects",
                "Minn\\Front\\Resolution",
                "Minn\\Http\\Request"
            ],
            "usedBy": [
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleQueries"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, Closure $readable)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "readable",
                        "type": "Closure",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "readable",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "names",
                    "static": true,
                    "visibility": "public",
                    "signature": "names(Minn\\Front\\Resolution $resolution): bool",
                    "doc": "Whether a resolution is an attachment's page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "fromQuery",
                    "static": false,
                    "visibility": "public",
                    "signature": "fromQuery(Minn\\Http\\Request $request, Minn\\Front\\Redirects $redirects): ?Minn\\Front\\Resolution",
                    "doc": "?attachment_id= or ?attachment=: the attachment's page, or a 404; null when the request names neither.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "asPost",
                    "static": false,
                    "visibility": "public",
                    "signature": "asPost(Minn\\Content\\PostRecord $post, Minn\\Http\\Request $request, string $key, Minn\\Front\\Redirects $redirects): ?Minn\\Front\\Resolution",
                    "doc": "An attachment asked for as a post (?p=, ?page_id=): it moves to its own page whatever the setting; null for any other post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "answer",
                    "static": false,
                    "visibility": "public",
                    "signature": "answer(Minn\\Front\\Resolution $resolution, Minn\\Http\\Request $request, Minn\\Front\\Redirects $redirects): Minn\\Front\\Resolution",
                    "doc": "With attachment pages off (the default), a move to the file itself,\nfrom every address, its embed and feed among them: the query along,\nthough an ?attachment_id= address leaves its id behind unless it asked\nfor an embed. With them on, the page as typed, or (the address not its\nown) a move to its own: the other query arguments along, ?attachment=\namong them; an embed stays where it was asked for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "readable",
                    "static": false,
                    "visibility": "private",
                    "signature": "readable(Minn\\Content\\PostRecord $attachment): bool",
                    "doc": "An attachment is readable as its parent is; a loose one as it stands.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attachment",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 101
                }
            ]
        },
        {
            "name": "Minn\\Front\\Calendar",
            "short": "Calendar",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/Calendar.php",
            "lines": 99,
            "doc": "One month as the calendar widget and block draw it: a table whose caption\nnames the month, whose head lists the week from the site's first day, and\nwhose cells link the days a post was published on to that day's archive;\ntoday's cell carries the id the stylesheet lights; the nav below links\nthe nearest months with posts on either side. Markup, whitespace and the\nattribute order of the two padding cells follow the reference byte for\nbyte, since themes style the table by those hooks.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\CalendarLabels",
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(int $year, int $month, int $weekStart, Minn\\Front\\CalendarLabels $labels, Closure $link)",
                "doc": "",
                "shapes": [
                    "@param Closure(int, int, ?int): string $link the month archive URL, or the day's when a day is given"
                ],
                "params": [
                    {
                        "name": "year",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "month",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "weekStart",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "labels",
                        "type": "Minn\\Front\\CalendarLabels",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "link",
                        "type": "Closure",
                        "shape": "Closure(int, int, ?int): string",
                        "default": null,
                        "doc": "the month archive URL, or the day's when a day is given"
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 33
            },
            "cases": [],
            "constants": [
                {
                    "name": "FIXED_DATE",
                    "value": "'F j, Y'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "year",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "month",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "weekStart",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "labels",
                    "type": "Minn\\Front\\CalendarLabels",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "link",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(array $postDays, ?array $previous, ?array $next, ?array $today): string",
                    "doc": "The table and its navigation.",
                    "shapes": [
                        "@param list<int> $postDays days of the month with a published post",
                        "@param array{int, int}|null $previous the nearest earlier month with posts, as [year, month]",
                        "@param array{int, int}|null $next the nearest later month with posts",
                        "@param array{int, int, int}|null $today the site's current date, as [year, month, day]"
                    ],
                    "params": [
                        {
                            "name": "postDays",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "days of the month with a published post"
                        },
                        {
                            "name": "previous",
                            "type": "?array",
                            "shape": "array{int, int}|null",
                            "default": null,
                            "doc": "the nearest earlier month with posts, as [year, month]"
                        },
                        {
                            "name": "next",
                            "type": "?array",
                            "shape": "array{int, int}|null",
                            "default": null,
                            "doc": "the nearest later month with posts"
                        },
                        {
                            "name": "today",
                            "type": "?array",
                            "shape": "array{int, int, int}|null",
                            "default": null,
                            "doc": "the site's current date, as [year, month, day]"
                        }
                    ],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "table",
                    "static": false,
                    "visibility": "private",
                    "signature": "table(array $postDays, ?array $today): string",
                    "doc": "",
                    "shapes": [
                        "@param list<int> $postDays"
                    ],
                    "params": [
                        {
                            "name": "postDays",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "today",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "head",
                    "static": false,
                    "visibility": "private",
                    "signature": "head(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 75,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "cell",
                    "static": false,
                    "visibility": "private",
                    "signature": "cell(int $day, array $postDays, ?array $today): string",
                    "doc": "",
                    "shapes": [
                        "@param list<int> $postDays",
                        "@param array{int, int, int}|null $today"
                    ],
                    "params": [
                        {
                            "name": "day",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postDays",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "today",
                            "type": "?array",
                            "shape": "array{int, int, int}|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "navigation",
                    "static": false,
                    "visibility": "private",
                    "signature": "navigation(?array $previous, ?array $next): string",
                    "doc": "",
                    "shapes": [
                        "@param array{int, int}|null $previous",
                        "@param array{int, int}|null $next"
                    ],
                    "params": [
                        {
                            "name": "previous",
                            "type": "?array",
                            "shape": "array{int, int}|null",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "next",
                            "type": "?array",
                            "shape": "array{int, int}|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "abbreviation",
                    "static": false,
                    "visibility": "private",
                    "signature": "abbreviation(int $month): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "month",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 118
                }
            ]
        },
        {
            "name": "Minn\\Front\\CalendarLabels",
            "short": "CalendarLabels",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/CalendarLabels.php",
            "lines": 44,
            "doc": "The words a calendar prints: weekday names Sunday first, the short form\neach column shows (an initial or an abbreviation), month names by number,\nand the abbreviation the month navigation uses.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Front\\Calendar"
            ],
            "constructor": {
                "signature": "__construct(array $weekdays, array $weekdayShort, array $months, array $monthAbbrev)",
                "doc": "",
                "shapes": [
                    "@param array<int, string> $weekdays Sunday first",
                    "@param array<string, string> $weekdayShort full weekday name to the column heading",
                    "@param array<int, string> $months 1 to 12",
                    "@param array<string, string> $monthAbbrev full month name to its abbreviation"
                ],
                "params": [
                    {
                        "name": "weekdays",
                        "type": "array",
                        "shape": "array<int, string>",
                        "default": null,
                        "doc": "Sunday first"
                    },
                    {
                        "name": "weekdayShort",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": "full weekday name to the column heading"
                    },
                    {
                        "name": "months",
                        "type": "array",
                        "shape": "array<int, string>",
                        "default": null,
                        "doc": "1 to 12"
                    },
                    {
                        "name": "monthAbbrev",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": "full month name to its abbreviation"
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "weekdays",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "weekdayShort",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "months",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "monthAbbrev",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "english",
                    "static": true,
                    "visibility": "public",
                    "signature": "english(): self",
                    "doc": "The English tables, with weekday initials as the reference shows by default.",
                    "shapes": [],
                    "params": [],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "englishAbbreviated",
                    "static": true,
                    "visibility": "public",
                    "signature": "englishAbbreviated(): self",
                    "doc": "The English tables with three-letter weekday abbreviations.",
                    "shapes": [],
                    "params": [],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "fromEnglish",
                    "static": true,
                    "visibility": "private",
                    "signature": "fromEnglish(Closure $short): self",
                    "doc": "",
                    "shapes": [
                        "@param Closure(string): string $short the column heading for a weekday name"
                    ],
                    "params": [
                        {
                            "name": "short",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": "the column heading for a weekday name"
                        }
                    ],
                    "line": 43,
                    "end": 56
                }
            ]
        },
        {
            "name": "Minn\\Front\\Canonical",
            "short": "Canonical",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/Canonical.php",
            "lines": 28,
            "doc": "Where a URL should redirect to, by the engine's own resolution: the\ncanonical form of a request (trailing slash, `?p=` to permalink, doubled\nslashes, former slugs). The front controller applies this before any\nplugin runs; the `redirect_canonical()` facade asks it again for a URL a\nplugin names.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Db",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Resolver",
                "Minn\\Http\\Method",
                "Minn\\Http\\Request"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "location",
                    "static": true,
                    "visibility": "public",
                    "signature": "location(Minn\\Db $db, Minn\\Http\\Request $current, ?string $url): ?string",
                    "doc": "The canonical URL of a request, or null when it already is one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "current",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "requestFor",
                    "static": true,
                    "visibility": "private",
                    "signature": "requestFor(string $url, Minn\\Http\\Request $current): Minn\\Http\\Request",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "current",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 45
                }
            ]
        },
        {
            "name": "Minn\\Front\\CommentPostController",
            "short": "CommentPostController",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/CommentPostController.php",
            "lines": 52,
            "doc": "wp-comments-post.php: the comment form's target. The reference's\nanswers, captured: 302 to the comment's anchor (with unapproved and\nmoderation-hash when held), plain pages with 200 for a missing field,\n403 when comments are closed, 409 for a duplicate, 429 for posting too\nquickly, and 405 for anything but POST.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [
                        "* /wp-comments-post.php (public)"
                    ],
                    "name": "post",
                    "static": false,
                    "visibility": "public",
                    "signature": "post(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The comment form's target.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "submit",
                    "static": false,
                    "visibility": "private",
                    "signature": "submit(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The reference's own submission and redirect (contracts/runtime.md \"The\ncomment form\"), so a spam plugin's checks, the notifications and the\ncommenter cookies are WordPress's: a refusal with a status is the\nrefusal page, one without is a blank page; else set_comment_cookies,\nthe comment's link (or redirect_to), the held comment's id and hash\nwhen the commenter is not remembered, comment_post_redirect, and\nwp_safe_redirect's checks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(string $message, int $status): Minn\\Http\\Response",
                    "doc": "The reference's plain refusal page: the message and a way back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 72
                }
            ]
        },
        {
            "name": "Minn\\Front\\CustomLogo",
            "short": "CustomLogo",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/CustomLogo.php",
            "lines": 27,
            "doc": "The site logo a theme prints, as get_custom_logo builds it (probe\nplugin-helpers): the custom_logo theme mod's image at full size, never\nlazy, its alt its own or else the site's name, linked home (marked the\ncurrent page on the front page). A theme that unlinks the home page logo\ngets a plain span there, the image then decorative (an empty alt). The\nimage's attributes go through get_custom_logo_image_attributes and the\nwhole through get_custom_logo; no logo is an empty string, or in the\nCustomizer a hidden placeholder it can fill in.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(int $blogId): string",
                    "doc": "The logo's markup, through get_custom_logo; empty when the site has none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blogId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 42
                }
            ]
        },
        {
            "name": "Minn\\Front\\EmbedCard",
            "short": "EmbedCard",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/EmbedCard.php",
            "lines": 95,
            "doc": "The parts of a post's embed card the reference's embed template prints,\nas markup: the featured image and its shape (the widest of the image's\nsizes; wide enough and it sits above the title, else beside it, both by\nfilter), the site's name and icon, the comments and sharing buttons, and\nthe sharing dialog (its ids the post's and a random number, as on the\nreference). The facade's template tags print them.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "thumbnail",
                    "static": true,
                    "visibility": "public",
                    "signature": "thumbnail(): ?array",
                    "doc": "The featured image the card shows: [attachment id, size, shape], or\nnull. A post's thumbnail, or an image attachment itself, through\nembed_thumbnail_id, embed_thumbnail_image_size and\nembed_thumbnail_image_shape.",
                    "shapes": [
                        "@return array{0: int, 1: string, 2: string}|null"
                    ],
                    "params": [],
                    "line": 28,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "featuredImage",
                    "static": true,
                    "visibility": "public",
                    "signature": "featuredImage(?array $thumbnail, string $shape): string",
                    "doc": "The featured image's block, when the card shows one of this shape.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "thumbnail",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "shape",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "siteTitle",
                    "static": true,
                    "visibility": "public",
                    "signature": "siteTitle(): string",
                    "doc": "The site's name and icon, linking home, the whole block through embed_site_title_html.",
                    "shapes": [],
                    "params": [],
                    "line": 65,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "commentsButton",
                    "static": true,
                    "visibility": "public",
                    "signature": "commentsButton(): string",
                    "doc": "The comments button: the count, linking to the comments; none on a 404, or with neither comments nor comments open.",
                    "shapes": [],
                    "params": [],
                    "line": 77,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "sharingButton",
                    "static": true,
                    "visibility": "public",
                    "signature": "sharingButton(): string",
                    "doc": "The button that opens the sharing dialog; none on a 404.",
                    "shapes": [],
                    "params": [],
                    "line": 89,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "sharingDialog",
                    "static": true,
                    "visibility": "public",
                    "signature": "sharingDialog(): string",
                    "doc": "The sharing dialog: the post's address and its embed code, each a tab; none on a 404.",
                    "shapes": [],
                    "params": [],
                    "line": 98,
                    "end": 111
                }
            ]
        },
        {
            "name": "Minn\\Front\\FeedController",
            "short": "FeedController",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/FeedController.php",
            "lines": 60,
            "doc": "The feeds, wherever a request asks for one: the feed var of the rule its\naddress matched (the site's at /feed/, the comments' at\n/comments/feed/, a post's or an archive's after its address, a plugin's\nown) or ?feed= on any page. Each is WordPress's feed lifecycle: the main\nquery with the feed asked for, then do_feed, whose handler prints the\nfeed and its content type. A feed of something the address names but\nthe site does not have is an empty feed, as the reference serves it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Context",
                "Minn\\Blocks\\RenderState",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\Site",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Resolution",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\NotModified"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\FrontController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "asked",
                    "static": true,
                    "visibility": "public",
                    "signature": "asked(Minn\\Http\\Request $request, Minn\\Front\\Resolution $resolution): bool",
                    "doc": "Whether a request asks for a feed of what it resolved to (the query form only of something that exists).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "serve",
                    "static": false,
                    "visibility": "public",
                    "signature": "serve(Minn\\Http\\Request $request, Minn\\Front\\Resolution $resolution): Minn\\Http\\Response",
                    "doc": "The feed a request asks for, of what its address resolved to.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "served",
                    "static": false,
                    "visibility": "private",
                    "signature": "served(Minn\\Front\\Resolution $resolution, array $vars): Minn\\Http\\Response",
                    "doc": "A feed as the reference serves it: the main query with the feed asked\nfor (send_headers, wp and template_redirect around it), then do_feed,\nwhose handler prints the feed and its content type.",
                    "shapes": [
                        "@param array<string, mixed> $vars what the request asks of the feed: its type and its comments"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "what the request asks of the feed: its type and its comments"
                        }
                    ],
                    "line": 56,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "perFeed",
                    "static": false,
                    "visibility": "private",
                    "signature": "perFeed(): int",
                    "doc": "How many items a feed carries (posts_per_rss).",
                    "shapes": [],
                    "params": [],
                    "line": 80,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Front\\FeedTags",
            "short": "FeedTags",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/FeedTags.php",
            "lines": 137,
            "doc": "The template tags a feed is written with that take more than a line, as\nthe reference answers them in a feed's loop (probe feed-tags): a post's\ncategories and tags in each feed's markup, its enclosures for RSS and\nAtom, the link to its comments feed, the feed's build date, and the site\nicon a feed carries.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\FeedWriter",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TermFields",
                "Minn\\Support\\Escape",
                "Minn\\Support\\Url"
            ],
            "usedBy": [
                "Minn\\Front\\FeedTemplates"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "categories",
                    "static": true,
                    "visibility": "public",
                    "signature": "categories(string $type): string",
                    "doc": "A post's category and tag names (each once) in a feed type's markup, before the_category_rss.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "rssEnclosures",
                    "static": true,
                    "visibility": "public",
                    "signature": "rssEnclosures(): string",
                    "doc": "The current post's enclosures as RSS has them: address, length, and the type the third line starts with.",
                    "shapes": [],
                    "params": [],
                    "line": 52,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "atomEnclosures",
                    "static": true,
                    "visibility": "public",
                    "signature": "atomEnclosures(): string",
                    "doc": "The current post's enclosures as Atom links: the length a line that is a number, the type a line that is a known MIME type.",
                    "shapes": [],
                    "params": [],
                    "line": 66,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "postCommentsFeedLink",
                    "static": true,
                    "visibility": "public",
                    "signature": "postCommentsFeedLink(int $postId, string $feed): string",
                    "doc": "The address of a post's comments feed in a feed type (the default one bare), through post_comments_feed_link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "feed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "buildDate",
                    "static": true,
                    "visibility": "public",
                    "signature": "buildDate(string $format): string",
                    "doc": "When the feed last changed, in a format: the newest of its posts'\nmodifications (and comments, for a comments feed); once the loop has\nrun out, the site's last modification; failing both, now.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "rss2Icon",
                    "static": true,
                    "visibility": "public",
                    "signature": "rss2Icon(): string",
                    "doc": "The site icon as an RSS 2.0 image (titled with the feed's title), or '' without one.",
                    "shapes": [],
                    "params": [],
                    "line": 137,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "atomIcon",
                    "static": true,
                    "visibility": "public",
                    "signature": "atomIcon(): string",
                    "doc": "The site icon as an Atom icon, or '' without one.",
                    "shapes": [],
                    "params": [],
                    "line": 150,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "enclosures",
                    "static": true,
                    "visibility": "private",
                    "signature": "enclosures(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<list<string>> the current post's enclosures, each as its lines, unless its password is wanted"
                    ],
                    "params": [],
                    "line": 42,
                    "end": 49
                }
            ]
        },
        {
            "name": "Minn\\Front\\FeedTemplates",
            "short": "FeedTemplates",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/FeedTemplates.php",
            "lines": 295,
            "doc": "The feed templates do_feed_* loads, written from the reference's output\n(suite feed-hooks, probes feed-templates): RSS 2.0, Atom, RDF and RSS\n0.92 for posts, RSS 2.0 and Atom for comments. Each is written through\nthe template tags, so every feed filter has its say, and fires each feed\naction where the reference fires it; the whitespace between is the\nreference's. A template is written once a request, as require_once\nloads it, and sends its content type through the header callback first.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\FeedTags",
                "Minn\\Front\\FeedWriter",
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SYNDICATION",
                    "value": "'\txmlns:sy=\"http://purl.org/rss/1.0/modules/syndication/\" '",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "loaded",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "load",
                    "static": true,
                    "visibility": "public",
                    "signature": "load(string $name, Closure $send): string",
                    "doc": "A feed template by its name (rss2, rss2-comments, atom, atom-comments,\nrdf, rss), between wp_before_load_template and wp_after_load_template.",
                    "shapes": [
                        "@param Closure(string): void $send sends a header line (the Content-Type)"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "send",
                            "type": "Closure",
                            "shape": "Closure(string): void",
                            "default": null,
                            "doc": "sends a header line (the Content-Type)"
                        }
                    ],
                    "line": 33,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "syndication",
                    "static": true,
                    "visibility": "private",
                    "signature": "syndication(Minn\\Front\\FeedWriter $w): Minn\\Front\\FeedWriter",
                    "doc": "What the period and frequency of updates are, as the syndication module says.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "rss2",
                    "static": true,
                    "visibility": "private",
                    "signature": "rss2(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "rss2Item",
                    "static": true,
                    "visibility": "private",
                    "signature": "rss2Item(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "atom",
                    "static": true,
                    "visibility": "private",
                    "signature": "atom(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "atomEntry",
                    "static": true,
                    "visibility": "private",
                    "signature": "atomEntry(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "rdf",
                    "static": true,
                    "visibility": "private",
                    "signature": "rdf(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "rdfItem",
                    "static": true,
                    "visibility": "private",
                    "signature": "rdfItem(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 180,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "rss",
                    "static": true,
                    "visibility": "private",
                    "signature": "rss(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "commentsTitle",
                    "static": true,
                    "visibility": "private",
                    "signature": "commentsTitle(string $single): string",
                    "doc": "The heading of a comments feed: the post's, the search's, or the site's.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "single",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 213,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "commentTitle",
                    "static": true,
                    "visibility": "private",
                    "signature": "commentTitle(WP_Post $post): string",
                    "doc": "A comment's heading in a comments feed: by whom, and on what when the feed is not a single post's.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 225,
                    "end": 231
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": true,
                    "visibility": "private",
                    "signature": "current(): array",
                    "doc": "The comment the loop is on, with its post made the current one. @return array{0: object, 1: \\WP_Post}",
                    "shapes": [
                        "@return array{0: object, 1: \\WP_Post}"
                    ],
                    "params": [],
                    "line": 234,
                    "end": 239
                },
                {
                    "routes": [],
                    "name": "rss2Comments",
                    "static": true,
                    "visibility": "private",
                    "signature": "rss2Comments(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 241,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "rss2Comment",
                    "static": true,
                    "visibility": "private",
                    "signature": "rss2Comment(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 259,
                    "end": 271
                },
                {
                    "routes": [],
                    "name": "atomComments",
                    "static": true,
                    "visibility": "private",
                    "signature": "atomComments(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 273,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "atomComment",
                    "static": true,
                    "visibility": "private",
                    "signature": "atomComment(Minn\\Front\\FeedWriter $w): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "w",
                            "type": "Minn\\Front\\FeedWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 295,
                    "end": 313
                }
            ]
        },
        {
            "name": "Minn\\Front\\FeedWriter",
            "short": "FeedWriter",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/FeedWriter.php",
            "lines": 57,
            "doc": "A feed as it is written: text as given, and what each template tag and\naction prints, in the order the template asks for them.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Front\\FeedTags",
                "Minn\\Front\\FeedTemplates"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "out",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "put",
                    "static": false,
                    "visibility": "public",
                    "signature": "put(string ...$text): self",
                    "doc": "Text as written.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 20
                },
                {
                    "routes": [],
                    "name": "tag",
                    "static": false,
                    "visibility": "public",
                    "signature": "tag(string $function, mixed ...$args): self",
                    "doc": "What a function that prints (a template tag) prints, called with its arguments.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "function",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "cdata",
                    "static": false,
                    "visibility": "public",
                    "signature": "cdata(string $function, mixed ...$args): self",
                    "doc": "What a template tag prints, for inside a CDATA section: a \"]]>\" in it\nis split so it cannot close the section (a hardening rule; the\nreference lets a stored name break out, contracts/front/probes.md).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "function",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "insideCdata",
                    "static": true,
                    "visibility": "public",
                    "signature": "insideCdata(string $text): string",
                    "doc": "Text made safe inside a CDATA section: \"]]>\" becomes \"]]]]><![CDATA[>\", which a reader joins back into the same characters.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "act",
                    "static": false,
                    "visibility": "public",
                    "signature": "act(string $hook, mixed ...$args): self",
                    "doc": "What an action's callbacks print.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": false,
                    "visibility": "public",
                    "signature": "text(): string",
                    "doc": "Everything written so far.",
                    "shapes": [],
                    "params": [],
                    "line": 63,
                    "end": 66
                }
            ]
        },
        {
            "name": "Minn\\Front\\FrontController",
            "short": "FrontController",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/FrontController.php",
            "lines": 105,
            "doc": "The public site. One catch-all route: resolve the URL, then either\nredirect or render, through the active block theme when there is one,\nthe classic PHP template runner when the theme is classic, and the\ninterim template otherwise.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Cron\\Cron",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Redirects",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\Resolution",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\Printed"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Front\\Resolver $resolver, Minn\\Theme\\MainQueryBridge $bridge, Minn\\Front\\Renderer $renderer, ?Minn\\Theme\\PageRenderer $theme = NULL, ?Minn\\Front\\FeedController $feeds = NULL, ?Minn\\Cron\\Cron $cron = NULL, ?Minn\\Theme\\ClassicRenderer $classic = NULL, ?Minn\\Front\\SitemapController $sitemaps = NULL, ?Minn\\Theme\\EmbedRenderer $embeds = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "resolver",
                        "type": "Minn\\Front\\Resolver",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bridge",
                        "type": "Minn\\Theme\\MainQueryBridge",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "renderer",
                        "type": "Minn\\Front\\Renderer",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "theme",
                        "type": "?Minn\\Theme\\PageRenderer",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "feeds",
                        "type": "?Minn\\Front\\FeedController",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "cron",
                        "type": "?Minn\\Cron\\Cron",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "classic",
                        "type": "?Minn\\Theme\\ClassicRenderer",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "sitemaps",
                        "type": "?Minn\\Front\\SitemapController",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "embeds",
                        "type": "?Minn\\Theme\\EmbedRenderer",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 29,
                "end": 40
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "resolver",
                    "type": "Minn\\Front\\Resolver",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "bridge",
                    "type": "Minn\\Theme\\MainQueryBridge",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "renderer",
                    "type": "Minn\\Front\\Renderer",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "theme",
                    "type": "?Minn\\Theme\\PageRenderer",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "feeds",
                    "type": "?Minn\\Front\\FeedController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "cron",
                    "type": "?Minn\\Cron\\Cron",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "classic",
                    "type": "?Minn\\Theme\\ClassicRenderer",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "sitemaps",
                    "type": "?Minn\\Front\\SitemapController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "embeds",
                    "type": "?Minn\\Theme\\EmbedRenderer",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "notFound",
                    "static": false,
                    "visibility": "public",
                    "signature": "notFound(): Minn\\Http\\Response",
                    "doc": "The themed (or interim) 404 page.",
                    "shapes": [],
                    "params": [],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "themed",
                    "static": false,
                    "visibility": "public",
                    "signature": "themed(Minn\\Front\\Resolution $resolution): Minn\\Http\\Response",
                    "doc": "The themed (or interim) page for a resolution, under its status: the\nmain query stood first, its 404 (an empty page past the first, an\nempty date) taken as the page's.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 62
                },
                {
                    "routes": [
                        "* /{path*} (public)"
                    ],
                    "name": "show",
                    "static": false,
                    "visibility": "public",
                    "signature": "show(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The public page for any path; when scheduled work is due, the run follows the response.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": false,
                    "visibility": "private",
                    "signature": "page(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "rendered",
                    "static": false,
                    "visibility": "private",
                    "signature": "rendered(Minn\\Http\\Request $request, Minn\\Front\\Resolution $resolution): Minn\\Http\\Response",
                    "doc": "The page for a resolution: an embed, a sitemap's or feed's query form, else the theme's.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 130
                }
            ]
        },
        {
            "name": "Minn\\Front\\Kind",
            "short": "Kind",
            "namespace": "Minn\\Front",
            "kind": "enum",
            "file": "public/minn/src/Minn/Front/Kind.php",
            "lines": 17,
            "doc": "What a public URL resolved to.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Blocks\\Context",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\Canonical",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\Resolution",
                "Minn\\Front\\Resolver",
                "Minn\\Theme\\ArchiveTitle",
                "Minn\\Theme\\BodyClasses",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\Templates"
            ],
            "constructor": null,
            "cases": [
                {
                    "name": "Home",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Single",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Page",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Category",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Tag",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Author",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Date",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Search",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Taxonomy",
                    "value": null,
                    "doc": "a term archive of a plugin's taxonomy"
                },
                {
                    "name": "PostTypeArchive",
                    "value": null,
                    "doc": "the archive of a plugin's post type"
                },
                {
                    "name": "NotFound",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Redirect",
                    "value": null,
                    "doc": ""
                }
            ],
            "constants": [],
            "properties": [],
            "methods": []
        },
        {
            "name": "Minn\\Front\\ListingLinks",
            "short": "ListingLinks",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/ListingLinks.php",
            "lines": 53,
            "doc": "The prev/next links a paged listing prints: which page sits either side of\nthe one being read, and the anchor that points at it. Posts listings and\ncomment threads both come through here; only the URL builder differs.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "neighbours",
                    "static": true,
                    "visibility": "public",
                    "signature": "neighbours(int $current, int $maxPages): array",
                    "doc": "The page before and after the current one, null past either end. A\nlisting of one page has neither, which is how the navigation blocks\nknow to print nothing at all.",
                    "shapes": [
                        "@return array{0: ?int, 1: ?int}"
                    ],
                    "params": [
                        {
                            "name": "current",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxPages",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "anchor",
                    "static": true,
                    "visibility": "public",
                    "signature": "anchor(string $url, string $attributes, string $text): string",
                    "doc": "The anchor the reference prints. Attributes go in verbatim after the\nhref, and the space that separates them stays even when a caller\nsupplied none, so the markup reads `<a href=\"...\" >text</a>`.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "label",
                    "static": true,
                    "visibility": "public",
                    "signature": "label(string $label, string $default): string",
                    "doc": "A navigation label's bare ampersands become entities, while an ampersand\nthat already opens an entity is left as it is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "label",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "bareCommentPage",
                    "static": true,
                    "visibility": "public",
                    "signature": "bareCommentPage(string $defaultPage, int $maxPages): int",
                    "doc": "Which page of a comment thread the bare permalink shows: the first when\nthe site reads oldest comments first, the last when it reads newest\nfirst. Every other page carries a comment-page-N segment.\n\nThe page count is whatever the caller passed and is never filled in from\nthe query: a caller that does not say how long the thread is gets no\ncollapse at all under newest-first, because no page matches an unknown\nlast page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "defaultPage",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxPages",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                }
            ]
        },
        {
            "name": "Minn\\Front\\Maintenance",
            "short": "Maintenance",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/Maintenance.php",
            "lines": 28,
            "doc": "Maintenance mode, as hosting tools and updaters switch it on: a\n.maintenance file in the webroot whose $upgrading is less than ten minutes\nold. While it holds, every request gets the site's own maintenance.php\n(which prints its page and stops) or the 503 page; an older file is ignored.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Failure",
                "Minn\\Http\\Response",
                "Minn\\Runtime\\EarlyFilters"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "WINDOW",
                    "value": "600",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "answer",
                    "static": true,
                    "visibility": "public",
                    "signature": "answer(string $abspath, string $contentDir, int $now): ?Minn\\Http\\Response",
                    "doc": "The answer while maintenance holds, or null when the site is open.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "abspath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 43
                }
            ]
        },
        {
            "name": "Minn\\Front\\PageLinks",
            "short": "PageLinks",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/PageLinks.php",
            "lines": 40,
            "doc": "The links between the pages of a post split with <!--nextpage-->, as\nwp_link_pages writes them (probe placeholders-a). By number: the before\nmarkup, each page (the current one a span, unless the whole post is not\nbeing shown and this is its first page) after a space for the first and\nthe separator for the rest, the after markup. By next and previous, only\nwhere the whole post is shown: the previous page's link, the separator,\nthe next page's. Nothing for a post in one page.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(array $args, int $page, int $pages, int $more, Closure $open, Closure $filter): string",
                    "doc": "The links for the page being shown of a split post.",
                    "shapes": [
                        "@param array<string, mixed> $args wp_link_pages's arguments with their defaults",
                        "@param Closure(int): string $open the opening anchor of page $i",
                        "@param Closure(string, int): string $filter a link through wp_link_pages_link"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "wp_link_pages's arguments with their defaults"
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pages",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "more",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": "the reference's $more global: 1 when the whole post is shown"
                        },
                        {
                            "name": "open",
                            "type": "Closure",
                            "shape": "Closure(int): string",
                            "default": null,
                            "doc": "the opening anchor of page $i"
                        },
                        {
                            "name": "filter",
                            "type": "Closure",
                            "shape": "Closure(string, int): string",
                            "default": null,
                            "doc": "a link through wp_link_pages_link"
                        }
                    ],
                    "line": 29,
                    "end": 57
                }
            ]
        },
        {
            "name": "Minn\\Front\\Pagination",
            "short": "Pagination",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/Pagination.php",
            "lines": 62,
            "doc": "Numbered page links in the reference's shape: previous, the end and\nmiddle runs with one ellipsis per gap, the current page as a span, next.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "links",
                    "static": true,
                    "visibility": "public",
                    "signature": "links(array $args, Closure $link): ?array",
                    "doc": "The page links the reference's paginate_links builds, or null for one page.",
                    "shapes": [
                        "@param Closure(int): string $link the URL for a page number",
                        "@return list<string>|null the link elements, null with fewer than two pages"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "link",
                            "type": "Closure",
                            "shape": "Closure(int): string",
                            "default": null,
                            "doc": "the URL for a page number"
                        }
                    ],
                    "line": 21,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "format",
                    "static": true,
                    "visibility": "public",
                    "signature": "format(array $links, string $type): array|string",
                    "doc": "The links in the requested shape.",
                    "shapes": [
                        "@param list<string> $links"
                    ],
                    "params": [
                        {
                            "name": "links",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 73
                }
            ]
        },
        {
            "name": "Minn\\Front\\Permalinks",
            "short": "Permalinks",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/Permalinks.php",
            "lines": 265,
            "doc": "Builds public URLs from the site's permalink structure. With an empty\nstructure every link is a query-string form (?p=, ?cat=); with a\nstructure, published and private posts get their pretty form and every\nother status keeps the query form, which is what the reference emits.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Content\\UserRecord",
                "Minn\\Db",
                "Minn\\Runtime\\Registry",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Blocks\\Dynamic\\Archives",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Blocks\\Renderer",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Menus",
                "Minn\\Content\\SiteIcon",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Front\\SingleQueries",
                "Minn\\Login\\LoginController",
                "Minn\\Media\\Uploads",
                "Minn\\Ops\\Diagnostics",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\UserObject",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeStyles"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Content\\Terms $terms, string $home, string $structure, int $frontPageId = 0, int $postsPageId = 0, ?Closure $registry = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "home",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "structure",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "frontPageId",
                        "type": "int",
                        "shape": "",
                        "default": "0",
                        "doc": ""
                    },
                    {
                        "name": "postsPageId",
                        "type": "int",
                        "shape": "",
                        "default": "0",
                        "doc": ""
                    },
                    {
                        "name": "registry",
                        "type": "?Closure",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 38
            },
            "cases": [],
            "constants": [
                {
                    "name": "QUERY_ONLY",
                    "value": "array (   0 => 'wp_pattern_category',   1 => 'wp_theme',   2 => 'wp_template_part_area', )",
                    "doc": "Core taxonomies with no front-end archive: their terms link by query only.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "home",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "structure",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "frontPageId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "postsPageId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "registry",
                    "type": "?Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "typeSlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "typeSlug(string $type): string",
                    "doc": "The rewrite slug a plugin gave its post type, else the type's name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "taxonomySlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomySlug(string $taxonomy): ?string",
                    "doc": "The rewrite slug a plugin gave its taxonomy; null for one the engine does not know.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "forPostTypeArchive",
                    "static": false,
                    "visibility": "public",
                    "signature": "forPostTypeArchive(array $type): string",
                    "doc": "A post type archive's address: its has_archive slug, or the type's slug when has_archive is true.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "fromDb",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromDb(Minn\\Db $db): self",
                    "doc": "Link building from the site's own settings.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "isPretty",
                    "static": false,
                    "visibility": "public",
                    "signature": "isPretty(): bool",
                    "doc": "Whether the site uses a permalink structure.",
                    "shapes": [],
                    "params": [],
                    "line": 79,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": false,
                    "visibility": "public",
                    "signature": "url(string $path = ''): string",
                    "doc": "A URL under the home.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "feedPath",
                    "static": true,
                    "visibility": "public",
                    "signature": "feedPath(string $base, string $type): string",
                    "doc": "A feed's address under a base path (\"/\", \"/category/news/\",\n\"/hello-world/\"): feed/ for the default feed (rss2, and rss with it),\nfeed/<type>/ for another; a comments-<type> feed is its <type>.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "link",
                    "static": false,
                    "visibility": "public",
                    "signature": "link(Minn\\Content\\PostRecord $post): string",
                    "doc": "A post's link as plugins and clients are given it: once the runtime\nruns, the reference's, through its link filters (post_link, page_link,\npost_type_link, as get_permalink() answers); before, the engine's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "forComment",
                    "static": false,
                    "visibility": "public",
                    "signature": "forComment(int $commentId, ?Minn\\Content\\PostRecord $post, int $postId): string",
                    "doc": "A comment's link as plugins and clients are given it: once the\nruntime runs, get_comment_link()'s (its paging and its filter, over\nthe post's filtered link); before, the post's own with the anchor.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "commentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "forPost",
                    "static": false,
                    "visibility": "public",
                    "signature": "forPost(Minn\\Content\\PostRecord $post): string",
                    "doc": "A post's permalink, by the engine's own rules (no plugin filters: address matching uses it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 131,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "forPage",
                    "static": false,
                    "visibility": "public",
                    "signature": "forPage(Minn\\Content\\PostRecord $page): string",
                    "doc": "A page's permalink, the home for the front page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "page",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "pagePath",
                    "static": false,
                    "visibility": "public",
                    "signature": "pagePath(Minn\\Content\\PostRecord $page): string",
                    "doc": "A page's own pretty path, even for the static front page (its comments feed lives there).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "page",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 170
                },
                {
                    "routes": [],
                    "name": "forAttachment",
                    "static": false,
                    "visibility": "public",
                    "signature": "forAttachment(Minn\\Content\\PostRecord $attachment): string",
                    "doc": "An attachment's public link: its slug under the parent's permalink\nwhen attached, at the root when not, or the query form under plain\npermalinks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attachment",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 188
                },
                {
                    "routes": [],
                    "name": "forTerm",
                    "static": false,
                    "visibility": "public",
                    "signature": "forTerm(Minn\\Content\\TermRecord $term): string",
                    "doc": "A term's archive URL.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 217
                },
                {
                    "routes": [],
                    "name": "forAuthor",
                    "static": false,
                    "visibility": "public",
                    "signature": "forAuthor(Minn\\Content\\UserRecord $user): string",
                    "doc": "An author's archive URL.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 220,
                    "end": 225
                },
                {
                    "routes": [],
                    "name": "forDate",
                    "static": false,
                    "visibility": "public",
                    "signature": "forDate(int $year, ?int $month = NULL, ?int $day = NULL): string",
                    "doc": "A date archive's URL.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "year",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "month",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "day",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 228,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "forSearch",
                    "static": false,
                    "visibility": "public",
                    "signature": "forSearch(string $term): string",
                    "doc": "A search's URL.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 244,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "forPaged",
                    "static": false,
                    "visibility": "public",
                    "signature": "forPaged(string $baseUrl, int $page): string",
                    "doc": "A listing URL for a page number.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "baseUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 250,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "filtered",
                    "static": true,
                    "visibility": "private",
                    "signature": "filtered(): bool",
                    "doc": "Whether links go through the reference's filters: once plugins can hook them.",
                    "shapes": [],
                    "params": [],
                    "line": 125,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "hasPrettyLink",
                    "static": false,
                    "visibility": "private",
                    "signature": "hasPrettyLink(Minn\\Content\\PostRecord $post): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 255,
                    "end": 258
                },
                {
                    "routes": [],
                    "name": "fill",
                    "static": false,
                    "visibility": "private",
                    "signature": "fill(Minn\\Content\\PostRecord $post): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 260,
                    "end": 286
                }
            ]
        },
        {
            "name": "Minn\\Front\\PostEmbed",
            "short": "PostEmbed",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/PostEmbed.php",
            "lines": 106,
            "doc": "A post as other sites embed it, the oEmbed provider side, as the\nreference answers (probe oembed): the data (version, the site as\nprovider, the author or else the site, the title) through\noembed_response_data, whose default makes it \"rich\" with the embed\nmarkup: a blockquote linking the post, a sandboxed iframe of its /embed/\npage carrying a fresh secret, and the inline script that sizes it. Only\na publicly viewable post is embeddable; the width is held between 200\nand 600 (oembed_min_max_width) and the height is a 16:9 share of it, at\nleast 200.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Escape",
                "Minn\\Support\\Url"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "data",
                    "static": true,
                    "visibility": "public",
                    "signature": "data(mixed $post, int $width): array|false",
                    "doc": "get_oembed_response_data: the data, or false when the post cannot be embedded. @return array<string, mixed>|false",
                    "shapes": [
                        "@return array<string, mixed>|false"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "rich",
                    "static": true,
                    "visibility": "public",
                    "signature": "rich(array $data, WP_Post $post, int $width, int $height): array",
                    "doc": "get_oembed_response_data_rich: the size, the markup, and a thumbnail when the post has one. @param array<string, mixed> $data @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $data @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        },
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(int $width, int $height, mixed $post): string|false",
                    "doc": "get_post_embed_html: the blockquote, the iframe and its script, through embed_html; false for no post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": true,
                    "visibility": "public",
                    "signature": "url(mixed $post): string|false",
                    "doc": "get_post_embed_url: the post's /embed/ address (?embed=true without pretty links), through post_embed_url.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "xml",
                    "static": true,
                    "visibility": "public",
                    "signature": "xml(array $data, ?SimpleXMLElement $root = NULL): string",
                    "doc": "_oembed_create_xml: the data as an oembed document (or under the root given), nested arrays as nested elements. @param array<string, mixed> $data",
                    "shapes": [
                        "@param array<string, mixed> $data"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "root",
                            "type": "?SimpleXMLElement",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "append",
                    "static": true,
                    "visibility": "private",
                    "signature": "append(SimpleXMLElement $node, array $data): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $data"
                    ],
                    "params": [
                        {
                            "name": "node",
                            "type": "SimpleXMLElement",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 126
                }
            ]
        },
        {
            "name": "Minn\\Front\\PostNavigation",
            "short": "PostNavigation",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/PostNavigation.php",
            "lines": 36,
            "doc": "The links to the posts either side of this one, and the nav block that\nwraps them. The caller's format wraps the anchor: `%link` is the whole\nanchor, `%title` the post's title and `%date` its date, and the anchor carries rel=\"prev\"\nor rel=\"next\".\n\nTitles arrive already filtered; this only assembles.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "previous",
                    "static": true,
                    "visibility": "public",
                    "signature": "previous(string $url, string $title, string $format, string $linkFormat, string $date = ''): string",
                    "doc": "A previous or next post link in the reference's format.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "linkFormat",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "date",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "next",
                    "static": true,
                    "visibility": "public",
                    "signature": "next(string $url, string $title, string $format, string $linkFormat, string $date = ''): string",
                    "doc": "The next-post link in the reference's format.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "linkFormat",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "date",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "ariaLabel",
                    "static": true,
                    "visibility": "public",
                    "signature": "ariaLabel(array $args, string $default): string",
                    "doc": "The aria-label a navigation block carries: an explicit one wins,\notherwise a caller-supplied screen-reader text stands in for it, and\nonly with neither does the default apply.",
                    "shapes": [
                        "@param array<string, mixed> $args the caller's own arguments"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the caller's own arguments"
                        },
                        {
                            "name": "default",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "link",
                    "static": true,
                    "visibility": "private",
                    "signature": "link(string $url, string $title, string $format, string $linkFormat, string $rel, string $date): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "linkFormat",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "date",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 36
                }
            ]
        },
        {
            "name": "Minn\\Front\\PrintedResponse",
            "short": "PrintedResponse",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/PrintedResponse.php",
            "lines": 39,
            "doc": "A response WordPress's handlers print themselves (a sitemap, robots.txt),\nas the reference serves them: the main query stood with the request's own\nvariables and the front-end steps around it, then $print; what was\nprinted, under the status and headers the handlers sent. A handler that\nends the request early (Printed, where the reference exits) ends it here\ntoo; when none did and there is nothing to print, null, and the theme\nrenders the page on the query as it stands.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\Resolution",
                "Minn\\Http\\Response",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\Printed"
            ],
            "usedBy": [
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\SitemapController",
                "Minn\\Theme\\EmbedRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "stand",
                    "static": true,
                    "visibility": "public",
                    "signature": "stand(Minn\\Theme\\MainQueryBridge $bridge, array $vars, ?Closure $print = NULL, ?Minn\\Front\\Resolution $resolution = NULL): ?Minn\\Http\\Response",
                    "doc": "The request served this way, or null for the theme to render.",
                    "shapes": [
                        "@param array<string, mixed> $vars the request's own query variables"
                    ],
                    "params": [
                        {
                            "name": "bridge",
                            "type": "Minn\\Theme\\MainQueryBridge",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the request's own query variables"
                        },
                        {
                            "name": "print",
                            "type": "?Closure",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "resolution",
                            "type": "?Minn\\Front\\Resolution",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "discard",
                    "static": true,
                    "visibility": "private",
                    "signature": "discard(int $level): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "level",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 58
                }
            ]
        },
        {
            "name": "Minn\\Front\\ProbeController",
            "short": "ProbeController",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/ProbeController.php",
            "lines": 68,
            "doc": "The surface monitors, crawlers, and hosting checks hit that is not a\npage: robots.txt, the XML-RPC and cron endpoints, the admin entry point,\nand the favicon. Feeds and sitemaps have controllers of their own.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Content\\SiteIcon",
                "Minn\\Cron\\Cron",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\PrintedResponse",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\MainQueryBridge"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Content\\SiteIcon $icon, ?Minn\\Cron\\Cron $cron = NULL, ?Minn\\Theme\\MainQueryBridge $bridge = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "icon",
                        "type": "Minn\\Content\\SiteIcon",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "cron",
                        "type": "?Minn\\Cron\\Cron",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "bridge",
                        "type": "?Minn\\Theme\\MainQueryBridge",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "icon",
                    "type": "Minn\\Content\\SiteIcon",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "cron",
                    "type": "?Minn\\Cron\\Cron",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "bridge",
                    "type": "?Minn\\Theme\\MainQueryBridge",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /robots.txt (public)"
                    ],
                    "name": "robots",
                    "static": false,
                    "visibility": "public",
                    "signature": "robots(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "robots.txt: with plugins loaded, the reference's (the main query a\nrobots request, then do_robots, under do_robotstxt and robots_txt);\notherwise the same lines, the sitemap's only on a public site.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 52
                },
                {
                    "routes": [
                        "* /xmlrpc.php (public)"
                    ],
                    "name": "xmlrpc",
                    "static": false,
                    "visibility": "public",
                    "signature": "xmlrpc(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "XML-RPC is not served; GET answers the way the reference does, POST is refused outright.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 62
                },
                {
                    "routes": [
                        "* /wp-cron.php (public)"
                    ],
                    "name": "cron",
                    "static": false,
                    "visibility": "public",
                    "signature": "cron(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "wp-cron.php: runs what is due.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 72
                },
                {
                    "routes": [
                        "GET /wp-admin (public)",
                        "GET /wp-admin/{rest*} (public)"
                    ],
                    "name": "admin",
                    "static": false,
                    "visibility": "public",
                    "signature": "admin(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The admin is Minn Admin; the reference's admin path lands there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [
                        "GET /favicon.ico (public)"
                    ],
                    "name": "favicon",
                    "static": false,
                    "visibility": "public",
                    "signature": "favicon(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The site icon, or the reference's default.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 90
                }
            ]
        },
        {
            "name": "Minn\\Front\\QueryMoves",
            "short": "QueryMoves",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/QueryMoves.php",
            "lines": 119,
            "doc": "Where the root's archive query forms move under pretty permalinks, as\nthe reference's canonical redirect answers them (suite permalinks): a\nfeed (?feed=) first, then a date (?m=, ?year=), then an author by id, then a term when the\nquery names exactly one taxonomy (?cat= or ?category_name=, ?tag=,\n?taxonomy= with ?term=, a registered taxonomy's own var; ?post_format=\ncounts as one but never moves itself), each to its pretty address with\nthe other arguments along. Nothing moves while a search is asked for\n(?s=, even empty), past the first page, or to something the site does\nnot have. The singles' forms are SingleQueries'.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Content\\UserRecord",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution",
                "Minn\\Http\\Request",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Front\\Resolver"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Terms $terms, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "for",
                    "static": false,
                    "visibility": "public",
                    "signature": "for(Minn\\Http\\Request $request): ?Minn\\Front\\Resolution",
                    "doc": "The move a root request's query string makes; null when it makes none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "date",
                    "static": false,
                    "visibility": "private",
                    "signature": "date(Minn\\Http\\Request $request): ?Minn\\Front\\Resolution",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "author",
                    "static": false,
                    "visibility": "private",
                    "signature": "author(Minn\\Http\\Request $request): ?Minn\\Front\\Resolution",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "feed",
                    "static": false,
                    "visibility": "private",
                    "signature": "feed(Minn\\Http\\Request $request): ?Minn\\Front\\Resolution",
                    "doc": "?feed=: the feed at its pretty address: a comments feed under\n/comments/, one taxonomy's term's under the term, any other the\nsite's, an author or date asked with it left behind. An unknown kind\nof feed moves nowhere.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": false,
                    "visibility": "private",
                    "signature": "term(Minn\\Http\\Request $request): ?Minn\\Front\\Resolution",
                    "doc": "The one taxonomy's term the query names, at its pretty address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "oneTerm",
                    "static": false,
                    "visibility": "private",
                    "signature": "oneTerm(Minn\\Http\\Request $request): ?array",
                    "doc": "The term of the one taxonomy the query names, with the arguments that\nname it; null when it names none, more than one, or a term the site\ndoes not have.",
                    "shapes": [
                        "@return array{0: TermRecord, 1: list<string>}|null"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "lastSlug",
                    "static": true,
                    "visibility": "private",
                    "signature": "lastSlug(string $path): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 138,
                    "end": 142
                }
            ]
        },
        {
            "name": "Minn\\Front\\Redirects",
            "short": "Redirects",
            "namespace": "Minn\\Front",
            "kind": "enum",
            "file": "public/minn/src/Minn/Front/Redirects.php",
            "lines": 23,
            "doc": "Whether a resolution may answer with a canonical redirect. A GET or HEAD\nfollows them (the trailing slash, the pretty permalink for ?p=, the\nguessed destination); any other method holds and resolves the path as\ntyped, as the reference's redirect_canonical bails on a POST.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Method",
                "Minn\\Http\\Request"
            ],
            "usedBy": [
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleQueries"
            ],
            "constructor": null,
            "cases": [
                {
                    "name": "Follow",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Hold",
                    "value": null,
                    "doc": ""
                }
            ],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "forMethod",
                    "static": true,
                    "visibility": "public",
                    "signature": "forMethod(Minn\\Http\\Method $method): self",
                    "doc": "The mode a request's method allows.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "method",
                            "type": "Minn\\Http\\Method",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 22
                },
                {
                    "routes": [],
                    "name": "forRequest",
                    "static": true,
                    "visibility": "public",
                    "signature": "forRequest(Minn\\Http\\Request $request): self",
                    "doc": "The mode for a request: its method's (a feed's query form moves too, under the site's own host).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "follows",
                    "static": false,
                    "visibility": "public",
                    "signature": "follows(): bool",
                    "doc": "Whether a canonical redirect may be answered.",
                    "shapes": [],
                    "params": [],
                    "line": 31,
                    "end": 34
                }
            ]
        },
        {
            "name": "Minn\\Front\\Renderer",
            "short": "Renderer",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/Renderer.php",
            "lines": 90,
            "doc": "The interim public theme: one clean template until the block-theme\nreader lands. The body-class tokens are the contract (stylesheets and\ncrawlers key off them); the markup around them is engine-defined.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Blocks",
                "Minn\\Content\\Excerpt",
                "Minn\\Content\\Page",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\PostRecord",
                "Minn\\Db",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution",
                "Minn\\Html",
                "Minn\\Theme\\QueryClasses"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\FrontController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 27
            },
            "cases": [],
            "constants": [
                {
                    "name": "CSS",
                    "value": "':root { color-scheme: light dark; } body { margin: 0; font: 17px/1.6 \"Hanken Grotesk\", \"Helvetica Neue\", sans-serif; background: #fbfbfc; color: #1a1a1f; } @media (prefers-color-scheme: dark) { body { background: #0b0b0d; color: #ececed; } } .site-header, main, .site-footer { max-width: 680px; margin: 0 auto; padding: 0 24px; } .site-header { padding-top: 32px; } .site-title { font-weight: 800; letter-spacing: -0.02em; text-decoration: none; color: inherit; font-size: 20px; } main { padding-top: 40px; padding-bottom: 40px; } h1 { font-size: 36px; letter-spacing: -0.02em; line-height: 1.15; margin: 0 0 24px; } .post-list { list-style: none; margin: 0; padding: 0; } .post-list li { padding: 18px 0; border-top: 1px solid rgba(128,128,140,0.25); } .post-list a { font-weight: 600; color: inherit; text-decoration: none; font-size: 20px; } .post-list time { display: block; font-size: 13px; opacity: 0.6; } .post-list p { margin: 6px 0 0; opacity: 0.85; } .entry-content img { max-width: 100%; height: auto; } .site-footer { padding-bottom: 32px; font: 12px/1.6 \"JetBrains Mono\", monospace; opacity: 0.6; }'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "bodyClasses",
                    "static": false,
                    "visibility": "public",
                    "signature": "bodyClasses(): array",
                    "doc": "The body classes the main query stands for (Theme\\QueryClasses);\nnone before one stands.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 35,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Front\\Resolution $resolution, Minn\\Content\\Page $page): string",
                    "doc": "The interim page for a resolution, without a theme: a listing shows the main query's page of posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "Minn\\Content\\Page",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "article",
                    "static": false,
                    "visibility": "private",
                    "signature": "article(Minn\\Content\\PostRecord $post): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "archive",
                    "static": false,
                    "visibility": "private",
                    "signature": "archive(Minn\\Front\\Resolution $resolution, Minn\\Content\\Page $page): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string, 1: string} title and markup"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "Minn\\Content\\Page",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 91
                }
            ]
        },
        {
            "name": "Minn\\Front\\RequestParse",
            "short": "RequestParse",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/RequestParse.php",
            "lines": 68,
            "doc": "The query vars the reference's request parse sets for an address\n(WP::parse_request), which plugins read off $wp->query_vars and\nget_query_var: each public var the query string or form carries, else\nthe one the matched rewrite rule set (Front\\RuleTable), all in the\npublic vars' order (a plugin's own after the core ones); a post type's\nown var brings post_type and name; a path no rule matches is error=404\n(the query string's error is ignored).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Theme\\MainQueryBridge"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "vars",
                    "static": true,
                    "visibility": "public",
                    "signature": "vars(array $rule, array $publicVars, array $given): array",
                    "doc": "The parse's vars, in the reference's order.",
                    "shapes": [
                        "@param array<string, string> $rule the matched rule's vars",
                        "@param list<string> $publicVars the public query vars, after the query_vars filter",
                        "@param array<string, mixed> $given the query string's and the form's values",
                        "@return array<string, string|array<mixed>>"
                    ],
                    "params": [
                        {
                            "name": "rule",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "the matched rule's vars"
                        },
                        {
                            "name": "publicVars",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the public query vars, after the query_vars filter"
                        },
                        {
                            "name": "given",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the query string's and the form's values"
                        }
                    ],
                    "line": 28,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "mismatch",
                    "static": true,
                    "visibility": "public",
                    "signature": "mismatch(array $publicVars, array $query, array $form): bool",
                    "doc": "Whether the query string and the form give a public var two different\nvalues: the reference refuses such a request (A variable mismatch has\nbeen detected, a 400) before it reads either.",
                    "shapes": [
                        "@param list<string> $publicVars",
                        "@param array<string, mixed> $query",
                        "@param array<string, mixed> $form"
                    ],
                    "params": [
                        {
                            "name": "publicVars",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "form",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "queryString",
                    "static": true,
                    "visibility": "public",
                    "signature": "queryString(array $vars): string",
                    "doc": "The reference's query string for parse vars (WP::build_query_string): each one with a value, encoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 84
                }
            ]
        },
        {
            "name": "Minn\\Front\\Resolution",
            "short": "Resolution",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/Resolution.php",
            "lines": 116,
            "doc": "The outcome of resolving a public URL: which kind of thing it names,\nthe record behind it, the page number for paginated views, and the query\nvars of the rewrite rule the address matched (what the request parse\nhands plugins). Redirects carry their target instead.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\UserRecord",
                "Minn\\Front\\Kind"
            ],
            "usedBy": [
                "Minn\\Blocks\\Context",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\PrintedResponse",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\RuleRoutes",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Front\\SingleQueries",
                "Minn\\Front\\SitemapController",
                "Minn\\Theme\\ArchiveTitle",
                "Minn\\Theme\\BodyClasses",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\Templates"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Front\\Kind $kind, Minn\\Content\\PostRecord|Minn\\Content\\UserRecord|Minn\\Content\\TermRecord|array|null $record = NULL, int $paged = 1, ?string $location = NULL, int $status = 200, ?string $search = NULL, ?array $date = NULL, ?string $authorName = NULL, bool $front = false, bool $preview = false, bool $postsPage = false, array $vars = array ( ))",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed>|PostRecord|UserRecord|null $record the post, term, or user row",
                    "@param array{0: int, 1: ?int, 2: ?int}|null $date year, month, day"
                ],
                "params": [
                    {
                        "name": "kind",
                        "type": "Minn\\Front\\Kind",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "record",
                        "type": "Minn\\Content\\PostRecord|Minn\\Content\\UserRecord|Minn\\Content\\TermRecord|array|null",
                        "shape": "array<string, mixed>|PostRecord|UserRecord|null",
                        "default": "NULL",
                        "doc": "the post, term, or user row"
                    },
                    {
                        "name": "paged",
                        "type": "int",
                        "shape": "",
                        "default": "1",
                        "doc": ""
                    },
                    {
                        "name": "location",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "status",
                        "type": "int",
                        "shape": "",
                        "default": "200",
                        "doc": ""
                    },
                    {
                        "name": "search",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "date",
                        "type": "?array",
                        "shape": "array{0: int, 1: ?int, 2: ?int}|null",
                        "default": "NULL",
                        "doc": "year, month, day"
                    },
                    {
                        "name": "authorName",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "front",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    },
                    {
                        "name": "preview",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    },
                    {
                        "name": "postsPage",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    },
                    {
                        "name": "vars",
                        "type": "array",
                        "shape": "",
                        "default": "array ( )",
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 23,
                "end": 41
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "kind",
                    "type": "Minn\\Front\\Kind",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "record",
                    "type": "Minn\\Content\\PostRecord|Minn\\Content\\UserRecord|Minn\\Content\\TermRecord|array|null",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "paged",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "location",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "status",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "search",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "date",
                    "type": "?array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "authorName",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "front",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "the static front page (show_on_front = page), rendered as a page that is also home",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "preview",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "a preview: the reader's autosave replaces the stored content",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "postsPage",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "the posts page (page_for_posts): the record is the page, the listing is the blog",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "vars",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "asPreview",
                    "static": false,
                    "visibility": "public",
                    "signature": "asPreview(): self",
                    "doc": "The same resolution marked as a preview.",
                    "shapes": [],
                    "params": [],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "withVars",
                    "static": false,
                    "visibility": "public",
                    "signature": "withVars(array $vars): self",
                    "doc": "The same resolution reached through a rule with these query vars. @param array<string, string> $vars",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "home",
                    "static": true,
                    "visibility": "public",
                    "signature": "home(int $paged = 1): self",
                    "doc": "The home listing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "single",
                    "static": true,
                    "visibility": "public",
                    "signature": "single(Minn\\Content\\PostRecord $post, int $paged = 1): self",
                    "doc": "A single post or page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "frontPage",
                    "static": true,
                    "visibility": "public",
                    "signature": "frontPage(Minn\\Content\\PostRecord $page, int $paged = 1): self",
                    "doc": "The static front page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "page",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "postsPage",
                    "static": true,
                    "visibility": "public",
                    "signature": "postsPage(Minn\\Content\\PostRecord $page, int $paged = 1): self",
                    "doc": "The page that stands for the blog: a home listing whose record is the page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "page",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": true,
                    "visibility": "public",
                    "signature": "term(string $taxonomy, Minn\\Content\\TermRecord $term, int $paged = 1): self",
                    "doc": "A category or tag archive.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "taxonomy",
                    "static": true,
                    "visibility": "public",
                    "signature": "taxonomy(Minn\\Content\\TermRecord $term, int $paged = 1): self",
                    "doc": "A plugin taxonomy's term archive; the record is the term row (with its taxonomy).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "postTypeArchive",
                    "static": true,
                    "visibility": "public",
                    "signature": "postTypeArchive(array $type, int $paged = 1): self",
                    "doc": "A plugin post type's archive; the record is the registered type (name, label, ...).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "author",
                    "static": true,
                    "visibility": "public",
                    "signature": "author(string $name, ?Minn\\Content\\UserRecord $user, int $paged = 1): self",
                    "doc": "An author archive.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "?Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "date",
                    "static": true,
                    "visibility": "public",
                    "signature": "date(int $year, ?int $month, ?int $day, int $paged = 1): self",
                    "doc": "A date archive.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "year",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "month",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "day",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "search",
                    "static": true,
                    "visibility": "public",
                    "signature": "search(string $term, int $paged = 1): self",
                    "doc": "A search.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "notFound",
                    "static": true,
                    "visibility": "public",
                    "signature": "notFound(): self",
                    "doc": "A 404.",
                    "shapes": [],
                    "params": [],
                    "line": 116,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "redirect",
                    "static": true,
                    "visibility": "public",
                    "signature": "redirect(string $location, int $status = 301): self",
                    "doc": "A redirect.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "301",
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "id",
                    "static": false,
                    "visibility": "public",
                    "signature": "id(): int",
                    "doc": "The record's id, post or term.",
                    "shapes": [],
                    "params": [],
                    "line": 128,
                    "end": 131
                }
            ]
        },
        {
            "name": "Minn\\Front\\Resolver",
            "short": "Resolver",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/Resolver.php",
            "lines": 325,
            "doc": "Turns a public URL into a Resolution the way the reference's request\nparse does: the root by its query string, any other path by the first\nof the site's rewrite rules it fits (Front\\RuleTable), whose query vars\nname what it is (Front\\RuleRoutes). What is left here are the\nreference's canonical answers around that (redirect_canonical,\nwp_old_slug_redirect):\n\n- Unpaged content and archives without a trailing slash redirect to the\nslashed form, as typed (case kept), as do an embed's and an endpoint's\naddresses; paged views, search, and 404s do not.\n- Query-var forms redirect to the pretty form when the target is\npublic: a single's (?p=, ?page_id=, ?name=, ?pagename=; SingleQueries)\nand an archive's (?m=, ?year=, ?author=, one taxonomy's term;\nQueryMoves), unless a search is asked for.\n- A single asked for under a category it is not in (where the\nstructure names one), or with an old-style page number, moves to its\nown address; a trackback address goes to the post; the front page\nanswers only at the root.\n- A name the site no longer has: the post that used to have it, else the\nclosest published page or post whose name starts with it, pages before\nposts, newest first. Archives never guess.\n- Non-public posts are 404 to anonymous readers and served to a reader\nwho can edit them.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Nonce",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Redirects",
                "Minn\\Front\\Resolution",
                "Minn\\Front\\RuleRoutes",
                "Minn\\Front\\RuleTable",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Front\\SingleQueries",
                "Minn\\Http\\Request",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\Canonical",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\SingleQueries"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Content\\Terms $terms, Minn\\Front\\Permalinks $permalinks, Closure $canReadUnpublished, int $perPage)",
                "doc": "",
                "shapes": [
                    "@param Closure(PostRecord): bool $canReadUnpublished"
                ],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "canReadUnpublished",
                        "type": "Closure",
                        "shape": "Closure(PostRecord): bool",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "perPage",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 45,
                "end": 53
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "canReadUnpublished",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "perPage",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromDb",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromDb(Minn\\Db $db, Closure $canReadUnpublished): self",
                    "doc": "A resolver over the site's own settings.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "canReadUnpublished",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "permalinks",
                    "static": false,
                    "visibility": "public",
                    "signature": "permalinks(): Minn\\Front\\Permalinks",
                    "doc": "The link builder.",
                    "shapes": [],
                    "params": [],
                    "line": 69,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "perPage",
                    "static": false,
                    "visibility": "public",
                    "signature": "perPage(): int",
                    "doc": "Posts per page.",
                    "shapes": [],
                    "params": [],
                    "line": 75,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "resolve",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolve(Minn\\Http\\Request $request, ?Minn\\Front\\Redirects $mode = NULL): Minn\\Front\\Resolution",
                    "doc": "$canonical mirrors the reference's redirect_canonical rule: only GET\nand HEAD get trailing-slash, pretty-URL, and 404-guess redirects;\nevery other method renders what the query alone finds, as typed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "?Minn\\Front\\Redirects",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "viewableTypes",
                    "static": true,
                    "visibility": "public",
                    "signature": "viewableTypes(): array",
                    "doc": "The post types a guess looks among: those a reader can view that\nsearches include.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 245,
                    "end": 255
                },
                {
                    "routes": [],
                    "name": "resolvePath",
                    "static": false,
                    "visibility": "private",
                    "signature": "resolvePath(Minn\\Http\\Request $request, Minn\\Front\\Redirects $redirects): Minn\\Front\\Resolution",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "canonical",
                    "static": false,
                    "visibility": "private",
                    "signature": "canonical(Minn\\Front\\Resolution $resolution, Minn\\Http\\Request $request, string $path, Minn\\Front\\Redirects $redirects): Minn\\Front\\Resolution",
                    "doc": "The canonical answer for what a path's rule found: the found thing\nas typed, or where it should be asked for instead.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 187
                },
                {
                    "routes": [],
                    "name": "pagedMove",
                    "static": false,
                    "visibility": "private",
                    "signature": "pagedMove(Minn\\Front\\Resolution $resolution, Minn\\Http\\Request $request, string $path): ?Minn\\Front\\Resolution",
                    "doc": "A listing page that is not one: a post (not a page) asked for with a\npage of listing (/hello-world/page/2/, ?paged=2) moves to the post, the\nrest of the query along but that; the first page of any listing or page\ndrops its /page/1/. Null when neither applies.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "missing",
                    "static": false,
                    "visibility": "private",
                    "signature": "missing(array $vars, Minn\\Front\\Redirects $redirects): ?Minn\\Front\\Resolution",
                    "doc": "A name the site does not have: where the post that used to have it\nlives now (as typed too, where wp_old_slug_redirect makes the move),\nelse, on a single's rule, the closest match. Null when there is none.",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 237
                },
                {
                    "routes": [],
                    "name": "endpointIn",
                    "static": false,
                    "visibility": "private",
                    "signature": "endpointIn(array $vars): bool",
                    "doc": "Whether the vars carry a rewrite endpoint's var. @param array<string, string> $vars",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 258,
                    "end": 267
                },
                {
                    "routes": [],
                    "name": "segments",
                    "static": true,
                    "visibility": "private",
                    "signature": "segments(string $path): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 270,
                    "end": 273
                },
                {
                    "routes": [],
                    "name": "resolveQueryVars",
                    "static": false,
                    "visibility": "private",
                    "signature": "resolveQueryVars(Minn\\Http\\Request $request, Minn\\Front\\Redirects $redirects): Minn\\Front\\Resolution",
                    "doc": "The root by its query string, in the grammar a path's rule vars are\nread in (RuleRoutes): a single's vars first (SingleQueries makes\ntheir moves), then the archive forms that move (QueryMoves), then\nwhat the vars name, an id form read as the name it stands for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 281,
                    "end": 296
                },
                {
                    "routes": [],
                    "name": "rootVars",
                    "static": false,
                    "visibility": "private",
                    "signature": "rootVars(Minn\\Http\\Request $request): ?array",
                    "doc": "The root's query vars as RuleRoutes reads them: the query string's\n(error is not the query string's to set), ?cat= as the category's\nslug, ?author= as the author's name, ?m= as its year, month and day.\nNull when an id names nothing the site has.",
                    "shapes": [
                        "@return array<string, string>|null"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 306,
                    "end": 330
                },
                {
                    "routes": [],
                    "name": "archives",
                    "static": false,
                    "visibility": "private",
                    "signature": "archives(): Minn\\Front\\ArchiveAddresses",
                    "doc": "The archives a request may stand for.",
                    "shapes": [],
                    "params": [],
                    "line": 333,
                    "end": 336
                },
                {
                    "routes": [],
                    "name": "attachments",
                    "static": false,
                    "visibility": "private",
                    "signature": "attachments(): Minn\\Front\\AttachmentAddresses",
                    "doc": "The addresses an attachment's page answers to.",
                    "shapes": [],
                    "params": [],
                    "line": 339,
                    "end": 342
                },
                {
                    "routes": [],
                    "name": "elsewhere",
                    "static": false,
                    "visibility": "private",
                    "signature": "elsewhere(): Minn\\Front\\SingleAddresses",
                    "doc": "The addresses a single answers to besides its own.",
                    "shapes": [],
                    "params": [],
                    "line": 345,
                    "end": 348
                },
                {
                    "routes": [],
                    "name": "readable",
                    "static": false,
                    "visibility": "private",
                    "signature": "readable(Minn\\Content\\PostRecord $post): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 350,
                    "end": 365
                }
            ]
        },
        {
            "name": "Minn\\Front\\RuleRoutes",
            "short": "RuleRoutes",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/RuleRoutes.php",
            "lines": 156,
            "doc": "What a matched rewrite rule's query vars name, as the reference's main\nquery reads them (suites permalinks, plugin-rules, request-vars): a post\nor page by id, an attachment by name, a page (or an attachment) by its\npath, a post by name (of the type the vars give), a registered type's\nitem by its own var; else a search, a category's, tag's, post\nformat's or registered taxonomy's archive, an author's, a date's, a\npost type's; else the front. A rule that set error is a 404, as is a single\nthe reader may not read. Under a name the date or category the rule also\ncaptured does not narrow the find: where the post really lives is the\ncanonical redirect's business.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Front\\ArchiveAddresses",
                "Minn\\Front\\Resolution",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Front\\Resolver"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Front\\ArchiveAddresses $archives, int $frontPageId, int $postsPageId, Closure $readable)",
                "doc": "",
                "shapes": [
                    "@param Closure(PostRecord): bool $readable whether the reader may read a post"
                ],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "archives",
                        "type": "Minn\\Front\\ArchiveAddresses",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "frontPageId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "postsPageId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "readable",
                        "type": "Closure",
                        "shape": "Closure(PostRecord): bool",
                        "default": null,
                        "doc": "whether the reader may read a post"
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 34
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "archives",
                    "type": "Minn\\Front\\ArchiveAddresses",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "frontPageId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "postsPageId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "readable",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "resolve",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolve(array $vars): Minn\\Front\\Resolution",
                    "doc": "The resolution the vars stand for. @param array<string, string> $vars",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "single",
                    "static": false,
                    "visibility": "private",
                    "signature": "single(array $vars, string $type, int $paged): ?Minn\\Front\\Resolution",
                    "doc": "A single the vars name; null when they name none. @param array<string, string> $vars",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "archive",
                    "static": false,
                    "visibility": "private",
                    "signature": "archive(array $vars, string $type, int $paged): Minn\\Front\\Resolution",
                    "doc": "The archive the vars name, the front when they name none: a search\nfirst (whatever else they name, as the reference's templates\nchoose), a term's, an author's, a date's, a post type's when they\ngive one and nothing else.",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "typeArchive",
                    "static": false,
                    "visibility": "private",
                    "signature": "typeArchive(string $name, int $paged): Minn\\Front\\Resolution",
                    "doc": "A post type's archive, when it has one; the front's listing (of that type) when it has none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "found",
                    "static": false,
                    "visibility": "private",
                    "signature": "found(?Minn\\Content\\PostRecord $post, int $paged): Minn\\Front\\Resolution",
                    "doc": "A found post as the reader may see it: the static front page, the\nposts page (the blog's listing), any other post or page; a 404 when\nthere is none or the reader may not read it (an attachment as its\nparent is).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 131,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "readable",
                    "static": false,
                    "visibility": "private",
                    "signature": "readable(Minn\\Content\\PostRecord $post): bool",
                    "doc": "Whether the reader may read a post; an attachment as its parent is, a loose one as it stands.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "registered",
                    "static": true,
                    "visibility": "private",
                    "signature": "registered(string $kind): array",
                    "doc": "The registered post types or taxonomies that answer to a var of their\nown, among those a visitor may query (the reference keeps no other's\nvar public): name => var.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "segments",
                    "static": true,
                    "visibility": "private",
                    "signature": "segments(string $path): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 175,
                    "end": 178
                }
            ]
        },
        {
            "name": "Minn\\Front\\RuleTable",
            "short": "RuleTable",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/RuleTable.php",
            "lines": 100,
            "doc": "An address read as WordPress's request parse reads it (suites\npermalinks, request-vars, plugin-rules): against the site's rewrite\nrules (made and stored when there are none, a plugin's own among them,\neach place's endpoints too), the first rule the address fits winning, as\ntyped or decoded; a page's rule fits only when a page stands at the path\nit captured, under verbose page rules. A match is the rule's query vars\nwith the matches put in. Which of them count is the request parse's\nbusiness (the public vars, after the query_vars filter).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Front\\Resolver"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "vars",
                    "static": true,
                    "visibility": "public",
                    "signature": "vars(string $path): ?array",
                    "doc": "The vars the site's rules give a path, or null when no rule fits it\n(or the site has none: plain permalinks).",
                    "shapes": [
                        "@return array<string, string>|null"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "match",
                    "static": true,
                    "visibility": "public",
                    "signature": "match(string $path): ?array",
                    "doc": "What the request parse makes of a path (WP::parse_request): the path\nunder the home's, the rule it fits and that rule's query with the\nmatches put in, and its vars; the rule and query empty when none\nfits. Null when the site has no rules (plain permalinks).",
                    "shapes": [
                        "@return array{request: string, rule: string, query: string, vars: array<string, string>}|null"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "subject",
                    "static": true,
                    "visibility": "private",
                    "signature": "subject(string $path): string",
                    "doc": "The address as the rules read it: under the home's own path, without the slashes at its ends.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "first",
                    "static": true,
                    "visibility": "private",
                    "signature": "first(array $rules, string $subject, bool $verbosePages, Closure $pageAt): ?array",
                    "doc": "The first rule an address fits, as typed or decoded; a page's rule\nonly when a page is at the path it captured, under verbose page rules.",
                    "shapes": [
                        "@param array<mixed, mixed> $rules regex => query",
                        "@param Closure(string): bool $pageAt whether a page stands at a path",
                        "@return array{0: string, 1: string, 2: array<int|string, string>}|null"
                    ],
                    "params": [
                        {
                            "name": "rules",
                            "type": "array",
                            "shape": "array<mixed, mixed>",
                            "default": null,
                            "doc": "regex => query"
                        },
                        {
                            "name": "subject",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "verbosePages",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pageAt",
                            "type": "Closure",
                            "shape": "Closure(string): bool",
                            "default": null,
                            "doc": "whether a page stands at a path"
                        }
                    ],
                    "line": 77,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "queryOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "queryOf(string $query, array $matches): string",
                    "doc": "A matched rule's query with the matches put in (urlencoded, so a\ncaptured \"&x=1\" cannot split into extra vars).",
                    "shapes": [
                        "@param array<int|string, string> $matches"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "matches",
                            "type": "array",
                            "shape": "array<int|string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "pageAt",
                    "static": true,
                    "visibility": "private",
                    "signature": "pageAt(string $path): bool",
                    "doc": "Whether a page stands at a path (not one in the trash).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 117
                }
            ]
        },
        {
            "name": "Minn\\Front\\SingleAddresses",
            "short": "SingleAddresses",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/SingleAddresses.php",
            "lines": 67,
            "doc": "The addresses a single answers to besides its own, as the reference\ntreats them: a slug the post used to have (alone, with a page number, or\nwith an embed or trackback suffix), and an address that puts it under a\ncategory it is not in.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution"
            ],
            "usedBy": [
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleQueries"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 20,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "formerSlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "formerSlug(string $slug, int $paged = 1): ?Minn\\Front\\Resolution",
                    "doc": "A slug a post used to have redirects to where the post lives now,\nkeeping the page number and dropping the query string; the lookup\nignores status because the reference does (unreadable posts land on\ntheir `?p=` form and answer 404 there).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paged",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "misplaced",
                    "static": false,
                    "visibility": "public",
                    "signature": "misplaced(Minn\\Content\\PostRecord $post, array $vars): bool",
                    "doc": "Whether a post was asked for under a category it is not in, where\nthe structure names the category: the category the address names is\nnone at that path, or not one of the post's. The reference finds the\npost by its name whatever the category, then moves to its own\naddress (a post in two categories answers under either).",
                    "shapes": [
                        "@param array<string, string> $vars"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "formerSuffix",
                    "static": false,
                    "visibility": "public",
                    "signature": "formerSuffix(Minn\\Front\\Resolution $redirect, string $suffix): Minn\\Front\\Resolution",
                    "doc": "A former slug asked for with a suffix: embed follows the post to its\nnew embed address, trackback goes to the post itself. The front\npage's redirect to the root keeps its own handling.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "redirect",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "suffix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Front\\SingleQueries",
            "short": "SingleQueries",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/SingleQueries.php",
            "lines": 117,
            "doc": "The single a query string asks for, as the reference's request parse and\ncanonical redirect answer it: by id (?p=, ?page_id=, any viewable type's;\nan attachment's goes to its own page), an attachment by id or slug (?attachment_id=,\n?attachment=), a post by slug (?name=), a page by path (?pagename=).\nWith canonical redirects on, an address that is not the single's own\nmoves there, the other query arguments along; without, each var is\nstrict about the type it finds.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Redirects",
                "Minn\\Front\\Resolution",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleAddresses",
                "Minn\\Http\\Request",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Front\\Resolver"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, Minn\\Front\\AttachmentAddresses $attachments, Minn\\Front\\SingleAddresses $elsewhere, Closure $readable)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "attachments",
                        "type": "Minn\\Front\\AttachmentAddresses",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "elsewhere",
                        "type": "Minn\\Front\\SingleAddresses",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "readable",
                        "type": "Closure",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "attachments",
                    "type": "Minn\\Front\\AttachmentAddresses",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "elsewhere",
                    "type": "Minn\\Front\\SingleAddresses",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "readable",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(Minn\\Http\\Request $request, Minn\\Front\\Redirects $redirects): ?Minn\\Front\\Resolution",
                    "doc": "The resolution the query's single vars amount to; null when it has none of them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "byId",
                    "static": false,
                    "visibility": "private",
                    "signature": "byId(Minn\\Http\\Request $request, string $key, Minn\\Front\\Redirects $redirects): Minn\\Front\\Resolution",
                    "doc": "?p= or ?page_id=: the post or page (an attachment to its own page), moving to its pretty address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "byPath",
                    "static": false,
                    "visibility": "private",
                    "signature": "byPath(string $path, Minn\\Front\\Redirects $redirects): Minn\\Front\\Resolution",
                    "doc": "?pagename=: the page at that path (the front page moves to the root), else one by the last slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "singleOrRedirect",
                    "static": false,
                    "visibility": "private",
                    "signature": "singleOrRedirect(Minn\\Content\\PostRecord $post, Minn\\Http\\Request $request, Minn\\Front\\Redirects $redirects): Minn\\Front\\Resolution",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "Minn\\Front\\Redirects",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 137
                }
            ]
        },
        {
            "name": "Minn\\Front\\SitemapController",
            "short": "SitemapController",
            "namespace": "Minn\\Front",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Front/SitemapController.php",
            "lines": 65,
            "doc": "The sitemap index, its pages, and the two stylesheets, as the\nreference serves them: the request's sitemap variables stand\nin the main query and the sitemaps server answers at template_redirect\n(SitemapRequest), through every filter a plugin hooks, any provider it\nregisters among them; what it does not print, the theme renders (a 404,\nor the page a stray address amounts to).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\PrintedResponse",
                "Minn\\Front\\Resolution",
                "Minn\\Front\\SitemapRequest",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Theme\\MainQueryBridge"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\FrontController"
            ],
            "constructor": {
                "signature": "__construct(Closure $notFound, Minn\\Theme\\MainQueryBridge $bridge, Closure $themed)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "notFound",
                        "type": "Closure",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bridge",
                        "type": "Minn\\Theme\\MainQueryBridge",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "themed",
                        "type": "Closure",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "notFound",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "bridge",
                    "type": "Minn\\Theme\\MainQueryBridge",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "themed",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp-sitemap.xml (public)"
                    ],
                    "name": "sitemapIndex",
                    "static": false,
                    "visibility": "public",
                    "signature": "sitemapIndex(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The sitemap index.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [
                        "GET /wp-sitemap-{name:[a-z]+}-{rest:[a-z_0-9-]+}.xml (public)"
                    ],
                    "name": "sitemap",
                    "static": false,
                    "visibility": "public",
                    "signature": "sitemap(Minn\\Http\\Request $request, string $name, string $rest): Minn\\Http\\Response",
                    "doc": "One sitemap page: a provider's name, its subtype when it has them, and the page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rest",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 50
                },
                {
                    "routes": [
                        "GET /wp-sitemap.xsl (public)"
                    ],
                    "name": "sitemapStylesheet",
                    "static": false,
                    "visibility": "public",
                    "signature": "sitemapStylesheet(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The sitemap stylesheet.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 57
                },
                {
                    "routes": [
                        "GET /wp-sitemap-index.xsl (public)"
                    ],
                    "name": "sitemapIndexStylesheet",
                    "static": false,
                    "visibility": "public",
                    "signature": "sitemapIndexStylesheet(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The sitemap index stylesheet.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "queried",
                    "static": false,
                    "visibility": "public",
                    "signature": "queried(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The query form (?sitemap=, ?sitemap-stylesheet=) on the front page, with plugins loaded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "served",
                    "static": false,
                    "visibility": "private",
                    "signature": "served(array $vars): Minn\\Http\\Response",
                    "doc": "The reference's answer: what the sitemaps server printed, else the\ntheme's page on the query as it stands (a 404 when the server made it\none).",
                    "shapes": [
                        "@param array<string, mixed> $vars"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 87
                }
            ]
        },
        {
            "name": "Minn\\Front\\SitemapRequest",
            "short": "SitemapRequest",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/SitemapRequest.php",
            "lines": 71,
            "doc": "A sitemap request at template_redirect, as the reference's sitemaps\nserver answers it: a sitemap address asked for another way (the query\nform, page 0) moves to its own; with the sitemaps off, a provider nobody\nregistered, or a subtype or page that has nothing, the request is a 404\nthe theme renders; otherwise the stylesheet, the index or the provider's\npage is printed and the request ends. Since 7.1.3 this is where a\nsitemap page is judged: the main query no longer makes an empty page a\n404 first, so a page a plugin fills past the page count still prints.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\Printed"
            ],
            "usedBy": [
                "Minn\\Front\\SitemapController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "canonical",
                    "static": true,
                    "visibility": "public",
                    "signature": "canonical(): void",
                    "doc": "The canonical step: a sitemap asked for by another address is sent to its own.",
                    "shapes": [],
                    "params": [],
                    "line": 23,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "serve",
                    "static": true,
                    "visibility": "public",
                    "signature": "serve(WP_Sitemaps $server): void",
                    "doc": "What the sitemaps server does with the request (render_sitemaps).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "server",
                            "type": "WP_Sitemaps",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": true,
                    "visibility": "private",
                    "signature": "page(WP_Sitemaps $server, string $sitemap, string $subtype): void",
                    "doc": "One provider's page: printed, or a 404 when the subtype is not the provider's or the page has nothing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "server",
                            "type": "WP_Sitemaps",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sitemap",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "notFound",
                    "static": true,
                    "visibility": "private",
                    "signature": "notFound(): void",
                    "doc": "The main query made a 404, which the theme renders.",
                    "shapes": [],
                    "params": [],
                    "line": 85,
                    "end": 89
                }
            ]
        },
        {
            "name": "Minn\\Front\\SitemapXml",
            "short": "SitemapXml",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/SitemapXml.php",
            "lines": 49,
            "doc": "The two sitemap documents, index and URL set, from entry maps; one\nbuilder for the engine's routes and the facade's renderer. An element\nwith nothing inside closes itself, at every level, as the reference's\nXML writer prints it (probe sitemap-classes).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "index",
                    "static": true,
                    "visibility": "public",
                    "signature": "index(array $entries, ?string $stylesheet): string",
                    "doc": "A sitemap index document.",
                    "shapes": [
                        "@param list<array<string, string|null>> $entries each a map of element name => text; null values are skipped"
                    ],
                    "params": [
                        {
                            "name": "entries",
                            "type": "array",
                            "shape": "list<array<string, string|null>>",
                            "default": null,
                            "doc": "each a map of element name => text; null values are skipped"
                        },
                        {
                            "name": "stylesheet",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "urlset",
                    "static": true,
                    "visibility": "public",
                    "signature": "urlset(array $entries, ?string $stylesheet): string",
                    "doc": "A sitemap urlset document.",
                    "shapes": [
                        "@param list<array<string, string|null>> $entries"
                    ],
                    "params": [
                        {
                            "name": "entries",
                            "type": "array",
                            "shape": "list<array<string, string|null>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stylesheet",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "elements",
                    "static": true,
                    "visibility": "private",
                    "signature": "elements(string $tag, array $entries): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "entries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "element",
                    "static": true,
                    "visibility": "private",
                    "signature": "element(string $tag, string $inner, string $attributes = ''): string",
                    "doc": "One element: closed on itself when empty.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "inner",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "document",
                    "static": true,
                    "visibility": "private",
                    "signature": "document(?string $stylesheet, string $body): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 62
                }
            ]
        },
        {
            "name": "Minn\\Front\\Sitemaps",
            "short": "Sitemaps",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/Sitemaps.php",
            "lines": 34,
            "doc": "What the sitemaps share with WP_Sitemaps, which serves them: the two\nstylesheets browsers get when they open a sitemap, their CSS\n(wp_sitemaps_stylesheet_css filters it), and the date form an entry's\nlastmod takes.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CSS",
                    "value": "'body{font:15px/1.5 sans-serif;margin:2em}table{border-collapse:collapse}td{padding:.35em 1em .35em 0;border-bottom:1px solid #ddd}'",
                    "doc": "The stylesheets' own CSS (wp_sitemaps_stylesheet_css filters it when plugins are loaded).",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "stylesheet",
                    "static": true,
                    "visibility": "public",
                    "signature": "stylesheet(string $css = self::CSS): string",
                    "doc": "The engine's own stylesheet for browsers that open a sitemap.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "css",
                            "type": "string",
                            "shape": "",
                            "default": "self::CSS",
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 22
                },
                {
                    "routes": [],
                    "name": "indexStylesheet",
                    "static": true,
                    "visibility": "public",
                    "signature": "indexStylesheet(string $css = self::CSS): string",
                    "doc": "The stylesheet the sitemap index links: one column, the sitemaps.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "css",
                            "type": "string",
                            "shape": "",
                            "default": "self::CSS",
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "w3c",
                    "static": true,
                    "visibility": "public",
                    "signature": "w3c(string $gmt): string",
                    "doc": "A GMT date as a sitemap dates it (W3C, UTC).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "gmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "xsl",
                    "static": true,
                    "visibility": "private",
                    "signature": "xsl(string $css, string $rows): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "css",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rows",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 39
                }
            ]
        },
        {
            "name": "Minn\\Front\\TermLists",
            "short": "TermLists",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/TermLists.php",
            "lines": 134,
            "doc": "A term's parent chain and the tag cloud, built from term rows the caller\nalready fetched and links the caller resolves. The category list and\nselect are the walkers' (Walker_Category, Walker_CategoryDropdown).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parentChain",
                    "static": true,
                    "visibility": "public",
                    "signature": "parentChain(array $line, bool $link, string $separator, bool $bySlug): string",
                    "doc": "The chain of names from the outermost ancestor down to the term itself,\neach one separated and optionally wrapped in its own link. The separator\ntrails the last name too, so a breadcrumb reads \"Root/Mid/Leaf/\".",
                    "shapes": [
                        "@param list<array{name: string, slug: string, link: string}> $line outermost first, the term itself last"
                    ],
                    "params": [
                        {
                            "name": "line",
                            "type": "array",
                            "shape": "list<array{name: string, slug: string, link: string}>",
                            "default": null,
                            "doc": "outermost first, the term itself last"
                        },
                        {
                            "name": "link",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "separator",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bySlug",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "tagCloud",
                    "static": true,
                    "visibility": "public",
                    "signature": "tagCloud(array $tags, array $args): ?string",
                    "doc": "The tag cloud the reference prints, or null for none: the tags sorted\nand cut to the number asked for (cloudTags), each one's entry\n(cloudData), and the links (cloudMarkup). Each row brings its \"id\"\n(for the tag-link class; its key when it has none), \"scaled\" (its count\nthrough the scale callback), \"text\" (the count in words, for the\nlabel), and its link already escaped.",
                    "shapes": [
                        "@param array<array-key, array<string, mixed>> $tags",
                        "@param array<string, mixed> $args wp_generate_tag_cloud arguments"
                    ],
                    "params": [
                        {
                            "name": "tags",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "wp_generate_tag_cloud arguments"
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "cloudTags",
                    "static": true,
                    "visibility": "public",
                    "signature": "cloudTags(array $tags, array $args): array",
                    "doc": "The tags in the cloud's order (by name, or by count; random shuffles)\nand cut to the number asked for. Keys survive the sort; taking the\nfirst N renumbers the numeric ones before they name the tags.",
                    "shapes": [
                        "@param array<array-key, array<string, mixed>> $tags",
                        "@return array<array-key, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "tags",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "cloudData",
                    "static": true,
                    "visibility": "public",
                    "signature": "cloudData(array $tags, array $args): array",
                    "doc": "Each tag's entry, as wp_generate_tag_cloud_data is handed them (probe\nfilter-inputs): id, url, role, name, the count in words and as a\nnumber, the link class, the font size, the label attribute and the\nshown count. Sizes step from smallest to largest across the scaled\ncounts; a reversed range steps by one unit; an empty one leaves every\ntag the same size and drops the label, unless the counts are shown.",
                    "shapes": [
                        "@param array<array-key, array<string, mixed>> $tags in the cloud's order",
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "tags",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": "in the cloud's order"
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "cloudMarkup",
                    "static": true,
                    "visibility": "public",
                    "signature": "cloudMarkup(array $data, array $args): ?string",
                    "doc": "The cloud from its entries (whatever wp_generate_tag_cloud_data made\nof them), in the format asked for, or null for none.",
                    "shapes": [
                        "@param list<array<string, mixed>> $data"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "sorted",
                    "static": true,
                    "visibility": "private",
                    "signature": "sorted(array $terms, string $orderby, string $order): array",
                    "doc": "By name (natural, case-insensitive) only for \"name\"; every other value\nsorts by count. Only \"DESC\", in capitals, reverses.",
                    "shapes": [
                        "@param array<array-key, array<string, mixed>> $terms"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "orderby",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "order",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 146
                }
            ]
        },
        {
            "name": "Minn\\Front\\ToolbarMarkup",
            "short": "ToolbarMarkup",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/ToolbarMarkup.php",
            "lines": 57,
            "doc": "WP_Admin_Bar's markup, piece by piece, as the reference prints it (probe\nadmin-bar): the wrapper (a skip link until the page has opened its body,\na class for phones), a group's list (named by the menu it opens from),\nand an item: a link or an empty div, its focus order, its attributes\nfrom meta, an arrow when it opens a menu below the top level, and any\nmarkup a plugin hangs after it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ATTRIBUTES",
                    "value": "array (   0 => 'onclick',   1 => 'target',   2 => 'title',   3 => 'rel',   4 => 'lang',   5 => 'dir', )",
                    "doc": "The meta keys an item carries onto its link or div, in the reference's order.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "open",
                    "static": true,
                    "visibility": "public",
                    "signature": "open(): string",
                    "doc": "The bar's wrapper up to its first group.",
                    "shapes": [],
                    "params": [],
                    "line": 25,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "close",
                    "static": true,
                    "visibility": "public",
                    "signature": "close(): string",
                    "doc": "The bar's wrapper after its last group.",
                    "shapes": [],
                    "params": [],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "groupOpen",
                    "static": true,
                    "visibility": "public",
                    "signature": "groupOpen(object $node, mixed $menuTitle): string",
                    "doc": "A group's opening list tag, labelled by the menu it opens from when that has a menu title.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "menuTitle",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "itemOpen",
                    "static": true,
                    "visibility": "public",
                    "signature": "itemOpen(object $node): string",
                    "doc": "An item up to its submenu: the list item, then its link (or a div when it has none) with its title.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "itemClose",
                    "static": true,
                    "visibility": "public",
                    "signature": "itemClose(object $node): string",
                    "doc": "An item after its submenu: any markup a plugin hangs on it, and the list item's end.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 74
                }
            ]
        },
        {
            "name": "Minn\\Front\\ToolbarMenus",
            "short": "ToolbarMenus",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/ToolbarMenus.php",
            "lines": 339,
            "doc": "The nodes WordPress puts on the toolbar itself, as the reference adds\nthem on the front end for whoever is signed in (probe admin-bar): the\naccount menu, the WordPress menu, the site menu with its appearance\ngroup, the site editor and customizer links, updates, comments, new\ncontent, the edit link for what the page shows, the shortlink, the\nsecondary groups, and the search box. Each is one admin_bar_menu\ncallback, so plugins can unhook any of them by name.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MENUS",
                    "value": "array (   0 =>    array (     0 => 'wp_admin_bar_my_account_menu',     1 => 0,   ),   1 =>    array (     0 => 'wp_admin_bar_my_account_item',     1 => 9991,   ),   2 =>    array (     0 => 'wp_admin_bar_recovery_mode_menu',     1 => 9992,   ),   3 =>    array (     0 => 'wp_admin_bar_search_menu',     1 => 9999,   ),   4 =>    array (     0 => 'wp_admin_bar_sidebar_toggle',     1 => 0,   ),   5 =>    array (     0 => 'wp_admin_bar_wp_menu',     1 => 10,   ),   6 =>    array (     0 => 'wp_admin_bar_my_sites_menu',     1 => 20,   ),   7 =>    array (     0 => 'wp_admin_bar_site_menu',     1 => 30,   ),   8 =>    array (     0 => 'wp_admin_bar_edit_site_menu',     1 => 40,   ),   9 =>    array (     0 => 'wp_admin_bar_customize_menu',     1 => 40,   ),   10 =>    array (     0 => 'wp_admin_bar_updates_menu',     1 => 50,   ),   11 =>    array (     0 => 'wp_admin_bar_command_palette_menu',     1 => 55,   ),   12 =>    array (     0 => 'wp_admin_bar_comments_menu',     1 => 60,   ),   13 =>    array (     0 => 'wp_admin_bar_new_content_menu',     1 => 70,   ),   14 =>    array (     0 => 'wp_admin_bar_edit_menu',     1 => 80,   ),   15 =>    array (     0 => 'wp_admin_bar_add_secondary_groups',     1 => 200,   ), )",
                    "doc": "WordPress's menus as add_menus hooks them: the callback, its priority.",
                    "visibility": "public"
                },
                {
                    "name": "ICON",
                    "value": "'<span class=\"ab-icon\" aria-hidden=\"true\"></span>'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "myAccountItem",
                    "static": true,
                    "visibility": "public",
                    "signature": "myAccountItem(WP_Admin_Bar $bar): void",
                    "doc": "\"Howdy\" with the user's name and small avatar, at the right of the bar.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "myAccountMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "myAccountMenu(WP_Admin_Bar $bar): void",
                    "doc": "The account menu: the user's card (larger avatar, name, login when it differs, the profile link) and Log Out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "sidebarToggle",
                    "static": true,
                    "visibility": "public",
                    "signature": "sidebarToggle(WP_Admin_Bar $bar): void",
                    "doc": "The menu button wp-admin's narrow screens show; the front end has none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "wpMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "wpMenu(WP_Admin_Bar $bar): void",
                    "doc": "The WordPress logo's menu: About and Get Involved for a reader, then the wordpress.org links beside them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "siteMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "siteMenu(WP_Admin_Bar $bar): void",
                    "doc": "The site's name (with its icon when it has one), then the dashboard, appearance and plugins below it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "appearanceMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "appearanceMenu(WP_Admin_Bar $bar): void",
                    "doc": "The appearance group under the site's name: themes, then what the theme supports for those who may edit it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 174
                },
                {
                    "routes": [],
                    "name": "editSiteMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "editSiteMenu(WP_Admin_Bar $bar): void",
                    "doc": "Edit Site under a block theme, opening the template this page was built from when there is one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 188
                },
                {
                    "routes": [],
                    "name": "customizeMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "customizeMenu(WP_Admin_Bar $bar): void",
                    "doc": "Customize, for a theme the customizer serves (a block theme only once something registers with it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "updatesMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "updatesMenu(WP_Admin_Bar $bar): void",
                    "doc": "The count of updates waiting, when there are any.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 203,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "commentsMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "commentsMenu(WP_Admin_Bar $bar): void",
                    "doc": "The comments awaiting moderation, for those who edit posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 226
                },
                {
                    "routes": [],
                    "name": "newContentMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "newContentMenu(WP_Admin_Bar $bar): void",
                    "doc": "New: a post, media, a link, a page, each other type shown on the bar, and a user, as far as the user may create them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 229,
                    "end": 244
                },
                {
                    "routes": [],
                    "name": "editMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "editMenu(WP_Admin_Bar $bar): void",
                    "doc": "Edit, for the post, term or user the page shows, when the user may edit it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 276,
                    "end": 291
                },
                {
                    "routes": [],
                    "name": "shortlinkMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "shortlinkMenu(WP_Admin_Bar $bar): void",
                    "doc": "The page's shortlink, with a box to copy it from.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 314,
                    "end": 322
                },
                {
                    "routes": [],
                    "name": "secondaryGroups",
                    "static": true,
                    "visibility": "public",
                    "signature": "secondaryGroups(WP_Admin_Bar $bar): void",
                    "doc": "The groups for the bar's right side and the logo menu's outside links.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 325,
                    "end": 329
                },
                {
                    "routes": [],
                    "name": "recoveryModeMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "recoveryModeMenu(WP_Admin_Bar $bar): void",
                    "doc": "The way out of recovery mode, while the site is in it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 332,
                    "end": 343
                },
                {
                    "routes": [],
                    "name": "searchMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "searchMenu(WP_Admin_Bar $bar): void",
                    "doc": "The search box, on the front end.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bar",
                            "type": "WP_Admin_Bar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 346,
                    "end": 357
                },
                {
                    "routes": [],
                    "name": "profileUrl",
                    "static": true,
                    "visibility": "private",
                    "signature": "profileUrl(int $userId): string|false",
                    "doc": "The profile link for the signed-in user, or false when they cannot read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "creatable",
                    "static": true,
                    "visibility": "private",
                    "signature": "creatable(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, array{0: string, 1: string}> the admin page => [the label, the node id], for what the user may create"
                    ],
                    "params": [],
                    "line": 247,
                    "end": 273
                },
                {
                    "routes": [],
                    "name": "editPost",
                    "static": true,
                    "visibility": "private",
                    "signature": "editPost(object $post): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: ?string, 1: ?string} the edit label and link for a post, or nulls"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 294,
                    "end": 301
                },
                {
                    "routes": [],
                    "name": "editTerm",
                    "static": true,
                    "visibility": "private",
                    "signature": "editTerm(object $term): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: ?string, 1: ?string} the edit label and link for a term, or nulls"
                    ],
                    "params": [
                        {
                            "name": "term",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 304,
                    "end": 311
                }
            ]
        },
        {
            "name": "Minn\\Front\\ToolbarTree",
            "short": "ToolbarTree",
            "namespace": "Minn\\Front",
            "kind": "final class",
            "file": "public/minn/src/Minn/Front/ToolbarTree.php",
            "lines": 90,
            "doc": "WP_Admin_Bar's nodes bound into the tree they print as, as the reference\nbinds them (probe admin-bar): each gains its children and its type; an\nitem's children go into its \"-default\" group, made when the first one\narrives; a group inside a group sits next to it in a \"-container\", put\nwhere the outer group was; a node whose parent is missing is left out.\nThe bar's own node accessors are used throughout, so a subclass that\noverrides them still sees every node it is asked for.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Closure $get, Closure $set)",
                "doc": "",
                "shapes": [
                    "@param \\Closure(string): ?object $get the bar's _get_node",
                    "@param \\Closure(array<string, mixed>): void $set the bar's _set_node"
                ],
                "params": [
                    {
                        "name": "get",
                        "type": "Closure",
                        "shape": "\\Closure(string): ?object",
                        "default": null,
                        "doc": "the bar's _get_node"
                    },
                    {
                        "name": "set",
                        "type": "Closure",
                        "shape": "\\Closure(array<string, mixed>): void",
                        "default": null,
                        "doc": "the bar's _set_node"
                    }
                ],
                "visibility": "private",
                "line": 22,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "get",
                    "type": "Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "set",
                    "type": "Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "bind",
                    "static": true,
                    "visibility": "public",
                    "signature": "bind(array $nodes, Closure $get, Closure $set): ?object",
                    "doc": "The root of the bound tree, for nodes (the bar's, a root among them)\nreached through the bar's accessors.",
                    "shapes": [
                        "@param array<string, object> $nodes",
                        "@param \\Closure(string): ?object $get",
                        "@param \\Closure(array<string, mixed>): void $set"
                    ],
                    "params": [
                        {
                            "name": "nodes",
                            "type": "array",
                            "shape": "array<string, object>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "get",
                            "type": "Closure",
                            "shape": "\\Closure(string): ?object",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "set",
                            "type": "Closure",
                            "shape": "\\Closure(array<string, mixed>): void",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "place",
                    "static": false,
                    "visibility": "private",
                    "signature": "place(object $node): void",
                    "doc": "A node into its parent's children, through a default group or a container when it needs one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "defaultGroup",
                    "static": false,
                    "visibility": "private",
                    "signature": "defaultGroup(object $parent, string $groupClass): object",
                    "doc": "The group an item's child items go into, made the first time.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parent",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "groupClass",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "container",
                    "static": false,
                    "visibility": "private",
                    "signature": "container(object $group): object",
                    "doc": "The container a group shares with the groups inside it, put where the group was.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "group",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 104
                }
            ]
        },
        {
            "name": "Minn\\Html",
            "short": "Html",
            "namespace": "Minn",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html.php",
            "lines": 109,
            "doc": "HTML, the front door for escaping and cutting markup: plain static calls,\none import away (use Minn\\Html;), the way Minn\\Http and Minn\\Json are.\nEscaping at output boundaries goes through here.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\LanguageChoices",
                "Minn\\Blocks\\Duotone",
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\LatestPosts",
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Dynamic\\Theme\\TermBlocks",
                "Minn\\Blocks\\ImageTags",
                "Minn\\Blocks\\Renderer",
                "Minn\\Blocks\\Wrapper",
                "Minn\\Content\\Clickable",
                "Minn\\Content\\Menus",
                "Minn\\Content\\NoteMarkers",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\SiteIcon",
                "Minn\\Content\\TermLinks",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\Calendar",
                "Minn\\Front\\PostNavigation",
                "Minn\\Front\\Renderer",
                "Minn\\Front\\SitemapXml",
                "Minn\\Front\\TermLists",
                "Minn\\Html\\Decoder",
                "Minn\\Html\\Edits",
                "Minn\\Html\\Escaped",
                "Minn\\Html\\Scanner",
                "Minn\\Html\\TagQuery",
                "Minn\\Html\\Tags",
                "Minn\\Html\\TokenMap",
                "Minn\\Http\\Failure",
                "Minn\\I18n\\SiteLanguage",
                "Minn\\Login\\LoginController",
                "Minn\\Login\\LoginForm",
                "Minn\\Login\\LoginHooks",
                "Minn\\Login\\LoginNotices",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Runtime\\Shortcodes",
                "Minn\\Theme\\ArchiveTitle",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SPLIT",
                    "value": "'/(<(?:!--.*?(?:-->|$)|!\\\\[CDATA\\\\[.*?(?:\\\\]\\\\]>|$)|[^>]*>?))/s'",
                    "doc": "Markup's pieces of HTML: comments and CDATA whole (to the end when unclosed), else from \"<\" to the next \">\".",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "split",
                    "static": true,
                    "visibility": "public",
                    "signature": "split(string $html): array",
                    "doc": "Markup cut into text and HTML pieces, the HTML ones at the odd\npositions (wp_html_split): a comment or CDATA section is one piece\nwhatever it holds, and a \"<\" in text starts a piece that runs to the\nnext \">\".",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "esc",
                    "static": true,
                    "visibility": "public",
                    "signature": "esc(?string $value): string",
                    "doc": "Text escaped for HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "attr",
                    "static": true,
                    "visibility": "public",
                    "signature": "attr(?string $value): string",
                    "doc": "Text escaped for an attribute value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "addClasses",
                    "static": true,
                    "visibility": "public",
                    "signature": "addClasses(string $html, array $classes, ?string $onClass = NULL): string",
                    "doc": "Appends classes to the first element in a fragment (or to the first\nelement already carrying $onClass), adding a class attribute when\nthe element has none. Existing classes keep their order.",
                    "shapes": [
                        "@param list<string> $classes"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "classes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "onClass",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "stripAllTags",
                    "static": true,
                    "visibility": "public",
                    "signature": "stripAllTags(string $text, bool $collapseWhitespace = false): string",
                    "doc": "Drops script and style elements with their contents, then every other tag; whitespace runs optionally collapse to one space.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "collapseWhitespace",
                            "type": "bool",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "textField",
                    "static": true,
                    "visibility": "public",
                    "signature": "textField(string $text, bool $keepNewlines, Closure $validUtf8, Closure $encodeLessThan): string",
                    "doc": "A single line of plain text from user input: tags stripped, control\nwhitespace folded, percent escapes removed. The caller passes its own\nUTF-8 check and less-than encoder so its filters keep applying.",
                    "shapes": [
                        "@param Closure(string): string $validUtf8 @param Closure(string): string $encodeLessThan"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "keepNewlines",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "validUtf8",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": "@param Closure(string): string $encodeLessThan"
                        },
                        {
                            "name": "encodeLessThan",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "scriptBody",
                    "static": true,
                    "visibility": "public",
                    "signature": "scriptBody(string $markup): ?string",
                    "doc": "The code inside markup that is exactly one bare script element once the\nsurrounding whitespace is gone, or null for anything else: a tag with\nattributes, an empty element, a missing end. The tag names match in any\ncase and the code is returned as written.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 121
                }
            ]
        },
        {
            "name": "Minn\\Html\\Decoder",
            "short": "Decoder",
            "namespace": "Minn\\Html",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Decoder.php",
            "lines": 129,
            "doc": "Character reference decoding for text and attribute values: numeric and\nnamed references, the legacy names that work without a semicolon (not in\nan attribute when an \"=\" or alphanumeric follows), unknown ones left as is.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [
                "Minn\\Html\\Edits",
                "Minn\\Html\\Scanner",
                "Minn\\Html\\Tags",
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Runtime\\Interactivity",
                "Minn\\Support\\Kses"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "LEGACY",
                    "value": "array (   0 => 'AElig',   1 => 'AMP',   2 => 'Aacute',   3 => 'Acirc',   4 => 'Agrave',   5 => 'Aring',   6 => 'Atilde',   7 => 'Auml',   8 => 'COPY',   9 => 'Ccedil',   10 => 'ETH',   11 => 'Eacute',   12 => 'Ecirc',   13 => 'Egrave',   14 => 'Euml',   15 => 'GT',   16 => 'Iacute',   17 => 'Icirc',   18 => 'Igrave',   19 => 'Iuml',   20 => 'LT',   21 => 'Ntilde',   22 => 'Oacute',   23 => 'Ocirc',   24 => 'Ograve',   25 => 'Oslash',   26 => 'Otilde',   27 => 'Ouml',   28 => 'QUOT',   29 => 'REG',   30 => 'THORN',   31 => 'Uacute',   32 => 'Ucirc',   33 => 'Ugrave',   34 => 'Uuml',   35 => 'Yacute',   36 => 'aacute',   37 => 'acirc',   38 => 'acute',   39 => 'aelig',   40 => 'agrave',   41 => 'amp',   42 => 'aring',   43 => 'atilde',   44 => 'auml',   45 => 'brvbar',   46 => 'ccedil',   47 => 'cedil',   48 => 'cent',   49 => 'copy',   50 => 'curren',   51 => 'deg',   52 => 'divide',   53 => 'eacute',   54 => 'ecirc',   55 => 'egrave',   56 => 'eth',   57 => 'euml',   58 => 'frac12',   59 => 'frac14',   60 => 'frac34',   61 => 'gt',   62 => 'iacute',   63 => 'icirc',   64 => 'iexcl',   65 => 'igrave',   66 => 'iquest',   67 => 'iuml',   68 => 'laquo',   69 => 'lt',   70 => 'macr',   71 => 'micro',   72 => 'middot',   73 => 'nbsp',   74 => 'not',   75 => 'ntilde',   76 => 'oacute',   77 => 'ocirc',   78 => 'ograve',   79 => 'ordf',   80 => 'ordm',   81 => 'oslash',   82 => 'otilde',   83 => 'ouml',   84 => 'para',   85 => 'plusmn',   86 => 'pound',   87 => 'quot',   88 => 'raquo',   89 => 'reg',   90 => 'sect',   91 => 'shy',   92 => 'sup1',   93 => 'sup2',   94 => 'sup3',   95 => 'szlig',   96 => 'thorn',   97 => 'times',   98 => 'uacute',   99 => 'ucirc',   100 => 'ugrave',   101 => 'uml',   102 => 'uuml',   103 => 'yacute',   104 => 'yen',   105 => 'yuml', )",
                    "doc": "The named references that decode without a semicolon (the HTML standard's legacy list).",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "legacy",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "public",
                    "signature": "text(string $raw): string",
                    "doc": "Text with its character references decoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 21
                },
                {
                    "routes": [],
                    "name": "attribute",
                    "static": true,
                    "visibility": "public",
                    "signature": "attribute(string $raw): string",
                    "doc": "An attribute value with its character references decoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "reference",
                    "static": true,
                    "visibility": "public",
                    "signature": "reference(string $context, string $text, int $at): ?array",
                    "doc": "The character reference at $at in a context (\"data\" or \"attribute\"):\nits text and how many bytes it spans, or null when none decodes there.",
                    "shapes": [
                        "@return array{0: string, 1: int}|null"
                    ],
                    "params": [
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "char",
                    "static": true,
                    "visibility": "public",
                    "signature": "char(int $code): string",
                    "doc": "The UTF-8 text for a code point, U+FFFD for one that cannot be a character, Windows-1252's for the C1 range.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "private",
                    "signature": "decode(string $raw, bool $inAttribute): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "inAttribute",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 102
                },
                {
                    "routes": [],
                    "name": "codePoint",
                    "static": true,
                    "visibility": "private",
                    "signature": "codePoint(int $code): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "legacy",
                    "static": true,
                    "visibility": "private",
                    "signature": "legacy(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string> longest names first"
                    ],
                    "params": [],
                    "line": 128,
                    "end": 139
                }
            ]
        },
        {
            "name": "Minn\\Html\\Edits",
            "short": "Edits",
            "namespace": "Minn\\Html",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Edits.php",
            "lines": 336,
            "doc": "The edits pending on the current token: attribute sets and removals,\nclass additions and removals, and a text replacement, in call order.\nThey answer reads before they are written, and become the source\nreplacements the reader splices in when it moves on.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html",
                "Minn\\Html\\Decoder",
                "Minn\\Html\\Tags"
            ],
            "usedBy": [
                "Minn\\Html\\Tags"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "attributes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "classes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "text",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "validName",
                    "static": true,
                    "visibility": "public",
                    "signature": "validName(string $name): bool",
                    "doc": "Whether an attribute name may be set at all, by the reference's rules.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "setAttribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "setAttribute(string $name, string|true $value): void",
                    "doc": "Records a set; setting class outright forgets the class edits before it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string|true",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "setEscapedAttribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "setEscapedAttribute(string $name, string $escaped): void",
                    "doc": "Records an attribute value that comes already escaped (a URL through esc_url), written as it is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escaped",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "removeAttribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeAttribute(string $name): void",
                    "doc": "Records a removal of an attribute the source has.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "cancelAttribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "cancelAttribute(string $name): void",
                    "doc": "Forgets a pending set that never reached the source: cancelling an addition is not a removal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "attribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "attribute(string $lower): ?array",
                    "doc": "The pending set or removal for a lowercase name, or null when there is none. @return array{name: string, value: string|true|null}|null",
                    "shapes": [
                        "@return array{name: string, value: string|true|null}|null"
                    ],
                    "params": [
                        {
                            "name": "lower",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "addClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "addClass(string $class): void",
                    "doc": "Records a class to add; a later removal of the same class wins.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "removeClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeClass(string $class): void",
                    "doc": "Records a class to remove; a later addition of the same class wins.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "hasClassEdits",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasClassEdits(): bool",
                    "doc": "Whether any class edit is pending.",
                    "shapes": [],
                    "params": [],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "hasTagEdits",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasTagEdits(): bool",
                    "doc": "Whether any attribute or class edit is pending.",
                    "shapes": [],
                    "params": [],
                    "line": 94,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "classesAfter",
                    "static": false,
                    "visibility": "public",
                    "signature": "classesAfter(array $base): array",
                    "doc": "The class list after the pending edits: additions appended once,\nremovals gone.",
                    "shapes": [
                        "@param list<string> $base",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "base",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "closesComment",
                    "static": true,
                    "visibility": "public",
                    "signature": "closesComment(string $text): bool",
                    "doc": "Whether text holds a comment closer, \"-->\" or \"--!>\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "setTextFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "setTextFor(?string $type, ?string $tagName, ?string $commentType, string $text): bool",
                    "doc": "Records a text replacement for a token of a kind that takes one: text\n(escaped), an ordinary HTML comment, or a raw-text element's body\n(script and style bodies get their closers escaped). False when the\nkind takes none, or the text would end the element early.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tagName",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": "the lowercase tag name of an opening tag, null for anything else"
                        },
                        {
                            "name": "commentType",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "takeText",
                    "static": false,
                    "visibility": "public",
                    "signature": "takeText(): ?string",
                    "doc": "The pending text replacement, taken: it is cleared on read.",
                    "shapes": [],
                    "params": [],
                    "line": 175,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "takeReplacements",
                    "static": false,
                    "visibility": "public",
                    "signature": "takeReplacements(array $attributes, int $nameEnd, ?string $baseClassValue): array",
                    "doc": "The source replacements the attribute and class edits amount to, and\nforgets them: a changed attribute is rewritten in place (its duplicates\nremoved), a removed one is cut, a new one is inserted after the tag name\n(several in the order of their text).",
                    "shapes": [
                        "@param list<array{name: string, lower: string, start: int, end: int, value: ?string}> $attributes the tag's own",
                        "@return list<array{int, int, string}> start, end, text"
                    ],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "list<array{name: string, lower: string, start: int, end: int, value: ?string}>",
                            "default": null,
                            "doc": "the tag's own"
                        },
                        {
                            "name": "nameEnd",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "baseClassValue",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": false,
                    "visibility": "public",
                    "signature": "clear(): void",
                    "doc": "Forgets everything pending.",
                    "shapes": [],
                    "params": [],
                    "line": 237,
                    "end": 242
                },
                {
                    "routes": [],
                    "name": "splice",
                    "static": true,
                    "visibility": "public",
                    "signature": "splice(string $html, array $replacements, array $bookmarks, int $tokenStart, int $tokenEnd): array",
                    "doc": "Splices replacements into the source, ascending, and moves the bookmarks\nand the cursor by what the token at [$tokenStart, $tokenEnd] gained or lost.",
                    "shapes": [
                        "@param list<array{int, int, string}> $replacements",
                        "@param array<string, array{0: int, 1: int}> $bookmarks",
                        "@return array{0: string, 1: array<string, array{0: int, 1: int}>, 2: int} the source, the bookmarks, the cursor"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "replacements",
                            "type": "array",
                            "shape": "list<array{int, int, string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bookmarks",
                            "type": "array",
                            "shape": "array<string, array{0: int, 1: int}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tokenStart",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tokenEnd",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 295,
                    "end": 315
                },
                {
                    "routes": [],
                    "name": "classValue",
                    "static": true,
                    "visibility": "public",
                    "signature": "classValue(?array $pending, array $attributes): ?string",
                    "doc": "The class attribute's decoded value before class edits: a pending set, else the source's; null when there is none.",
                    "shapes": [
                        "@param array{value: string|true}|null $pending",
                        "@param list<array{lower: string, value: ?string}> $attributes"
                    ],
                    "params": [
                        {
                            "name": "pending",
                            "type": "?array",
                            "shape": "array{value: string|true}|null",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "list<array{lower: string, value: ?string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 323,
                    "end": 334
                },
                {
                    "routes": [],
                    "name": "classList",
                    "static": true,
                    "visibility": "public",
                    "signature": "classList(?array $pending, array $attributes): array",
                    "doc": "The class names before class edits.",
                    "shapes": [
                        "@param array{value: string|true}|null $pending",
                        "@param list<array{lower: string, value: ?string}> $attributes",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "pending",
                            "type": "?array",
                            "shape": "array{value: string|true}|null",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "list<array{lower: string, value: ?string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 343,
                    "end": 347
                },
                {
                    "routes": [],
                    "name": "rebuiltClassValue",
                    "static": false,
                    "visibility": "private",
                    "signature": "rebuiltClassValue(string $base): string",
                    "doc": "The class attribute after edits: source order and inner whitespace kept, removed classes gone with the space before them, additions appended.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 245,
                    "end": 269
                },
                {
                    "routes": [],
                    "name": "existingName",
                    "static": true,
                    "visibility": "private",
                    "signature": "existingName(array $attributes, string $lower): ?string",
                    "doc": "",
                    "shapes": [
                        "@param list<array{name: string, lower: string}> $attributes"
                    ],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "list<array{name: string, lower: string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lower",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 272,
                    "end": 280
                },
                {
                    "routes": [],
                    "name": "escape",
                    "static": true,
                    "visibility": "private",
                    "signature": "escape(string $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 282,
                    "end": 285
                }
            ]
        },
        {
            "name": "Minn\\Html\\Escaped",
            "short": "Escaped",
            "namespace": "Minn\\Html",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Html/Escaped.php",
            "lines": 6,
            "doc": "An attribute value that comes already escaped (a URL through esc_url), written as it is.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [
                "Minn\\Html\\Tags"
            ],
            "constructor": {
                "signature": "__construct(string $value)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "value",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 10,
                "end": 12
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "value",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Html\\Scanner",
            "short": "Scanner",
            "namespace": "Minn\\Html",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Scanner.php",
            "lines": 291,
            "doc": "Reads one token's shape out of raw HTML at an offset: a tag with its\nname and attributes, a comment of one of the reference's kinds, a\ndoctype, or a processing instruction. Pure and stateless; null means the\ninput ends before the token does, which is where a streaming reader pauses.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html",
                "Minn\\Html\\Decoder",
                "Minn\\Html\\Tags"
            ],
            "usedBy": [
                "Minn\\Html\\Tags",
                "Minn\\Html\\Tree\\Builder"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "tag",
                    "static": true,
                    "visibility": "public",
                    "signature": "tag(string $html, int $at, int $nameStart): ?array",
                    "doc": "A tag starting at $at, its name from $nameStart (one byte in for an\nopener, two for a closer): the name, where it ends, the end offset,\nthe attributes with their source offsets, and the self-closing flag.",
                    "shapes": [
                        "@return array{name: string, nameEnd: int, end: int, attributes: list<array{name: string, lower: string, start: int, end: int, value: ?string, quoted: bool}>, selfClosing: bool}|null"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "nameStart",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "rawText",
                    "static": true,
                    "visibility": "public",
                    "signature": "rawText(string $html, string $name, int $from): ?array",
                    "doc": "A raw-text element's body (script, style, textarea, ...): from $from to\nits closing tag, or null when the closer never comes.",
                    "shapes": [
                        "@return array{textStart: int, textLength: int, end: int}|null"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "markupDeclaration",
                    "static": true,
                    "visibility": "public",
                    "signature": "markupDeclaration(string $html, int $at): ?array",
                    "doc": "What \"<!\" opens at $at: an HTML comment (abruptly closed or not), a\ndoctype, a CDATA lookalike, or a bogus comment.",
                    "shapes": [
                        "@return array{kind: string, start: int, end: int, textStart: int, textLength: int, commentType?: string, fullStart?: int, fullLength?: int}|null"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "question",
                    "static": true,
                    "visibility": "public",
                    "signature": "question(string $html, int $at): ?array",
                    "doc": "What \"<?\" opens at $at: a processing instruction when an ASCII\nalphanumeric target (not \"xml\") is followed by space, \"?\" or \">\"\n(its text after the space, up to \"?>\" or \">\"); a PI lookalike comment\nfor another XML name closed by \"?>\"; otherwise an invalid comment.",
                    "shapes": [
                        "@return array{kind: string, start: int, end: int, textStart: int, textLength: int, target?: string, commentType?: string, fullStart?: int, fullLength?: int}|null"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 164
                },
                {
                    "routes": [],
                    "name": "attributeValue",
                    "static": true,
                    "visibility": "public",
                    "signature": "attributeValue(array $attributes, string $lower): string|true|null",
                    "doc": "A source attribute's decoded value (true when it has none), or null when the tag lacks it.",
                    "shapes": [
                        "@param list<array{lower: string, value: ?string}> $attributes"
                    ],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "list<array{lower: string, value: ?string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lower",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "opensMarkup",
                    "static": true,
                    "visibility": "public",
                    "signature": "opensMarkup(string $html, int $at): bool",
                    "doc": "Whether the \"<\" at $at opens markup: a tag, a closer, \"<!\" or \"<?\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "textEnd",
                    "static": true,
                    "visibility": "public",
                    "signature": "textEnd(string $html, int $at): int",
                    "doc": "Where text starting at $at ends: at the next \"<\" that opens markup, before a \"<\" ending the input, or at the end.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "cdata",
                    "static": true,
                    "visibility": "public",
                    "signature": "cdata(string $html, int $at): ?array",
                    "doc": "A CDATA section in foreign content, \"<![CDATA[\" to \"]]>\"; null when it does not close.",
                    "shapes": [
                        "@return array{kind: string, start: int, end: int, textStart: int, textLength: int}|null"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 211
                },
                {
                    "routes": [],
                    "name": "doctype",
                    "static": true,
                    "visibility": "public",
                    "signature": "doctype(string $body): array",
                    "doc": "A doctype's body split into its name and public and system identifiers.",
                    "shapes": [
                        "@return array{name: ?string, public: ?string, system: ?string}"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 236
                },
                {
                    "routes": [],
                    "name": "isSpace",
                    "static": true,
                    "visibility": "public",
                    "signature": "isSpace(string $c): bool",
                    "doc": "Whether a byte is HTML whitespace.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "c",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 239,
                    "end": 242
                },
                {
                    "routes": [],
                    "name": "attribute",
                    "static": true,
                    "visibility": "private",
                    "signature": "attribute(string $html, int $i): ?array",
                    "doc": "One attribute from $i: its name (a leading \"=\" is part of it), then an\noptional quoted or bare value. Null when the input ends first.",
                    "shapes": [
                        "@return array{int, string, int, int, ?string, bool}|null offset after, name, start, end, value, quoted"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "i",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 250,
                    "end": 296
                },
                {
                    "routes": [],
                    "name": "comment",
                    "static": true,
                    "visibility": "private",
                    "signature": "comment(int $start, int $end, int $textStart, int $textLength, string $type, int $fullStart, int $fullLength): array",
                    "doc": "",
                    "shapes": [
                        "@return array{kind: string, start: int, end: int, textStart: int, textLength: int, commentType: string, fullStart: int, fullLength: int}"
                    ],
                    "params": [
                        {
                            "name": "start",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "end",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "textStart",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "textLength",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fullStart",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fullLength",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 299,
                    "end": 302
                }
            ]
        },
        {
            "name": "Minn\\Html\\TagQuery",
            "short": "TagQuery",
            "namespace": "Minn\\Html",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Html/TagQuery.php",
            "lines": 37,
            "doc": "A tag processor's next_tag() query: a tag name (any case), a class, the\nnth match to stop at, and whether closers count.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [
                "Minn\\Html\\Tags"
            ],
            "constructor": {
                "signature": "__construct(?string $tagName, ?string $className, int $offset, string $closers)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "tagName",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "className",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "offset",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "closers",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 13,
                "end": 19
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "tagName",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "className",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "offset",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "closers",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "from",
                    "static": true,
                    "visibility": "public",
                    "signature": "from(array $query): self",
                    "doc": "The query read from the array a caller passes.",
                    "shapes": [
                        "@param array{tag_name?: ?string, class_name?: ?string, match_offset?: int, tag_closers?: string} $query"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array{tag_name?: ?string, class_name?: ?string, match_offset?: int, tag_closers?: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "matches",
                    "static": false,
                    "visibility": "public",
                    "signature": "matches(string $name, int $closer, callable $hasClass): bool",
                    "doc": "Whether a tag (by name, closer or not, and a class test) matches, before the offset is counted.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "closer",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hasClass",
                            "type": "callable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 46
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tags",
            "short": "Tags",
            "namespace": "Minn\\Html",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tags.php",
            "lines": 589,
            "doc": "A streaming HTML tokenizer with in-place edits: every token in document order, attributes decoded,\nedits applied to the source without reserialising the rest, bookmarks to seek back to (probe html-tag-processor).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html",
                "Minn\\Html\\Decoder",
                "Minn\\Html\\Edits",
                "Minn\\Html\\Escaped",
                "Minn\\Html\\Scanner",
                "Minn\\Html\\TagQuery"
            ],
            "usedBy": [
                "Minn\\Html\\Edits",
                "Minn\\Html\\Scanner",
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Rest\\UrlDetails"
            ],
            "constructor": {
                "signature": "__construct(string $html)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "html",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 64,
                "end": 68
            },
            "cases": [],
            "constants": [
                {
                    "name": "TAG",
                    "value": "'#tag'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "TEXT",
                    "value": "'#text'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COMMENT",
                    "value": "'#comment'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "DOCTYPE",
                    "value": "'#doctype'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "PI",
                    "value": "'#processing-instruction'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "FUNKY",
                    "value": "'#funky-comment'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "CDATA",
                    "value": "'#cdata-section'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "PRESUMPTUOUS",
                    "value": "'#presumptuous-tag'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COMMENT_HTML",
                    "value": "'COMMENT_AS_HTML_COMMENT'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COMMENT_ABRUPT",
                    "value": "'COMMENT_AS_ABRUPTLY_CLOSED_COMMENT'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COMMENT_INVALID",
                    "value": "'COMMENT_AS_INVALID_HTML'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COMMENT_CDATA",
                    "value": "'COMMENT_AS_CDATA_LOOKALIKE'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COMMENT_PI",
                    "value": "'COMMENT_AS_PI_NODE_LOOKALIKE'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "RAW_TEXT",
                    "value": "array (   0 => 'script',   1 => 'style',   2 => 'textarea',   3 => 'title',   4 => 'xmp',   5 => 'iframe',   6 => 'noembed',   7 => 'noframes', )",
                    "doc": "Elements whose body is raw text up to the closer.",
                    "visibility": "public"
                },
                {
                    "name": "RAW_DECODED",
                    "value": "array (   0 => 'textarea',   1 => 'title', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "MAX_BOOKMARKS",
                    "value": "10",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "html",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "cursor",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "ended",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "paused",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "type",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "name",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "start",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "end",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "nameEnd",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "closer",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "selfClosing",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "attributes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "textStart",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "textLength",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "commentType",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "commentTarget",
                    "type": "?string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "namespace",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "tagBodies",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "maxBookmarks",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "afterPre",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "Whether a text token here drops one leading line break (it follows a PRE or LISTING opener).",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "textAfterPre",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "fullTextStart",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "fullTextLength",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "edits",
                    "type": "Minn\\Html\\Edits",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "bookmarks",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "nextToken",
                    "static": false,
                    "visibility": "public",
                    "signature": "nextToken(): bool",
                    "doc": "Advances to the next token; false at the end or at an incomplete one.",
                    "shapes": [],
                    "params": [],
                    "line": 71,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "nextTag",
                    "static": false,
                    "visibility": "public",
                    "signature": "nextTag(array $query): bool",
                    "doc": "Advances to the next tag matching the query; false when none. @param array{tag_name?: ?string, class_name?: ?string, match_offset?: int, tag_closers?: string} $query",
                    "shapes": [
                        "@param array{tag_name?: ?string, class_name?: ?string, match_offset?: int, tag_closers?: string} $query"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array{tag_name?: ?string, class_name?: ?string, match_offset?: int, tag_closers?: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 221
                },
                {
                    "routes": [],
                    "name": "pausedAtIncompleteToken",
                    "static": false,
                    "visibility": "public",
                    "signature": "pausedAtIncompleteToken(): bool",
                    "doc": "Whether the scan stopped inside an unfinished token.",
                    "shapes": [],
                    "params": [],
                    "line": 224,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "tokenType",
                    "static": false,
                    "visibility": "public",
                    "signature": "tokenType(): ?string",
                    "doc": "The current token's kind.",
                    "shapes": [],
                    "params": [],
                    "line": 230,
                    "end": 233
                },
                {
                    "routes": [],
                    "name": "tokenName",
                    "static": false,
                    "visibility": "public",
                    "signature": "tokenName(): ?string",
                    "doc": "The current token's name.",
                    "shapes": [],
                    "params": [],
                    "line": 236,
                    "end": 244
                },
                {
                    "routes": [],
                    "name": "tag",
                    "static": false,
                    "visibility": "public",
                    "signature": "tag(): ?string",
                    "doc": "The current tag name, upper-cased; a processing instruction's target, or a PI lookalike's, as written.",
                    "shapes": [],
                    "params": [],
                    "line": 247,
                    "end": 254
                },
                {
                    "routes": [],
                    "name": "isCloser",
                    "static": false,
                    "visibility": "public",
                    "signature": "isCloser(): bool",
                    "doc": "Whether the current tag is a closer.",
                    "shapes": [],
                    "params": [],
                    "line": 257,
                    "end": 260
                },
                {
                    "routes": [],
                    "name": "selfClosing",
                    "static": false,
                    "visibility": "public",
                    "signature": "selfClosing(): bool",
                    "doc": "Whether the current tag has the self-closing flag.",
                    "shapes": [],
                    "params": [],
                    "line": 263,
                    "end": 266
                },
                {
                    "routes": [],
                    "name": "commentType",
                    "static": false,
                    "visibility": "public",
                    "signature": "commentType(): ?string",
                    "doc": "The current comment's kind.",
                    "shapes": [],
                    "params": [],
                    "line": 269,
                    "end": 272
                },
                {
                    "routes": [],
                    "name": "fullCommentText",
                    "static": false,
                    "visibility": "public",
                    "signature": "fullCommentText(): ?string",
                    "doc": "The current comment's whole text (a funky comment's is its text).",
                    "shapes": [],
                    "params": [],
                    "line": 275,
                    "end": 282
                },
                {
                    "routes": [],
                    "name": "modifiableText",
                    "static": false,
                    "visibility": "public",
                    "signature": "modifiableText(): string",
                    "doc": "The current token's text as a reader sees it.",
                    "shapes": [],
                    "params": [],
                    "line": 285,
                    "end": 300
                },
                {
                    "routes": [],
                    "name": "doctype",
                    "static": false,
                    "visibility": "public",
                    "signature": "doctype(): ?array",
                    "doc": "Doctype pieces, or null when the token is not a doctype. @return array{name: ?string, public: ?string, system: ?string}|null",
                    "shapes": [
                        "@return array{name: ?string, public: ?string, system: ?string}|null"
                    ],
                    "params": [],
                    "line": 303,
                    "end": 309
                },
                {
                    "routes": [],
                    "name": "attribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "attribute(string $name): string|true|null",
                    "doc": "The decoded value, true for a bare attribute, null when absent; a pending edit answers first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 312,
                    "end": 324
                },
                {
                    "routes": [],
                    "name": "attributeNames",
                    "static": false,
                    "visibility": "public",
                    "signature": "attributeNames(string $prefix): ?array",
                    "doc": "The current tag's attribute names with a prefix, lower-cased, in source order; null off a tag. @return list<string>|null",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 327,
                    "end": 340
                },
                {
                    "routes": [],
                    "name": "classes",
                    "static": false,
                    "visibility": "public",
                    "signature": "classes(): array",
                    "doc": "The current tag's classes. @return list<string> distinct class names after pending edits",
                    "shapes": [
                        "@return list<string> distinct class names after pending edits"
                    ],
                    "params": [],
                    "line": 343,
                    "end": 349
                },
                {
                    "routes": [],
                    "name": "hasClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasClass(string $class): bool",
                    "doc": "Whether the current tag has a class.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 352,
                    "end": 355
                },
                {
                    "routes": [],
                    "name": "setAttribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "setAttribute(string $name, Minn\\Html\\Escaped|string|int|float|bool|null $value): bool",
                    "doc": "Sets an attribute on the current tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "Minn\\Html\\Escaped|string|int|float|bool|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 369,
                    "end": 382
                },
                {
                    "routes": [],
                    "name": "removeAttribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeAttribute(string $name): bool",
                    "doc": "Removes an attribute from the current tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 385,
                    "end": 397
                },
                {
                    "routes": [],
                    "name": "addClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "addClass(string $class): bool",
                    "doc": "Adds a class to the current tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 400,
                    "end": 407
                },
                {
                    "routes": [],
                    "name": "removeClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeClass(string $class): bool",
                    "doc": "Removes a class from the current tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 410,
                    "end": 417
                },
                {
                    "routes": [],
                    "name": "setModifiableText",
                    "static": false,
                    "visibility": "public",
                    "signature": "setModifiableText(string $text): bool",
                    "doc": "Replaces the current token's text, when its kind allows it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 420,
                    "end": 423
                },
                {
                    "routes": [],
                    "name": "setBookmark",
                    "static": false,
                    "visibility": "public",
                    "signature": "setBookmark(string $name): bool",
                    "doc": "Names the current token's position.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 426,
                    "end": 436
                },
                {
                    "routes": [],
                    "name": "releaseBookmark",
                    "static": false,
                    "visibility": "public",
                    "signature": "releaseBookmark(string $name): bool",
                    "doc": "Forgets a bookmark.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 439,
                    "end": 446
                },
                {
                    "routes": [],
                    "name": "hasBookmark",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasBookmark(string $name): bool",
                    "doc": "Whether a bookmark exists.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 449,
                    "end": 452
                },
                {
                    "routes": [],
                    "name": "seek",
                    "static": false,
                    "visibility": "public",
                    "signature": "seek(string $name): bool",
                    "doc": "Moves to a bookmark.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 455,
                    "end": 465
                },
                {
                    "routes": [],
                    "name": "parseAs",
                    "static": false,
                    "visibility": "public",
                    "signature": "parseAs(string $namespace, string $tagBodies = 'html'): void",
                    "doc": "What follows as a namespace's content: outside HTML \"<![CDATA[\" opens a section; tag bodies read as HTML (\"html\", raw text elements whole) unless foreign (\"foreign\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tagBodies",
                            "type": "string",
                            "shape": "",
                            "default": "'html'",
                            "doc": ""
                        }
                    ],
                    "line": 468,
                    "end": 472
                },
                {
                    "routes": [],
                    "name": "allowBookmarks",
                    "static": false,
                    "visibility": "public",
                    "signature": "allowBookmarks(int $max): void",
                    "doc": "Raises how many bookmarks may be held at once.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "max",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 475,
                    "end": 478
                },
                {
                    "routes": [],
                    "name": "rewind",
                    "static": false,
                    "visibility": "public",
                    "signature": "rewind(): void",
                    "doc": "Back to the start of the document, with every update written in and the bookmarks kept.",
                    "shapes": [],
                    "params": [],
                    "line": 481,
                    "end": 491
                },
                {
                    "routes": [],
                    "name": "splitText",
                    "static": false,
                    "visibility": "public",
                    "signature": "splitText(int $length): void",
                    "doc": "The current text token cut to its first bytes; the rest is read next.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 494,
                    "end": 497
                },
                {
                    "routes": [],
                    "name": "tokenSpan",
                    "static": false,
                    "visibility": "public",
                    "signature": "tokenSpan(): array",
                    "doc": "Where the current token sits in the document: [start, end].",
                    "shapes": [],
                    "params": [],
                    "line": 500,
                    "end": 503
                },
                {
                    "routes": [],
                    "name": "textSpan",
                    "static": false,
                    "visibility": "public",
                    "signature": "textSpan(): array",
                    "doc": "Where the current text token's text sits: [start, length].",
                    "shapes": [],
                    "params": [],
                    "line": 506,
                    "end": 509
                },
                {
                    "routes": [],
                    "name": "source",
                    "static": false,
                    "visibility": "public",
                    "signature": "source(int $start, int $length): string",
                    "doc": "The source between two offsets, updates written in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "start",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 512,
                    "end": 515
                },
                {
                    "routes": [],
                    "name": "bookmarkSpan",
                    "static": false,
                    "visibility": "public",
                    "signature": "bookmarkSpan(string $name): ?array",
                    "doc": "Where a bookmark sits: [start, end], or null when there is none of that name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 518,
                    "end": 521
                },
                {
                    "routes": [],
                    "name": "replaceAfter",
                    "static": false,
                    "visibility": "public",
                    "signature": "replaceAfter(int $start, int $end, string $text): void",
                    "doc": "Replaces a span at or after the current token's end, updates written in first: the new text is read next, and bookmarks past the span move with it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "start",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "end",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 524,
                    "end": 532
                },
                {
                    "routes": [],
                    "name": "html",
                    "static": false,
                    "visibility": "public",
                    "signature": "html(): string",
                    "doc": "The document with every update written in.",
                    "shapes": [],
                    "params": [],
                    "line": 535,
                    "end": 539
                },
                {
                    "routes": [],
                    "name": "setToken",
                    "static": false,
                    "visibility": "private",
                    "signature": "setToken(string $type, string $name, int $start, int $end, int $textStart, int $textLength): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "start",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "end",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "textStart",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "textLength",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 131,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "resetToken",
                    "static": false,
                    "visibility": "private",
                    "signature": "resetToken(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 141,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "takeTag",
                    "static": false,
                    "visibility": "private",
                    "signature": "takeTag(int $at, bool $closer): bool",
                    "doc": "A tag the scanner read at $at becomes the current token; a raw-text element carries its body to its closer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "closer",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "take",
                    "static": false,
                    "visibility": "private",
                    "signature": "take(?array $found): bool",
                    "doc": "A comment, doctype, or processing instruction the scanner read becomes the current token; null pauses.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "found",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 185,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "baseClassList",
                    "static": false,
                    "visibility": "private",
                    "signature": "baseClassList(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 358,
                    "end": 361
                },
                {
                    "routes": [],
                    "name": "baseClassValue",
                    "static": false,
                    "visibility": "private",
                    "signature": "baseClassValue(): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 363,
                    "end": 366
                },
                {
                    "routes": [],
                    "name": "flush",
                    "static": false,
                    "visibility": "private",
                    "signature": "flush(): void",
                    "doc": "Writes every pending update into the source, keeping bookmarks and the current token aligned.",
                    "shapes": [],
                    "params": [],
                    "line": 542,
                    "end": 560
                },
                {
                    "routes": [],
                    "name": "applyReplacements",
                    "static": false,
                    "visibility": "private",
                    "signature": "applyReplacements(array $replacements): void",
                    "doc": "",
                    "shapes": [
                        "@param list<array{int, int, string}> $replacements"
                    ],
                    "params": [
                        {
                            "name": "replacements",
                            "type": "array",
                            "shape": "list<array{int, int, string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 563,
                    "end": 566
                },
                {
                    "routes": [],
                    "name": "rescanCurrent",
                    "static": false,
                    "visibility": "private",
                    "signature": "rescanCurrent(): void",
                    "doc": "Re-reads the current token so attribute offsets match the new source.",
                    "shapes": [],
                    "params": [],
                    "line": 569,
                    "end": 583
                },
                {
                    "routes": [],
                    "name": "rescan",
                    "static": false,
                    "visibility": "private",
                    "signature": "rescan(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 585,
                    "end": 597
                }
            ]
        },
        {
            "name": "Minn\\Html\\TokenMap",
            "short": "TokenMap",
            "namespace": "Minn\\Html",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/TokenMap.php",
            "lines": 87,
            "doc": "A map from words to replacements that reads the longest word at a place\nin a text (as character reference names are read): words shorter than\nthe key length stand alone, the others are grouped by their first bytes,\nlongest first.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(array $mappings, int $keyLength)",
                "doc": "",
                "shapes": [
                    "@param array<string, string> $mappings"
                ],
                "params": [
                    {
                        "name": "mappings",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "keyLength",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 36
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "small",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "groups",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "keyLength",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "keyLength",
                    "static": false,
                    "visibility": "public",
                    "signature": "keyLength(): int",
                    "doc": "How many leading bytes group the words.",
                    "shapes": [],
                    "params": [],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "contains",
                    "static": false,
                    "visibility": "public",
                    "signature": "contains(string $word, string $caseSensitivity): bool",
                    "doc": "Whether the word is in the map (\"case-sensitive\" or \"ascii-case-insensitive\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "word",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "caseSensitivity",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": false,
                    "visibility": "public",
                    "signature": "read(string $text, int $offset, string $caseSensitivity): ?array",
                    "doc": "The replacement for the longest word at $offset, and the word's length; null when none starts there.",
                    "shapes": [
                        "@return array{0: string, 1: int}|null"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "caseSensitivity",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "toArray(): array",
                    "doc": "Every word and its replacement: the short words first, then each group longest first.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 86,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "same",
                    "static": true,
                    "visibility": "private",
                    "signature": "same(string $a, string $b, string $caseSensitivity): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "a",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "b",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "caseSensitivity",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 98
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\BodyRules",
            "short": "BodyRules",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/BodyRules.php",
            "lines": 418,
            "doc": "The \"in body\" insertion mode, with select handled in body as the current\nspec does (no \"in select\" mode). The adoption agency runs its simple\ncases (the formatting element is closed with nothing special inside it);\nthe reference stops on the others, and on an end tag for a formatting\nelement that is not active.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\HeadRules",
                "Minn\\Html\\Tree\\Node",
                "Minn\\Html\\Tree\\Token"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\HeadRules",
                "Minn\\Html\\Tree\\TableRules"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FORMATTING",
                    "value": "array (   0 => 'A',   1 => 'B',   2 => 'BIG',   3 => 'CODE',   4 => 'EM',   5 => 'FONT',   6 => 'I',   7 => 'NOBR',   8 => 'S',   9 => 'SMALL',   10 => 'STRIKE',   11 => 'STRONG',   12 => 'TT',   13 => 'U', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SPECIAL",
                    "value": "array (   0 => 'ADDRESS',   1 => 'APPLET',   2 => 'AREA',   3 => 'ARTICLE',   4 => 'ASIDE',   5 => 'BASE',   6 => 'BASEFONT',   7 => 'BGSOUND',   8 => 'BLOCKQUOTE',   9 => 'BODY',   10 => 'BR',   11 => 'BUTTON',   12 => 'CAPTION',   13 => 'CENTER',   14 => 'COL',   15 => 'COLGROUP',   16 => 'DD',   17 => 'DETAILS',   18 => 'DIR',   19 => 'DIV',   20 => 'DL',   21 => 'DT',   22 => 'EMBED',   23 => 'FIELDSET',   24 => 'FIGCAPTION',   25 => 'FIGURE',   26 => 'FOOTER',   27 => 'FORM',   28 => 'FRAME',   29 => 'FRAMESET',   30 => 'H1',   31 => 'H2',   32 => 'H3',   33 => 'H4',   34 => 'H5',   35 => 'H6',   36 => 'HEAD',   37 => 'HEADER',   38 => 'HGROUP',   39 => 'HR',   40 => 'HTML',   41 => 'IFRAME',   42 => 'IMG',   43 => 'INPUT',   44 => 'KEYGEN',   45 => 'LI',   46 => 'LINK',   47 => 'LISTING',   48 => 'MAIN',   49 => 'MARQUEE',   50 => 'MENU',   51 => 'META',   52 => 'NAV',   53 => 'NOEMBED',   54 => 'NOFRAMES',   55 => 'NOSCRIPT',   56 => 'OBJECT',   57 => 'OL',   58 => 'P',   59 => 'PARAM',   60 => 'PLAINTEXT',   61 => 'PRE',   62 => 'SCRIPT',   63 => 'SEARCH',   64 => 'SECTION',   65 => 'SELECT',   66 => 'SOURCE',   67 => 'STYLE',   68 => 'SUMMARY',   69 => 'TABLE',   70 => 'TBODY',   71 => 'TD',   72 => 'TEMPLATE',   73 => 'TEXTAREA',   74 => 'TFOOT',   75 => 'TH',   76 => 'THEAD',   77 => 'TITLE',   78 => 'TR',   79 => 'TRACK',   80 => 'UL',   81 => 'WBR',   82 => 'XMP', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "BLOCKS",
                    "value": "array (   0 => 'ADDRESS',   1 => 'ARTICLE',   2 => 'ASIDE',   3 => 'BLOCKQUOTE',   4 => 'CENTER',   5 => 'DETAILS',   6 => 'DIALOG',   7 => 'DIR',   8 => 'DIV',   9 => 'DL',   10 => 'FIELDSET',   11 => 'FIGCAPTION',   12 => 'FIGURE',   13 => 'FOOTER',   14 => 'HEADER',   15 => 'HGROUP',   16 => 'MAIN',   17 => 'MENU',   18 => 'NAV',   19 => 'OL',   20 => 'P',   21 => 'SEARCH',   22 => 'SECTION',   23 => 'SUMMARY',   24 => 'UL', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BLOCK_ENDS",
                    "value": "array (   0 => 'ADDRESS',   1 => 'ARTICLE',   2 => 'ASIDE',   3 => 'BLOCKQUOTE',   4 => 'BUTTON',   5 => 'CENTER',   6 => 'DETAILS',   7 => 'DIALOG',   8 => 'DIR',   9 => 'DIV',   10 => 'DL',   11 => 'FIELDSET',   12 => 'FIGCAPTION',   13 => 'FIGURE',   14 => 'FOOTER',   15 => 'HEADER',   16 => 'HGROUP',   17 => 'LISTING',   18 => 'MAIN',   19 => 'MENU',   20 => 'NAV',   21 => 'OL',   22 => 'PRE',   23 => 'SEARCH',   24 => 'SECTION',   25 => 'SUMMARY',   26 => 'UL', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "HEADINGS",
                    "value": "array (   0 => 'H1',   1 => 'H2',   2 => 'H3',   3 => 'H4',   4 => 'H5',   5 => 'H6', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "process",
                    "static": true,
                    "visibility": "public",
                    "signature": "process(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "Processes one token in the \"in body\" insertion mode.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "isSpecial",
                    "static": true,
                    "visibility": "public",
                    "signature": "isSpecial(Minn\\Html\\Tree\\Node $node): bool",
                    "doc": "Whether the node is in the spec's \"special\" category.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 425,
                    "end": 430
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "private",
                    "signature": "text(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "startTag",
                    "static": true,
                    "visibility": "private",
                    "signature": "startTag(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "endTag",
                    "static": true,
                    "visibility": "private",
                    "signature": "endTag(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "outerStart",
                    "static": true,
                    "visibility": "private",
                    "signature": "outerStart(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "outerEnd",
                    "static": true,
                    "visibility": "private",
                    "signature": "outerEnd(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "block",
                    "static": true,
                    "visibility": "private",
                    "signature": "block(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "heading",
                    "static": true,
                    "visibility": "private",
                    "signature": "heading(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "pre",
                    "static": true,
                    "visibility": "private",
                    "signature": "pre(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "form",
                    "static": true,
                    "visibility": "private",
                    "signature": "form(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "listItem",
                    "static": true,
                    "visibility": "private",
                    "signature": "listItem(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "button",
                    "static": true,
                    "visibility": "private",
                    "signature": "button(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 174,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "anchor",
                    "static": true,
                    "visibility": "private",
                    "signature": "anchor(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 185,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "nobr",
                    "static": true,
                    "visibility": "private",
                    "signature": "nobr(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "formatting",
                    "static": true,
                    "visibility": "private",
                    "signature": "formatting(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 208,
                    "end": 212
                },
                {
                    "routes": [],
                    "name": "withMarker",
                    "static": true,
                    "visibility": "private",
                    "signature": "withMarker(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 214,
                    "end": 220
                },
                {
                    "routes": [],
                    "name": "table",
                    "static": true,
                    "visibility": "private",
                    "signature": "table(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 222,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "voidElement",
                    "static": true,
                    "visibility": "private",
                    "signature": "voidElement(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "hr",
                    "static": true,
                    "visibility": "private",
                    "signature": "hr(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 249,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "rawText",
                    "static": true,
                    "visibility": "private",
                    "signature": "rawText(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 259,
                    "end": 267
                },
                {
                    "routes": [],
                    "name": "select",
                    "static": true,
                    "visibility": "private",
                    "signature": "select(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 269,
                    "end": 278
                },
                {
                    "routes": [],
                    "name": "option",
                    "static": true,
                    "visibility": "private",
                    "signature": "option(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 280,
                    "end": 289
                },
                {
                    "routes": [],
                    "name": "ruby",
                    "static": true,
                    "visibility": "private",
                    "signature": "ruby(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 291,
                    "end": 297
                },
                {
                    "routes": [],
                    "name": "foreign",
                    "static": true,
                    "visibility": "private",
                    "signature": "foreign(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 299,
                    "end": 308
                },
                {
                    "routes": [],
                    "name": "ordinary",
                    "static": true,
                    "visibility": "private",
                    "signature": "ordinary(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 310,
                    "end": 314
                },
                {
                    "routes": [],
                    "name": "closeBlock",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeBlock(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 316,
                    "end": 323
                },
                {
                    "routes": [],
                    "name": "closeForm",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeForm(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 325,
                    "end": 341
                },
                {
                    "routes": [],
                    "name": "closeParagraph",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeParagraph(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 343,
                    "end": 349
                },
                {
                    "routes": [],
                    "name": "closeListItem",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeListItem(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 351,
                    "end": 358
                },
                {
                    "routes": [],
                    "name": "closeHeading",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeHeading(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 360,
                    "end": 367
                },
                {
                    "routes": [],
                    "name": "closeWithMarker",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeWithMarker(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 369,
                    "end": 377
                },
                {
                    "routes": [],
                    "name": "adoptionAgency",
                    "static": true,
                    "visibility": "private",
                    "signature": "adoptionAgency(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "The adoption agency algorithm in the cases the reference runs: the formatting element closes with nothing special opened inside it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 380,
                    "end": 406
                },
                {
                    "routes": [],
                    "name": "anyOtherEnd",
                    "static": true,
                    "visibility": "private",
                    "signature": "anyOtherEnd(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 408,
                    "end": 422
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Builder",
            "short": "Builder",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/Builder.php",
            "lines": 551,
            "doc": "The HTML tree construction algorithm over the engine's tokenizer, as the\nreference's HTML processor runs it: tokens go through the insertion\nmodes (HeadRules, BodyRules, TableRules) or the foreign content rules,\nand every node opened or closed becomes an Event with its breadcrumbs.\nText is read one kind at a time (NUL bytes, white space, the rest). At\nthe end of the input every open element closes; nothing implied is\nadded. Where the reference does not build a tree (Unsupported), the walk\nstops with that error.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Decoder",
                "Minn\\Html\\Scanner",
                "Minn\\Html\\Tags",
                "Minn\\Html\\Tree\\BodyRules",
                "Minn\\Html\\Tree\\Event",
                "Minn\\Html\\Tree\\ForeignRules",
                "Minn\\Html\\Tree\\Formatting",
                "Minn\\Html\\Tree\\HeadRules",
                "Minn\\Html\\Tree\\Node",
                "Minn\\Html\\Tree\\OpenElements",
                "Minn\\Html\\Tree\\TableRules",
                "Minn\\Html\\Tree\\Token",
                "Minn\\Html\\Tree\\Unsupported"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\BodyRules",
                "Minn\\Html\\Tree\\ForeignRules",
                "Minn\\Html\\Tree\\HeadRules",
                "Minn\\Html\\Tree\\TableRules"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Html\\Tags $tags, string $kind)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "tags",
                        "type": "Minn\\Html\\Tags",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "kind",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 46,
                "end": 50
            },
            "cases": [],
            "constants": [
                {
                    "name": "FRAGMENT",
                    "value": "'fragment'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "DOCUMENT",
                    "value": "'document'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "stack",
                    "type": "Minn\\Html\\Tree\\OpenElements",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "formatting",
                    "type": "Minn\\Html\\Tree\\Formatting",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "mode",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "templateModes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "headPointer",
                    "type": "?Minn\\Html\\Tree\\Node",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "formPointer",
                    "type": "?Minn\\Html\\Tree\\Node",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "framesetOk",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "compat",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "queue",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "pending",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "token",
                    "type": "?Minn\\Html\\Tree\\Token",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "done",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "skipNext",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "skipping",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "error",
                    "type": "?Minn\\Html\\Tree\\Unsupported",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "context",
                    "type": "Minn\\Html\\Tree\\Node",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "tags",
                    "type": "Minn\\Html\\Tags",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "kind",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "reset",
                    "static": false,
                    "visibility": "public",
                    "signature": "reset(): void",
                    "doc": "Back to the state before the first token.",
                    "shapes": [],
                    "params": [],
                    "line": 53,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "next",
                    "static": false,
                    "visibility": "public",
                    "signature": "next(): ?Minn\\Html\\Tree\\Event",
                    "doc": "The next opened or closed node, or null at the end, at an incomplete token, or once unsupported markup stopped the walk.",
                    "shapes": [],
                    "params": [],
                    "line": 76,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "halt",
                    "static": false,
                    "visibility": "public",
                    "signature": "halt(): void",
                    "doc": "Stops the walk for good (a failed seek leaves the processor like this).",
                    "shapes": [],
                    "params": [],
                    "line": 85,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "error",
                    "static": false,
                    "visibility": "public",
                    "signature": "error(): ?Minn\\Html\\Tree\\Unsupported",
                    "doc": "Why the walk stopped early, if it did.",
                    "shapes": [],
                    "params": [],
                    "line": 92,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "breadcrumbs",
                    "static": false,
                    "visibility": "public",
                    "signature": "breadcrumbs(): array",
                    "doc": "The breadcrumbs of the open elements now.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 102,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "token",
                    "static": false,
                    "visibility": "public",
                    "signature": "token(): Minn\\Html\\Tree\\Token",
                    "doc": "The token being processed.",
                    "shapes": [],
                    "params": [],
                    "line": 109,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "stack",
                    "static": false,
                    "visibility": "public",
                    "signature": "stack(): Minn\\Html\\Tree\\OpenElements",
                    "doc": "The stack of open elements.",
                    "shapes": [],
                    "params": [],
                    "line": 115,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "formatting",
                    "static": false,
                    "visibility": "public",
                    "signature": "formatting(): Minn\\Html\\Tree\\Formatting",
                    "doc": "The list of active formatting elements.",
                    "shapes": [],
                    "params": [],
                    "line": 121,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "isFragment",
                    "static": false,
                    "visibility": "public",
                    "signature": "isFragment(): bool",
                    "doc": "Whether this builder parses a fragment (in a BODY context) rather than a document.",
                    "shapes": [],
                    "params": [],
                    "line": 127,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "mode",
                    "static": false,
                    "visibility": "public",
                    "signature": "mode(): string",
                    "doc": "The insertion mode.",
                    "shapes": [],
                    "params": [],
                    "line": 133,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "switchTo",
                    "static": false,
                    "visibility": "public",
                    "signature": "switchTo(string $mode): void",
                    "doc": "Switches the insertion mode.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "reprocessIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "reprocessIn(string $mode): void",
                    "doc": "Switches the insertion mode and processes the current token again under it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "process",
                    "static": false,
                    "visibility": "public",
                    "signature": "process(Minn\\Html\\Tree\\Token $token): void",
                    "doc": "Processes a token under the current insertion mode, or the foreign content rules when they apply.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "token",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "processIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "processIn(string $mode, Minn\\Html\\Tree\\Token $token): void",
                    "doc": "Processes a token using the rules of an insertion mode other than the current one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "framesetOk",
                    "static": false,
                    "visibility": "public",
                    "signature": "framesetOk(): bool",
                    "doc": "Whether the frameset-ok flag is still set.",
                    "shapes": [],
                    "params": [],
                    "line": 174,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "framesetNotOk",
                    "static": false,
                    "visibility": "public",
                    "signature": "framesetNotOk(): void",
                    "doc": "Clears the frameset-ok flag.",
                    "shapes": [],
                    "params": [],
                    "line": 180,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "compat",
                    "static": false,
                    "visibility": "public",
                    "signature": "compat(): string",
                    "doc": "The document's compatibility mode (\"no-quirks\", \"limited-quirks\", \"quirks\").",
                    "shapes": [],
                    "params": [],
                    "line": 186,
                    "end": 189
                },
                {
                    "routes": [],
                    "name": "setCompat",
                    "static": false,
                    "visibility": "public",
                    "signature": "setCompat(string $compat): void",
                    "doc": "Sets the compatibility mode the doctype indicated.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "compat",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 192,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "headPointer",
                    "static": false,
                    "visibility": "public",
                    "signature": "headPointer(): ?Minn\\Html\\Tree\\Node",
                    "doc": "The head element pointer.",
                    "shapes": [],
                    "params": [],
                    "line": 198,
                    "end": 201
                },
                {
                    "routes": [],
                    "name": "formPointer",
                    "static": false,
                    "visibility": "public",
                    "signature": "formPointer(): ?Minn\\Html\\Tree\\Node",
                    "doc": "The form element pointer.",
                    "shapes": [],
                    "params": [],
                    "line": 204,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "setFormPointer",
                    "static": false,
                    "visibility": "public",
                    "signature": "setFormPointer(?Minn\\Html\\Tree\\Node $node): void",
                    "doc": "Sets (or clears) the form element pointer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "?Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "templateModes",
                    "static": false,
                    "visibility": "public",
                    "signature": "templateModes(): array",
                    "doc": "The stack of template insertion modes.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 220,
                    "end": 223
                },
                {
                    "routes": [],
                    "name": "pushTemplateMode",
                    "static": false,
                    "visibility": "public",
                    "signature": "pushTemplateMode(string $mode): void",
                    "doc": "Pushes a template insertion mode.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 226,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "popTemplateMode",
                    "static": false,
                    "visibility": "public",
                    "signature": "popTemplateMode(): void",
                    "doc": "Pops the current template insertion mode.",
                    "shapes": [],
                    "params": [],
                    "line": 232,
                    "end": 235
                },
                {
                    "routes": [],
                    "name": "adjustedCurrent",
                    "static": false,
                    "visibility": "public",
                    "signature": "adjustedCurrent(): ?Minn\\Html\\Tree\\Node",
                    "doc": "The adjusted current node: the context element when only the fragment's root is open.",
                    "shapes": [],
                    "params": [],
                    "line": 238,
                    "end": 244
                },
                {
                    "routes": [],
                    "name": "insert",
                    "static": false,
                    "visibility": "public",
                    "signature": "insert(string $namespace = 'html'): Minn\\Html\\Tree\\Node",
                    "doc": "Inserts an element for the current start tag, real, in the namespace.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": "'html'",
                            "doc": ""
                        }
                    ],
                    "line": 247,
                    "end": 259
                },
                {
                    "routes": [],
                    "name": "insertImplied",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertImplied(string $name): Minn\\Html\\Tree\\Node",
                    "doc": "Inserts an element the markup implied.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 270
                },
                {
                    "routes": [],
                    "name": "insertLeafElement",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertLeafElement(string $namespace = 'html'): Minn\\Html\\Tree\\Node",
                    "doc": "Inserts and at once closes an element for the current start tag: a void element, one read whole, or self-closed foreign content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": "'html'",
                            "doc": ""
                        }
                    ],
                    "line": 273,
                    "end": 281
                },
                {
                    "routes": [],
                    "name": "insertLeaf",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertLeaf(string $namespace = 'html'): void",
                    "doc": "Inserts a leaf (text, comment, CDATA, processing instruction) for the current token, in the namespace.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": "'html'",
                            "doc": ""
                        }
                    ],
                    "line": 284,
                    "end": 289
                },
                {
                    "routes": [],
                    "name": "insertDocumentLeaf",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertDocumentLeaf(): void",
                    "doc": "Inserts a leaf at the top of the document (a doctype or a comment before or around the html element).",
                    "shapes": [],
                    "params": [],
                    "line": 292,
                    "end": 297
                },
                {
                    "routes": [],
                    "name": "pop",
                    "static": false,
                    "visibility": "public",
                    "signature": "pop(): ?Minn\\Html\\Tree\\Node",
                    "doc": "Closes the current node as implied.",
                    "shapes": [],
                    "params": [],
                    "line": 300,
                    "end": 307
                },
                {
                    "routes": [],
                    "name": "popUntil",
                    "static": false,
                    "visibility": "public",
                    "signature": "popUntil(string ...$names): void",
                    "doc": "Pops until an HTML element of one of the names closes; when the current end tag names it, that last close is real.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "names",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 310,
                    "end": 320
                },
                {
                    "routes": [],
                    "name": "popUntilNode",
                    "static": false,
                    "visibility": "public",
                    "signature": "popUntilNode(Minn\\Html\\Tree\\Node $target): void",
                    "doc": "Pops until this very node closes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "target",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 323,
                    "end": 332
                },
                {
                    "routes": [],
                    "name": "generateImpliedEndTags",
                    "static": false,
                    "visibility": "public",
                    "signature": "generateImpliedEndTags(string $except = ''): void",
                    "doc": "Generates implied end tags, leaving an element of the name open.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "except",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 335,
                    "end": 341
                },
                {
                    "routes": [],
                    "name": "generateAllImpliedEndTags",
                    "static": false,
                    "visibility": "public",
                    "signature": "generateAllImpliedEndTags(): void",
                    "doc": "Generates all implied end tags thoroughly (table parts as well).",
                    "shapes": [],
                    "params": [],
                    "line": 344,
                    "end": 350
                },
                {
                    "routes": [],
                    "name": "closeP",
                    "static": false,
                    "visibility": "public",
                    "signature": "closeP(): void",
                    "doc": "Closes a P element: implied end tags but P's, then pops through the P.",
                    "shapes": [],
                    "params": [],
                    "line": 353,
                    "end": 357
                },
                {
                    "routes": [],
                    "name": "closePInButtonScope",
                    "static": false,
                    "visibility": "public",
                    "signature": "closePInButtonScope(): void",
                    "doc": "Closes a P element when one is in button scope.",
                    "shapes": [],
                    "params": [],
                    "line": 360,
                    "end": 365
                },
                {
                    "routes": [],
                    "name": "reconstructFormatting",
                    "static": false,
                    "visibility": "public",
                    "signature": "reconstructFormatting(): void",
                    "doc": "Reconstructs the active formatting elements; the reference stops when any would have to be reopened.",
                    "shapes": [],
                    "params": [],
                    "line": 368,
                    "end": 373
                },
                {
                    "routes": [],
                    "name": "skipNextNewline",
                    "static": false,
                    "visibility": "public",
                    "signature": "skipNextNewline(): void",
                    "doc": "Asks the parser to drop one leading line feed from the next token (after PRE, LISTING).",
                    "shapes": [],
                    "params": [],
                    "line": 376,
                    "end": 379
                },
                {
                    "routes": [],
                    "name": "resetInsertionMode",
                    "static": false,
                    "visibility": "public",
                    "signature": "resetInsertionMode(): void",
                    "doc": "Resets the insertion mode from the stack of open elements.",
                    "shapes": [],
                    "params": [],
                    "line": 382,
                    "end": 408
                },
                {
                    "routes": [],
                    "name": "unsupported",
                    "static": false,
                    "visibility": "public",
                    "signature": "unsupported(string $message): void",
                    "doc": "Stops: the reference's processor does not build a tree for this markup.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 415,
                    "end": 426
                },
                {
                    "routes": [],
                    "name": "attribute",
                    "static": false,
                    "visibility": "public",
                    "signature": "attribute(string $name): string|true|null",
                    "doc": "The current tag's attribute, decoded; null when absent.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 561,
                    "end": 564
                },
                {
                    "routes": [],
                    "name": "doctype",
                    "static": false,
                    "visibility": "public",
                    "signature": "doctype(): array",
                    "doc": "The doctype's name and identifiers, for the compatibility mode. @return array{name: ?string, public: ?string, system: ?string}",
                    "shapes": [
                        "@return array{name: ?string, public: ?string, system: ?string}"
                    ],
                    "params": [],
                    "line": 567,
                    "end": 570
                },
                {
                    "routes": [],
                    "name": "step",
                    "static": false,
                    "visibility": "private",
                    "signature": "step(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 428,
                    "end": 451
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": false,
                    "visibility": "private",
                    "signature": "read(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<Token> the next token from the tokenizer (text in runs), an end-of-input token, or nothing when paused"
                    ],
                    "params": [],
                    "line": 454,
                    "end": 470
                },
                {
                    "routes": [],
                    "name": "textRuns",
                    "static": false,
                    "visibility": "private",
                    "signature": "textRuns(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<Token>"
                    ],
                    "params": [],
                    "line": 473,
                    "end": 489
                },
                {
                    "routes": [],
                    "name": "textValue",
                    "static": false,
                    "visibility": "private",
                    "signature": "textValue(Minn\\Html\\Tree\\Token $token, string $namespace): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "token",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 491,
                    "end": 496
                },
                {
                    "routes": [],
                    "name": "usesHtmlRules",
                    "static": false,
                    "visibility": "private",
                    "signature": "usesHtmlRules(Minn\\Html\\Tree\\Token $token): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "token",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 498,
                    "end": 512
                },
                {
                    "routes": [],
                    "name": "finish",
                    "static": false,
                    "visibility": "private",
                    "signature": "finish(): void",
                    "doc": "Closes everything still open at the end of the input; nothing implied is added.",
                    "shapes": [],
                    "params": [],
                    "line": 515,
                    "end": 521
                },
                {
                    "routes": [],
                    "name": "pushNode",
                    "static": false,
                    "visibility": "private",
                    "signature": "pushNode(Minn\\Html\\Tree\\Node $node, ?int $offset): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 523,
                    "end": 527
                },
                {
                    "routes": [],
                    "name": "event",
                    "static": false,
                    "visibility": "private",
                    "signature": "event(string $op, Minn\\Html\\Tree\\Node $node, ?int $offset): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "op",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 529,
                    "end": 536
                },
                {
                    "routes": [],
                    "name": "keptAttributes",
                    "static": false,
                    "visibility": "private",
                    "signature": "keptAttributes(string $name, string $namespace): array",
                    "doc": "The attributes an element keeps for later comparison: all of a formatting element's (Noah's Ark), and encoding on MathML annotation-xml.",
                    "shapes": [
                        "@return array<string, string|true>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 543,
                    "end": 558
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Compat",
            "short": "Compat",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/Compat.php",
            "lines": 79,
            "doc": "The compatibility mode a doctype indicates, by the identifier lists in\nthe HTML standard: quirks for legacy and missing doctypes, limited\nquirks for the XHTML 1.0 transitional and frameset ones (and HTML 4.01's\nwith a system identifier), no quirks otherwise.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Html\\Tree\\HeadRules"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "QUIRKS_PUBLIC",
                    "value": "array (   0 => '-//w3o//dtd w3 html strict 3.0//en//',   1 => '-/w3c/dtd html 4.0 transitional/en',   2 => 'html', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "QUIRKS_PREFIXES",
                    "value": "array (   0 => '+//silmaril//dtd html pro v0r11 19970101//',   1 => '-//as//dtd html 3.0 aswedit + extensions//',   2 => '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',   3 => '-//ietf//dtd html 2.0 level 1//',   4 => '-//ietf//dtd html 2.0 level 2//',   5 => '-//ietf//dtd html 2.0 strict level 1//',   6 => '-//ietf//dtd html 2.0 strict level 2//',   7 => '-//ietf//dtd html 2.0 strict//',   8 => '-//ietf//dtd html 2.0//',   9 => '-//ietf//dtd html 2.1e//',   10 => '-//ietf//dtd html 3.0//',   11 => '-//ietf//dtd html 3.2 final//',   12 => '-//ietf//dtd html 3.2//',   13 => '-//ietf//dtd html 3//',   14 => '-//ietf//dtd html level 0//',   15 => '-//ietf//dtd html level 1//',   16 => '-//ietf//dtd html level 2//',   17 => '-//ietf//dtd html level 3//',   18 => '-//ietf//dtd html strict level 0//',   19 => '-//ietf//dtd html strict level 1//',   20 => '-//ietf//dtd html strict level 2//',   21 => '-//ietf//dtd html strict level 3//',   22 => '-//ietf//dtd html strict//',   23 => '-//ietf//dtd html//',   24 => '-//metrius//dtd metrius presentational//',   25 => '-//microsoft//dtd internet explorer 2.0 html strict//',   26 => '-//microsoft//dtd internet explorer 2.0 html//',   27 => '-//microsoft//dtd internet explorer 2.0 tables//',   28 => '-//microsoft//dtd internet explorer 3.0 html strict//',   29 => '-//microsoft//dtd internet explorer 3.0 html//',   30 => '-//microsoft//dtd internet explorer 3.0 tables//',   31 => '-//netscape comm. corp.//dtd html//',   32 => '-//netscape comm. corp.//dtd strict html//',   33 => '-//o\\'reilly and associates//dtd html 2.0//',   34 => '-//o\\'reilly and associates//dtd html extended 1.0//',   35 => '-//o\\'reilly and associates//dtd html extended relaxed 1.0//',   36 => '-//sq//dtd html 2.0 hotmetal + extensions//',   37 => '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',   38 => '-//softquad//dtd hotmetal pro 4.0::19970916::extensions to html 4.0//',   39 => '-//spyglass//dtd html 2.0 extended//',   40 => '-//sun microsystems corp.//dtd hotjava html//',   41 => '-//sun microsystems corp.//dtd hotjava strict html//',   42 => '-//w3c//dtd html 3 1995-03-24//',   43 => '-//w3c//dtd html 3.2 draft//',   44 => '-//w3c//dtd html 3.2 final//',   45 => '-//w3c//dtd html 3.2//',   46 => '-//w3c//dtd html 3.2s draft//',   47 => '-//w3c//dtd html 4.0 frameset//',   48 => '-//w3c//dtd html 4.0 transitional//',   49 => '-//w3c//dtd html experimental 19960712//',   50 => '-//w3c//dtd html experimental 970421//',   51 => '-//w3c//dtd w3 html//',   52 => '-//w3o//dtd w3 html 3.0//',   53 => '-//webtechs//dtd mozilla html 2.0//',   54 => '-//webtechs//dtd mozilla html//', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "HTML401",
                    "value": "array (   0 => '-//w3c//dtd html 4.01 frameset//',   1 => '-//w3c//dtd html 4.01 transitional//', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "XHTML10",
                    "value": "array (   0 => '-//w3c//dtd xhtml 1.0 frameset//',   1 => '-//w3c//dtd xhtml 1.0 transitional//', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(array $doctype): string",
                    "doc": "The mode (\"no-quirks\", \"limited-quirks\", \"quirks\") for a doctype's pieces.",
                    "shapes": [
                        "@param array{name: ?string, public: ?string, system: ?string} $doctype"
                    ],
                    "params": [
                        {
                            "name": "doctype",
                            "type": "array",
                            "shape": "array{name: ?string, public: ?string, system: ?string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $html): ?array",
                    "doc": "A whole doctype token read: its name (lower-cased), identifiers and\nmode; a malformed one is quirks. Null when the text is not one doctype.",
                    "shapes": [
                        "@return array{name: ?string, public: ?string, system: ?string, mode: string}|null"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "startsWithAny",
                    "static": true,
                    "visibility": "private",
                    "signature": "startsWithAny(string $text, array $prefixes): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $prefixes"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefixes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 90
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Event",
            "short": "Event",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Html/Tree/Event.php",
            "lines": 17,
            "doc": "One step of the walk the HTML processor reports: a node opened (pushed)\nor closed (popped), the breadcrumbs at that moment, and the offset of\nthe token behind it when the document wrote it (null when implied).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\Node"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\Builder"
            ],
            "constructor": {
                "signature": "__construct(string $op, Minn\\Html\\Tree\\Node $node, array $breadcrumbs, ?int $offset)",
                "doc": "",
                "shapes": [
                    "@param list<string> $breadcrumbs"
                ],
                "params": [
                    {
                        "name": "op",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "node",
                        "type": "Minn\\Html\\Tree\\Node",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "breadcrumbs",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "offset",
                        "type": "?int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 21
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "op",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "node",
                    "type": "Minn\\Html\\Tree\\Node",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "breadcrumbs",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "offset",
                    "type": "?int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "isCloser",
                    "static": false,
                    "visibility": "public",
                    "signature": "isCloser(): bool",
                    "doc": "Whether this event closes its node.",
                    "shapes": [],
                    "params": [],
                    "line": 24,
                    "end": 27
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\ForeignRules",
            "short": "ForeignRules",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/ForeignRules.php",
            "lines": 73,
            "doc": "The rules for content in SVG and MathML: text and comments stay in the\nforeign namespace, an HTML-only start tag (or a font with color, face or\nsize) breaks out back to HTML, other start tags open elements in the\ncurrent foreign namespace, and an end tag closes the nearest element of\nits name or falls through to the HTML rules.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\Token"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\Builder"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "BREAKOUT",
                    "value": "array (   0 => 'B',   1 => 'BIG',   2 => 'BLOCKQUOTE',   3 => 'BODY',   4 => 'BR',   5 => 'CENTER',   6 => 'CODE',   7 => 'DD',   8 => 'DIV',   9 => 'DL',   10 => 'DT',   11 => 'EM',   12 => 'EMBED',   13 => 'H1',   14 => 'H2',   15 => 'H3',   16 => 'H4',   17 => 'H5',   18 => 'H6',   19 => 'HEAD',   20 => 'HR',   21 => 'I',   22 => 'IMG',   23 => 'LI',   24 => 'LISTING',   25 => 'MENU',   26 => 'META',   27 => 'NOBR',   28 => 'OL',   29 => 'P',   30 => 'PRE',   31 => 'RUBY',   32 => 'S',   33 => 'SMALL',   34 => 'SPAN',   35 => 'STRONG',   36 => 'STRIKE',   37 => 'SUB',   38 => 'SUP',   39 => 'TABLE',   40 => 'TT',   41 => 'U',   42 => 'UL',   43 => 'VAR', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "process",
                    "static": true,
                    "visibility": "public",
                    "signature": "process(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "Processes one token by the rules for foreign content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "private",
                    "signature": "text(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t, string $namespace): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "breaksOut",
                    "static": true,
                    "visibility": "private",
                    "signature": "breaksOut(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "breakOut",
                    "static": true,
                    "visibility": "private",
                    "signature": "breakOut(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "start",
                    "static": true,
                    "visibility": "private",
                    "signature": "start(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t, string $namespace): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "end",
                    "static": true,
                    "visibility": "private",
                    "signature": "end(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 85
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Formatting",
            "short": "Formatting",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/Formatting.php",
            "lines": 89,
            "doc": "The list of active formatting elements, with its markers (null): the\nformatting elements opened since the last marker that may need\nreopening, three of a kind at most (the \"Noah's Ark\" clause).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\Node",
                "Minn\\Html\\Tree\\OpenElements"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\Builder"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "entries",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "push",
                    "static": false,
                    "visibility": "public",
                    "signature": "push(Minn\\Html\\Tree\\Node $node): void",
                    "doc": "Adds a formatting element, dropping the earliest of three identical ones since the last marker.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "insertMarker",
                    "static": false,
                    "visibility": "public",
                    "signature": "insertMarker(): void",
                    "doc": "Adds a marker (a cell, caption, template, applet, marquee or object opened).",
                    "shapes": [],
                    "params": [],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "clearToLastMarker",
                    "static": false,
                    "visibility": "public",
                    "signature": "clearToLastMarker(): void",
                    "doc": "Drops entries back to and including the last marker.",
                    "shapes": [],
                    "params": [],
                    "line": 40,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": false,
                    "visibility": "public",
                    "signature": "remove(Minn\\Html\\Tree\\Node $node): void",
                    "doc": "Drops one element from the list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "contains",
                    "static": false,
                    "visibility": "public",
                    "signature": "contains(Minn\\Html\\Tree\\Node $node): bool",
                    "doc": "Whether this very element is in the list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "lastNamed",
                    "static": false,
                    "visibility": "public",
                    "signature": "lastNamed(string $name): ?Minn\\Html\\Tree\\Node",
                    "doc": "The last HTML element of the name since the last marker.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "needsReconstruction",
                    "static": false,
                    "visibility": "public",
                    "signature": "needsReconstruction(Minn\\Html\\Tree\\OpenElements $stack): bool",
                    "doc": "Whether reopening would be needed: the last entry is an element no longer open.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stack",
                            "type": "Minn\\Html\\Tree\\OpenElements",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "names",
                    "static": false,
                    "visibility": "public",
                    "signature": "names(): array",
                    "doc": "The entries' names, markers left out.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 87,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "sameAttributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "sameAttributes(Minn\\Html\\Tree\\Node $a, Minn\\Html\\Tree\\Node $b): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "a",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\HeadRules",
            "short": "HeadRules",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/HeadRules.php",
            "lines": 276,
            "doc": "The insertion modes around the body: initial (doctype and the\ncompatibility mode it indicates), before html, before head, in head, in\nhead noscript, after head, in template, after body, the frameset modes,\nand after after body (where a comment would land outside the html\nelement, which the reference does not support).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\BodyRules",
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\Compat",
                "Minn\\Html\\Tree\\Token"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\BodyRules",
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\TableRules"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "HEAD_LEAVES",
                    "value": "array (   0 => 'BASE',   1 => 'BASEFONT',   2 => 'BGSOUND',   3 => 'LINK',   4 => 'META',   5 => 'TITLE',   6 => 'NOFRAMES',   7 => 'STYLE',   8 => 'SCRIPT', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "process",
                    "static": true,
                    "visibility": "public",
                    "signature": "process(Minn\\Html\\Tree\\Builder $b, string $mode, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "Processes one token in one of these insertion modes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "initial",
                    "static": true,
                    "visibility": "private",
                    "signature": "initial(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "beforeHtml",
                    "static": true,
                    "visibility": "private",
                    "signature": "beforeHtml(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "beforeHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "beforeHead(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "openHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "openHead(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "impliedHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "impliedHead(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "inHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "inHead(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": true,
                    "visibility": "private",
                    "signature": "open(Minn\\Html\\Tree\\Builder $b, string $mode): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 121,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "closeHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeHead(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "leaveHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "leaveHead(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "openTemplate",
                    "static": true,
                    "visibility": "private",
                    "signature": "openTemplate(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "closeTemplate",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeTemplate(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "inHeadNoscript",
                    "static": true,
                    "visibility": "private",
                    "signature": "inHeadNoscript(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "closeNoscript",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeNoscript(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 173,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "leaveNoscript",
                    "static": true,
                    "visibility": "private",
                    "signature": "leaveNoscript(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "afterHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "afterHead(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 185,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "openBody",
                    "static": true,
                    "visibility": "private",
                    "signature": "openBody(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "impliedBody",
                    "static": true,
                    "visibility": "private",
                    "signature": "impliedBody(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 209,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "backIntoHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "backIntoHead(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "inTemplate",
                    "static": true,
                    "visibility": "private",
                    "signature": "inTemplate(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 220,
                    "end": 240
                },
                {
                    "routes": [],
                    "name": "afterBody",
                    "static": true,
                    "visibility": "private",
                    "signature": "afterBody(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 242,
                    "end": 251
                },
                {
                    "routes": [],
                    "name": "frameset",
                    "static": true,
                    "visibility": "private",
                    "signature": "frameset(Minn\\Html\\Tree\\Builder $b, string $mode, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 253,
                    "end": 266
                },
                {
                    "routes": [],
                    "name": "closeFrameset",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeFrameset(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 268,
                    "end": 277
                },
                {
                    "routes": [],
                    "name": "afterAfter",
                    "static": true,
                    "visibility": "private",
                    "signature": "afterAfter(Minn\\Html\\Tree\\Builder $b, string $mode, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 279,
                    "end": 288
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Node",
            "short": "Node",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/Node.php",
            "lines": 109,
            "doc": "A node the tree builder places: an element (named as the HTML API\nreports it, upper-cased, with its namespace) or a text, comment, doctype\nor other leaf. Real when a token in the document made it (its offset is\nwhere that token starts), virtual when the parser implied it.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Html\\Tree\\BodyRules",
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\Event",
                "Minn\\Html\\Tree\\Formatting",
                "Minn\\Html\\Tree\\OpenElements",
                "Minn\\Html\\Tree\\Serializer"
            ],
            "constructor": {
                "signature": "__construct(string $type, string $name, string $namespace, ?int $offset)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "type",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "name",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "namespace",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "offset",
                        "type": "?int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 24,
                "end": 30
            },
            "cases": [],
            "constants": [
                {
                    "name": "VOID",
                    "value": "array (   0 => 'AREA',   1 => 'BASE',   2 => 'BASEFONT',   3 => 'BGSOUND',   4 => 'BR',   5 => 'COL',   6 => 'EMBED',   7 => 'FRAME',   8 => 'HR',   9 => 'IMG',   10 => 'INPUT',   11 => 'KEYGEN',   12 => 'LINK',   13 => 'META',   14 => 'PARAM',   15 => 'SOURCE',   16 => 'TRACK',   17 => 'WBR', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ATOMIC",
                    "value": "array (   0 => 'SCRIPT',   1 => 'STYLE',   2 => 'TEXTAREA',   3 => 'TITLE',   4 => 'XMP',   5 => 'IFRAME',   6 => 'NOEMBED',   7 => 'NOFRAMES', )",
                    "doc": "Elements whose body the tokenizer reads whole, so they never take a closer.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "selfClosing",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "attributes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "text",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "type",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "name",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "namespace",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "offset",
                    "type": "?int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "element",
                    "static": true,
                    "visibility": "public",
                    "signature": "element(string $name, string $namespace, ?int $offset, array $attributes = array ( )): self",
                    "doc": "An element; the attributes kept are the ones the builder compares.",
                    "shapes": [
                        "@param array<string, string|true> $attributes"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "array<string, string|true>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "leaf",
                    "static": true,
                    "visibility": "public",
                    "signature": "leaf(string $type, string $name, string $namespace, ?int $offset, string $text): self",
                    "doc": "A leaf: text, a comment, a doctype, a CDATA section, a processing instruction.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "selfClosed",
                    "static": false,
                    "visibility": "public",
                    "signature": "selfClosed(): self",
                    "doc": "The same element, marked as written with \"/>\".",
                    "shapes": [],
                    "params": [],
                    "line": 53,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "isSelfClosing",
                    "static": false,
                    "visibility": "public",
                    "signature": "isSelfClosing(): bool",
                    "doc": "Whether the element was written with \"/>\".",
                    "shapes": [],
                    "params": [],
                    "line": 61,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": false,
                    "visibility": "public",
                    "signature": "text(): string",
                    "doc": "A leaf's text.",
                    "shapes": [],
                    "params": [],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": false,
                    "visibility": "public",
                    "signature": "attributes(): array",
                    "doc": "The attributes kept for comparison.",
                    "shapes": [
                        "@return array<string, string|true>"
                    ],
                    "params": [],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "isHtml",
                    "static": false,
                    "visibility": "public",
                    "signature": "isHtml(string ...$names): bool",
                    "doc": "Whether this is an HTML element with one of the names.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "names",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "isIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "isIn(string $namespace, string ...$names): bool",
                    "doc": "Whether this is an element of the namespace with one of the names.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "names",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "expectsCloser",
                    "static": false,
                    "visibility": "public",
                    "signature": "expectsCloser(): bool",
                    "doc": "Whether the element is closed by a closer of its own: not a leaf, not void, not read whole, not self-closed foreign content.",
                    "shapes": [],
                    "params": [],
                    "line": 95,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "isHtmlIntegrationPoint",
                    "static": false,
                    "visibility": "public",
                    "signature": "isHtmlIntegrationPoint(): bool",
                    "doc": "Whether this element is an HTML integration point (SVG foreignObject, desc, title; MathML annotation-xml for HTML).",
                    "shapes": [],
                    "params": [],
                    "line": 107,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "isMathTextIntegrationPoint",
                    "static": false,
                    "visibility": "public",
                    "signature": "isMathTextIntegrationPoint(): bool",
                    "doc": "Whether this element is a MathML text integration point.",
                    "shapes": [],
                    "params": [],
                    "line": 117,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\OpenElements",
            "short": "OpenElements",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/OpenElements.php",
            "lines": 110,
            "doc": "The stack of open elements and the spec's scope tests over it: an\nelement is in scope when it is reached walking down from the current\nnode before any of the scope's boundary elements.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\Node"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\Formatting"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULT_SCOPE",
                    "value": "array (   'html' =>    array (     0 => 'APPLET',     1 => 'CAPTION',     2 => 'HTML',     3 => 'TABLE',     4 => 'TD',     5 => 'TH',     6 => 'MARQUEE',     7 => 'OBJECT',     8 => 'TEMPLATE',   ),   'math' =>    array (     0 => 'MI',     1 => 'MO',     2 => 'MN',     3 => 'MS',     4 => 'MTEXT',     5 => 'ANNOTATION-XML',   ),   'svg' =>    array (     0 => 'FOREIGNOBJECT',     1 => 'DESC',     2 => 'TITLE',   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "nodes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "push",
                    "static": false,
                    "visibility": "public",
                    "signature": "push(Minn\\Html\\Tree\\Node $node): void",
                    "doc": "Puts a node on top.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "pop",
                    "static": false,
                    "visibility": "public",
                    "signature": "pop(): ?Minn\\Html\\Tree\\Node",
                    "doc": "Takes the current node off, or null when the stack is empty.",
                    "shapes": [],
                    "params": [],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": false,
                    "visibility": "public",
                    "signature": "current(): ?Minn\\Html\\Tree\\Node",
                    "doc": "The current (bottom-most open) node.",
                    "shapes": [],
                    "params": [],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "at",
                    "static": false,
                    "visibility": "public",
                    "signature": "at(int $index): ?Minn\\Html\\Tree\\Node",
                    "doc": "The node at a position, 0 being the root.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "index",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "count",
                    "static": false,
                    "visibility": "public",
                    "signature": "count(): int",
                    "doc": "How many nodes are open.",
                    "shapes": [],
                    "params": [],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every open node, root first.",
                    "shapes": [
                        "@return list<Node>"
                    ],
                    "params": [],
                    "line": 58,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "containsNode",
                    "static": false,
                    "visibility": "public",
                    "signature": "containsNode(Minn\\Html\\Tree\\Node $node): bool",
                    "doc": "Whether this very node is open.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "hasHtml",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasHtml(string $name): bool",
                    "doc": "Whether an HTML element of the name is open anywhere.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "inScope",
                    "static": false,
                    "visibility": "public",
                    "signature": "inScope(string ...$names): bool",
                    "doc": "Whether one of the HTML elements is in the default scope.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "names",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "inListItemScope",
                    "static": false,
                    "visibility": "public",
                    "signature": "inListItemScope(string $name): bool",
                    "doc": "Whether the HTML element is in list item scope (the default plus OL and UL).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "inButtonScope",
                    "static": false,
                    "visibility": "public",
                    "signature": "inButtonScope(string $name): bool",
                    "doc": "Whether the HTML element is in button scope (the default plus BUTTON).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "inTableScope",
                    "static": false,
                    "visibility": "public",
                    "signature": "inTableScope(string ...$names): bool",
                    "doc": "Whether one of the HTML elements is in table scope (HTML, TABLE and TEMPLATE bound it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "names",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 102
                },
                {
                    "routes": [],
                    "name": "inSpecificScope",
                    "static": false,
                    "visibility": "private",
                    "signature": "inSpecificScope(array $names, array $boundary): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $names",
                        "@param array<string, list<string>> $boundary"
                    ],
                    "params": [
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "boundary",
                            "type": "array",
                            "shape": "array<string, list<string>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Serializer",
            "short": "Serializer",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/Serializer.php",
            "lines": 72,
            "doc": "Normalized HTML for the processor's walk, token by token: tag names\nlower-cased (SVG's mixed-case names and attributes restored), the first\nof repeated attributes kept and double-quoted, text and attribute values\nescaped (& < > \" '), RCDATA escaped and raw text left alone, a line\nbreak after the PRE, LISTING and TEXTAREA openers, self-closed foreign\nelements written \" />\", funky comments and doctypes in a body dropped.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\Node"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SVG_TAGS",
                    "value": "array (   'altglyph' => 'altGlyph',   'altglyphdef' => 'altGlyphDef',   'altglyphitem' => 'altGlyphItem',   'animatecolor' => 'animateColor',   'animatemotion' => 'animateMotion',   'animatetransform' => 'animateTransform',   'clippath' => 'clipPath',   'feblend' => 'feBlend',   'fecolormatrix' => 'feColorMatrix',   'fecomponenttransfer' => 'feComponentTransfer',   'fecomposite' => 'feComposite',   'feconvolvematrix' => 'feConvolveMatrix',   'fediffuselighting' => 'feDiffuseLighting',   'fedisplacementmap' => 'feDisplacementMap',   'fedistantlight' => 'feDistantLight',   'fedropshadow' => 'feDropShadow',   'feflood' => 'feFlood',   'fefunca' => 'feFuncA',   'fefuncb' => 'feFuncB',   'fefuncg' => 'feFuncG',   'fefuncr' => 'feFuncR',   'fegaussianblur' => 'feGaussianBlur',   'feimage' => 'feImage',   'femerge' => 'feMerge',   'femergenode' => 'feMergeNode',   'femorphology' => 'feMorphology',   'feoffset' => 'feOffset',   'fepointlight' => 'fePointLight',   'fespecularlighting' => 'feSpecularLighting',   'fespotlight' => 'feSpotLight',   'fetile' => 'feTile',   'feturbulence' => 'feTurbulence',   'foreignobject' => 'foreignObject',   'glyphref' => 'glyphRef',   'lineargradient' => 'linearGradient',   'radialgradient' => 'radialGradient',   'textpath' => 'textPath', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SVG_ATTRIBUTES",
                    "value": "array (   'attributename' => 'attributeName',   'attributetype' => 'attributeType',   'basefrequency' => 'baseFrequency',   'baseprofile' => 'baseProfile',   'calcmode' => 'calcMode',   'clippathunits' => 'clipPathUnits',   'diffuseconstant' => 'diffuseConstant',   'edgemode' => 'edgeMode',   'filterunits' => 'filterUnits',   'glyphref' => 'glyphRef',   'gradienttransform' => 'gradientTransform',   'gradientunits' => 'gradientUnits',   'kernelmatrix' => 'kernelMatrix',   'kernelunitlength' => 'kernelUnitLength',   'keypoints' => 'keyPoints',   'keysplines' => 'keySplines',   'keytimes' => 'keyTimes',   'lengthadjust' => 'lengthAdjust',   'limitingconeangle' => 'limitingConeAngle',   'markerheight' => 'markerHeight',   'markerunits' => 'markerUnits',   'markerwidth' => 'markerWidth',   'maskcontentunits' => 'maskContentUnits',   'maskunits' => 'maskUnits',   'numoctaves' => 'numOctaves',   'pathlength' => 'pathLength',   'patterncontentunits' => 'patternContentUnits',   'patterntransform' => 'patternTransform',   'patternunits' => 'patternUnits',   'pointsatx' => 'pointsAtX',   'pointsaty' => 'pointsAtY',   'pointsatz' => 'pointsAtZ',   'preservealpha' => 'preserveAlpha',   'preserveaspectratio' => 'preserveAspectRatio',   'primitiveunits' => 'primitiveUnits',   'refx' => 'refX',   'refy' => 'refY',   'repeatcount' => 'repeatCount',   'repeatdur' => 'repeatDur',   'requiredextensions' => 'requiredExtensions',   'requiredfeatures' => 'requiredFeatures',   'specularconstant' => 'specularConstant',   'specularexponent' => 'specularExponent',   'spreadmethod' => 'spreadMethod',   'startoffset' => 'startOffset',   'stddeviation' => 'stdDeviation',   'stitchtiles' => 'stitchTiles',   'surfacescale' => 'surfaceScale',   'systemlanguage' => 'systemLanguage',   'tablevalues' => 'tableValues',   'targetx' => 'targetX',   'targety' => 'targetY',   'textlength' => 'textLength',   'viewbox' => 'viewBox',   'viewtarget' => 'viewTarget',   'xchannelselector' => 'xChannelSelector',   'ychannelselector' => 'yChannelSelector',   'zoomandpan' => 'zoomAndPan', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "RAW",
                    "value": "array (   0 => 'SCRIPT',   1 => 'STYLE',   2 => 'XMP',   3 => 'IFRAME',   4 => 'NOEMBED',   5 => 'NOFRAMES', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "qualifiedName",
                    "static": true,
                    "visibility": "public",
                    "signature": "qualifiedName(Minn\\Html\\Tree\\Node $node): string",
                    "doc": "An element's name as written: lower-case, SVG's mixed-case names restored.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "attributeName",
                    "static": true,
                    "visibility": "public",
                    "signature": "attributeName(Minn\\Html\\Tree\\Node $node, string $name): string",
                    "doc": "An attribute's name as written on an element of the node's namespace.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": true,
                    "visibility": "public",
                    "signature": "open(Minn\\Html\\Tree\\Node $node, array $attributes, string $text): string",
                    "doc": "An opening tag; an element read whole (SCRIPT, TEXTAREA, ...) carries its text and closer.",
                    "shapes": [
                        "@param list<array{0: string, 1: string|true}> $attributes in document order, repeats already dropped"
                    ],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "list<array{0: string, 1: string|true}>",
                            "default": null,
                            "doc": "in document order, repeats already dropped"
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "close",
                    "static": true,
                    "visibility": "public",
                    "signature": "close(Minn\\Html\\Tree\\Node $node): string",
                    "doc": "A closing tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "leaf",
                    "static": true,
                    "visibility": "public",
                    "signature": "leaf(Minn\\Html\\Tree\\Node $node, string $fullText, string $target): string",
                    "doc": "A leaf: text escaped, a comment from its whole text, a CDATA section, a processing instruction; nothing for the rest.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "Minn\\Html\\Tree\\Node",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fullText",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "target",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "escape",
                    "static": true,
                    "visibility": "private",
                    "signature": "escape(string $text): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 85
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\TableRules",
            "short": "TableRules",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/TableRules.php",
            "lines": 292,
            "doc": "The table insertion modes: in table (and its text), in caption, in\ncolumn group, in table body, in row, in cell. Anything that would be\nfoster-parented out of the table (text other than white space, most\nelements) is where the reference stops.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tree\\BodyRules",
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\HeadRules",
                "Minn\\Html\\Tree\\Token"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\Builder"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TABLE_PARTS",
                    "value": "array (   0 => 'CAPTION',   1 => 'COL',   2 => 'COLGROUP',   3 => 'TBODY',   4 => 'TD',   5 => 'TFOOT',   6 => 'TH',   7 => 'THEAD',   8 => 'TR', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "process",
                    "static": true,
                    "visibility": "public",
                    "signature": "process(Minn\\Html\\Tree\\Builder $b, string $mode, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "Processes one token in one of the table insertion modes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "inTable",
                    "static": true,
                    "visibility": "private",
                    "signature": "inTable(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "tableText",
                    "static": true,
                    "visibility": "private",
                    "signature": "tableText(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "clearToTableContext",
                    "static": true,
                    "visibility": "private",
                    "signature": "clearToTableContext(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "clearToTableBodyContext",
                    "static": true,
                    "visibility": "private",
                    "signature": "clearToTableBodyContext(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "clearToRowContext",
                    "static": true,
                    "visibility": "private",
                    "signature": "clearToRowContext(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "openInTable",
                    "static": true,
                    "visibility": "private",
                    "signature": "openInTable(Minn\\Html\\Tree\\Builder $b, string $mode, string $marker): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "marker",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "impliedInTable",
                    "static": true,
                    "visibility": "private",
                    "signature": "impliedInTable(Minn\\Html\\Tree\\Builder $b, string $name, string $mode): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "nestedTable",
                    "static": true,
                    "visibility": "private",
                    "signature": "nestedTable(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "closeTable",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeTable(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "form",
                    "static": true,
                    "visibility": "private",
                    "signature": "form(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "inCaption",
                    "static": true,
                    "visibility": "private",
                    "signature": "inCaption(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "closeCaption",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeCaption(Minn\\Html\\Tree\\Builder $b): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 150,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "inColumnGroup",
                    "static": true,
                    "visibility": "private",
                    "signature": "inColumnGroup(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 174
                },
                {
                    "routes": [],
                    "name": "closeColumnGroup",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeColumnGroup(Minn\\Html\\Tree\\Builder $b): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 184
                },
                {
                    "routes": [],
                    "name": "leaveColumnGroup",
                    "static": true,
                    "visibility": "private",
                    "signature": "leaveColumnGroup(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "inTableBody",
                    "static": true,
                    "visibility": "private",
                    "signature": "inTableBody(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "openRow",
                    "static": true,
                    "visibility": "private",
                    "signature": "openRow(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 205,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "impliedRow",
                    "static": true,
                    "visibility": "private",
                    "signature": "impliedRow(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 212,
                    "end": 217
                },
                {
                    "routes": [],
                    "name": "closeBody",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeBody(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 219,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "leaveBody",
                    "static": true,
                    "visibility": "private",
                    "signature": "leaveBody(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 229,
                    "end": 237
                },
                {
                    "routes": [],
                    "name": "inRow",
                    "static": true,
                    "visibility": "private",
                    "signature": "inRow(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 239,
                    "end": 249
                },
                {
                    "routes": [],
                    "name": "openCell",
                    "static": true,
                    "visibility": "private",
                    "signature": "openCell(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 251,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "closeRow",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeRow(Minn\\Html\\Tree\\Builder $b): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 259,
                    "end": 268
                },
                {
                    "routes": [],
                    "name": "leaveRow",
                    "static": true,
                    "visibility": "private",
                    "signature": "leaveRow(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 270,
                    "end": 275
                },
                {
                    "routes": [],
                    "name": "inCell",
                    "static": true,
                    "visibility": "private",
                    "signature": "inCell(Minn\\Html\\Tree\\Builder $b, Minn\\Html\\Tree\\Token $t): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "t",
                            "type": "Minn\\Html\\Tree\\Token",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 277,
                    "end": 286
                },
                {
                    "routes": [],
                    "name": "closeCell",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeCell(Minn\\Html\\Tree\\Builder $b, string $name): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 288,
                    "end": 294
                },
                {
                    "routes": [],
                    "name": "leaveCell",
                    "static": true,
                    "visibility": "private",
                    "signature": "leaveCell(Minn\\Html\\Tree\\Builder $b): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "b",
                            "type": "Minn\\Html\\Tree\\Builder",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 296,
                    "end": 303
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Token",
            "short": "Token",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Html/Tree/Token.php",
            "lines": 45,
            "doc": "A token as the tree builder reads it: a tag (name upper-cased), a run of\ntext (one kind at a time: NUL bytes, white space, or anything else), a\ncomment-like leaf, or the end of the input.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Html\\Tree\\BodyRules",
                "Minn\\Html\\Tree\\Builder",
                "Minn\\Html\\Tree\\ForeignRules",
                "Minn\\Html\\Tree\\HeadRules",
                "Minn\\Html\\Tree\\TableRules",
                "Minn\\Html\\Tree\\Unsupported"
            ],
            "constructor": {
                "signature": "__construct(string $type, string $name, int $flags, int $offset, string $text = '', string $kind = '')",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "type",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "name",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "flags",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "offset",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "text",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "kind",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 17,
                "end": 25
            },
            "cases": [],
            "constants": [
                {
                    "name": "CLOSER",
                    "value": "1",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SELF_CLOSING",
                    "value": "2",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "type",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "name",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "flags",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "offset",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "text",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "kind",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "isStart",
                    "static": false,
                    "visibility": "public",
                    "signature": "isStart(string ...$names): bool",
                    "doc": "Whether this is a start tag with one of the names (any name when none are given).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "names",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "isEnd",
                    "static": false,
                    "visibility": "public",
                    "signature": "isEnd(string ...$names): bool",
                    "doc": "Whether this is an end tag with one of the names (any name when none are given).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "names",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "selfClosing",
                    "static": false,
                    "visibility": "public",
                    "signature": "selfClosing(): bool",
                    "doc": "Whether the tag was written with \"/>\".",
                    "shapes": [],
                    "params": [],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "isText",
                    "static": false,
                    "visibility": "public",
                    "signature": "isText(string $kind): bool",
                    "doc": "Whether this is a run of text of the kind (\"null\", \"whitespace\", \"generic\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "renamed",
                    "static": false,
                    "visibility": "public",
                    "signature": "renamed(string $name, int $flags): self",
                    "doc": "The same token under another name (an \"image\" start tag read as \"img\", \"</br>\" as \"<br>\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 55
                }
            ]
        },
        {
            "name": "Minn\\Html\\Tree\\Unsupported",
            "short": "Unsupported",
            "namespace": "Minn\\Html\\Tree",
            "kind": "final class",
            "file": "public/minn/src/Minn/Html/Tree/Unsupported.php",
            "lines": 16,
            "doc": "Where the reference's HTML processor stops: markup whose tree it does\nnot build (foster parenting, the adoption agency's hard cases, PLAINTEXT,\ncontent after </html>), with the token it stopped at and the state then.",
            "implements": [
                "Stringable",
                "Throwable"
            ],
            "extends": "RuntimeException",
            "uses": [
                "Minn\\Html\\Tree\\Token"
            ],
            "usedBy": [
                "Minn\\Html\\Tree\\Builder"
            ],
            "constructor": {
                "signature": "__construct(string $message, Minn\\Html\\Tree\\Token $token, string $tokenText, array $stack, array $formatting)",
                "doc": "",
                "shapes": [
                    "@param list<string> $stack the stack of open elements, root first",
                    "@param list<string> $formatting the active formatting elements"
                ],
                "params": [
                    {
                        "name": "message",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "token",
                        "type": "Minn\\Html\\Tree\\Token",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "tokenText",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "stack",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": "the stack of open elements, root first"
                    },
                    {
                        "name": "formatting",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": "the active formatting elements"
                    }
                ],
                "visibility": "public",
                "line": 20,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "token",
                    "type": "Minn\\Html\\Tree\\Token",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "tokenText",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "stack",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "formatting",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Http",
            "short": "Http",
            "namespace": "Minn",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http.php",
            "lines": 184,
            "doc": "Outgoing HTTP, a client handed to the code that uses it. An extension\nfinds one on $minn->http, bound to the hosts its minn.json asks for under\nneeds.http; an engine class takes one in its constructor, the real network\nunless a test passes a fake's:\n\n$data = $minn->http->get('https://api.example.com/status')->json();\n$this->http->post($url, json: ['email' => $email], timeout: 10)->throw();\n\nEvery verb answers with an Exchange (->ok(), ->failed(), ->json(),\n->header(), ->cookie(), ->throw(), ->code, ->body) and takes the same\nnamed arguments, each optional:\n\n- `query`: array added to the URL's query string\n- `headers`: `name => value` (a list value repeats the header), or \"Name: value\" lines\n- `json`, `form`, `body` (post, put, patch): an array sent as JSON, an array\nform-encoded, or a string sent as it is; one of the three, and the first\ntwo set the Content-Type\n- `timeout`: seconds for the whole exchange, 5 by default\n- `redirects`: how many to follow, 5 by default; 0 hands back the 3xx\n- `hosts`: URL prefixes every hop must start with (`['https://api.github.com/']`)\n- `private`: hosts allowed to reach a private address. Loopback, LAN,\nlink-local and cloud-metadata addresses are refused otherwise, at every\nhop and after DNS, so a URL someone typed is safe to fetch\n- `maxBytes`: the largest body accepted; a longer one fails the exchange\n- `userAgent`: Minn/{version} by default\n\nA misspelt argument is an error at the line that has it. Credentials\n(Authorization, Cookie) are dropped when a redirect leaves the origin.\nA fake (new Http\\Fake([...])->http()) answers only the client it made,\nso a test shares nothing with the rest of the process.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Destination",
                "Minn\\Http\\Exchange",
                "Minn\\Http\\Fake",
                "Minn\\Http\\Location",
                "Minn\\Http\\Outbound",
                "Minn\\Http\\Transport",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Admin\\Translations",
                "Minn\\Extension\\Seams",
                "Minn\\Html",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\CertificateName",
                "Minn\\Http\\CookieText",
                "Minn\\Http\\Destination",
                "Minn\\Http\\DiePage",
                "Minn\\Http\\Download",
                "Minn\\Http\\Envelope",
                "Minn\\Http\\Exchange",
                "Minn\\Http\\Failure",
                "Minn\\Http\\Fake",
                "Minn\\Http\\Ipv6",
                "Minn\\Http\\IriParts",
                "Minn\\Http\\Kernel",
                "Minn\\Http\\LegacyHeaders",
                "Minn\\Http\\Location",
                "Minn\\Http\\Matched",
                "Minn\\Http\\MediaType",
                "Minn\\Http\\Method",
                "Minn\\Http\\Outbound",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Punycode",
                "Minn\\Http\\RawResponse",
                "Minn\\Http\\Refusal",
                "Minn\\Http\\Request",
                "Minn\\Http\\RequestFailed",
                "Minn\\Http\\RequestsNames",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\RouteMiss",
                "Minn\\Http\\RouteParams",
                "Minn\\Http\\RouteRow",
                "Minn\\Http\\Router",
                "Minn\\Http\\StatusText",
                "Minn\\Http\\Subject",
                "Minn\\Http\\Transport",
                "Minn\\Http\\TrustedProxies",
                "Minn\\Ops\\Changelog",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\EngineChecksums",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Releases",
                "Minn\\Ops\\Updates"
            ],
            "constructor": {
                "signature": "__construct(array $within = array ( ), ?Minn\\Http\\Fake $fake = NULL, ?string $refusal = NULL)",
                "doc": "The network, or $fake answering in its place. With $within, every hop\nof every request must also start with one of those URL prefixes,\nwhatever a call's own hosts: say (an extension's needs.http).",
                "shapes": [
                    "@param list<string> $within"
                ],
                "params": [
                    {
                        "name": "within",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": ""
                    },
                    {
                        "name": "fake",
                        "type": "?Minn\\Http\\Fake",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "refusal",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 60,
                "end": 62
            },
            "cases": [],
            "constants": [
                {
                    "name": "REDIRECTS",
                    "value": "array (   0 => 301,   1 => 302,   2 => 303,   3 => 307,   4 => 308, )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "CREDENTIALS",
                    "value": "array (   0 => 'authorization',   1 => 'cookie',   2 => 'proxy-authorization', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "within",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "fake",
                    "type": "?Minn\\Http\\Fake",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "refusal",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "refused",
                    "static": true,
                    "visibility": "public",
                    "signature": "refused(string $why): self",
                    "doc": "A client that throws $why at every call: what an extension holds when its minn.json did not ask for http.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "why",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $url, array $query = array ( ), array $headers = array ( ), float $timeout = 5.0, int $redirects = 5, array $hosts = array ( ), array $private = array ( ), ?int $maxBytes = NULL, ?string $userAgent = NULL): Minn\\Http\\Exchange",
                    "doc": "A GET.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "float",
                            "shape": "",
                            "default": "5.0",
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "int",
                            "shape": "",
                            "default": "5",
                            "doc": ""
                        },
                        {
                            "name": "hosts",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "private",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "head",
                    "static": false,
                    "visibility": "public",
                    "signature": "head(string $url, array $query = array ( ), array $headers = array ( ), float $timeout = 5.0, int $redirects = 5, array $hosts = array ( ), array $private = array ( ), ?string $userAgent = NULL): Minn\\Http\\Exchange",
                    "doc": "A HEAD: the status and headers a GET would bring, without the body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "float",
                            "shape": "",
                            "default": "5.0",
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "int",
                            "shape": "",
                            "default": "5",
                            "doc": ""
                        },
                        {
                            "name": "hosts",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "private",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(string $url, array $query = array ( ), array $headers = array ( ), float $timeout = 5.0, int $redirects = 5, array $hosts = array ( ), array $private = array ( ), ?int $maxBytes = NULL, ?string $userAgent = NULL): Minn\\Http\\Exchange",
                    "doc": "A DELETE.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "float",
                            "shape": "",
                            "default": "5.0",
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "int",
                            "shape": "",
                            "default": "5",
                            "doc": ""
                        },
                        {
                            "name": "hosts",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "private",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "post",
                    "static": false,
                    "visibility": "public",
                    "signature": "post(string $url, ?array $json = NULL, ?array $form = NULL, ?string $body = NULL, array $query = array ( ), array $headers = array ( ), float $timeout = 5.0, int $redirects = 5, array $hosts = array ( ), array $private = array ( ), ?int $maxBytes = NULL, ?string $userAgent = NULL): Minn\\Http\\Exchange",
                    "doc": "A POST with a json:, form: or body: payload.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "json",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "form",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "float",
                            "shape": "",
                            "default": "5.0",
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "int",
                            "shape": "",
                            "default": "5",
                            "doc": ""
                        },
                        {
                            "name": "hosts",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "private",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "put",
                    "static": false,
                    "visibility": "public",
                    "signature": "put(string $url, ?array $json = NULL, ?array $form = NULL, ?string $body = NULL, array $query = array ( ), array $headers = array ( ), float $timeout = 5.0, int $redirects = 5, array $hosts = array ( ), array $private = array ( ), ?int $maxBytes = NULL, ?string $userAgent = NULL): Minn\\Http\\Exchange",
                    "doc": "A PUT with a json:, form: or body: payload.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "json",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "form",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "float",
                            "shape": "",
                            "default": "5.0",
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "int",
                            "shape": "",
                            "default": "5",
                            "doc": ""
                        },
                        {
                            "name": "hosts",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "private",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "patch",
                    "static": false,
                    "visibility": "public",
                    "signature": "patch(string $url, ?array $json = NULL, ?array $form = NULL, ?string $body = NULL, array $query = array ( ), array $headers = array ( ), float $timeout = 5.0, int $redirects = 5, array $hosts = array ( ), array $private = array ( ), ?int $maxBytes = NULL, ?string $userAgent = NULL): Minn\\Http\\Exchange",
                    "doc": "A PATCH with a json:, form: or body: payload.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "json",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "form",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "float",
                            "shape": "",
                            "default": "5.0",
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "int",
                            "shape": "",
                            "default": "5",
                            "doc": ""
                        },
                        {
                            "name": "hosts",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "private",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "send",
                    "static": false,
                    "visibility": "public",
                    "signature": "send(Minn\\Http\\Outbound $request): Minn\\Http\\Exchange",
                    "doc": "Sends exactly what the Outbound says, with none of the verbs' rules\nabout where a request may go: the door WordPress's own HTTP API comes\nthrough after applying its rules. A client bound to hosts refuses it,\nsince curl follows a sent request's redirects where no rule can see.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "follow",
                    "static": false,
                    "visibility": "private",
                    "signature": "follow(Minn\\Http\\Outbound $request, int $redirects, Minn\\Http\\Destination $where): Minn\\Http\\Exchange",
                    "doc": "Sends each hop, judging every one against the destination rules, until a response is not a redirect.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirects",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "Minn\\Http\\Destination",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "deliver",
                    "static": false,
                    "visibility": "private",
                    "signature": "deliver(Minn\\Http\\Outbound $request, Minn\\Http\\Destination $where): Minn\\Http\\Exchange",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "Minn\\Http\\Destination",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "throwIfRefused",
                    "static": false,
                    "visibility": "private",
                    "signature": "throwIfRefused(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 151,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "nextHop",
                    "static": true,
                    "visibility": "private",
                    "signature": "nextHop(Minn\\Http\\Outbound $request, int $status, string $url): Minn\\Http\\Outbound",
                    "doc": "The request a redirect asks for: 303, and 301/302 after a POST, become a GET without the body, as browsers and curl do.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 167
                },
                {
                    "routes": [],
                    "name": "outbound",
                    "static": true,
                    "visibility": "private",
                    "signature": "outbound(string $method, string $url, array $query, array $headers, array $payload, float $timeout, ?int $maxBytes, ?string $userAgent): Minn\\Http\\Outbound",
                    "doc": "",
                    "shapes": [
                        "@param array{0: ?string, 1: ?string} $payload the body and the content type it implies"
                    ],
                    "params": [
                        {
                            "name": "method",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "payload",
                            "type": "array",
                            "shape": "array{0: ?string, 1: ?string}",
                            "default": null,
                            "doc": "the body and the content type it implies"
                        },
                        {
                            "name": "timeout",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userAgent",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 170,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "payload",
                    "static": true,
                    "visibility": "private",
                    "signature": "payload(?array $json, ?array $form, ?string $body): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: ?string, 1: ?string} the body and the content type it implies"
                    ],
                    "params": [
                        {
                            "name": "json",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "form",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 185,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "lines",
                    "static": true,
                    "visibility": "private",
                    "signature": "lines(array $headers, ?string $type): array",
                    "doc": "Headers as the transport's \"Name: value\" lines, with the payload's Content-Type unless one was given.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 203,
                    "end": 220
                },
                {
                    "routes": [],
                    "name": "withQuery",
                    "static": true,
                    "visibility": "private",
                    "signature": "withQuery(string $url, array $query): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 222,
                    "end": 230
                }
            ]
        },
        {
            "name": "Minn\\Http\\Access",
            "short": "Access",
            "namespace": "Minn\\Http",
            "kind": "enum",
            "file": "public/minn/src/Minn/Http/Access.php",
            "lines": 17,
            "doc": "Who a route is for. The six answers every route gives, so the\nauthorization surface of the engine reads as a list of these.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Front\\AssetsController",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Policy",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\AjaxController"
            ],
            "constructor": null,
            "cases": [
                {
                    "name": "Public",
                    "value": null,
                    "doc": "Anyone, signed in or not; the caller is never resolved."
                },
                {
                    "name": "SignedIn",
                    "value": null,
                    "doc": "A signed-in caller, whoever they are."
                },
                {
                    "name": "Cap",
                    "value": null,
                    "doc": "A signed-in caller holding the named capability (and every extra one)."
                },
                {
                    "name": "Floor",
                    "value": null,
                    "doc": "The Minn Admin floor: signed in, may edit posts, and holds every extra capability named; refused as rest_forbidden."
                },
                {
                    "name": "Own",
                    "value": null,
                    "doc": "A signed-in caller holding a capability on the object a pattern capture names."
                },
                {
                    "name": "Type",
                    "value": null,
                    "doc": "Any caller, on a route whose {base} capture must name a declared post type; the route declines otherwise and the handler judges the rest."
                },
                {
                    "name": "Taxonomy",
                    "value": null,
                    "doc": "Any caller, on a route whose {base} capture must name a taxonomy plugin code registered to show in REST; the route declines otherwise and the handler judges the rest."
                }
            ],
            "constants": [],
            "properties": [],
            "methods": []
        },
        {
            "name": "Minn\\Http\\Args",
            "short": "Args",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Args.php",
            "lines": 149,
            "doc": "The parameters a route accepts, as the reference describes them in the\nREST index: name => {description, type, ...}. The descriptions, types,\nenums and bounds were captured from the reference, so a client that\nreads either index is told the same thing, and the router refuses a\nvalue the way the reference refuses it, before it judges the caller.\n\nA route declares only what it really reads. An argument published here\nthat the handler ignores would be worse than none at all, because a\nclient reading the index would build a request around it, so each set\nbelow names the code that consumes it. The sets keep the reference's\norder, because a refusal lists the invalid parameters in that order.\n`_fields` and `_embed` are read everywhere and declared nowhere, as the\nreference lists neither and validates neither.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Http\\Route",
                "Minn\\Http\\RouteRow",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\PostCollectionParams",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermCollectionParams",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UserCollectionParams",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SHARED",
                    "value": "array (   0 => 'context',   1 => 'page',   2 => 'per_page',   3 => 'search', )",
                    "doc": "The shared collection parameters, judged first: the reference answers\na refusal among these alone, and reads the route's own parameters\nonly once these pass.",
                    "visibility": "public"
                },
                {
                    "name": "HANDLER_VALIDATES",
                    "value": "'handler_validates'",
                    "doc": "The key an argument carries when its handler judges it (a status the caller may not read is refused before the enum is).",
                    "visibility": "public"
                },
                {
                    "name": "CONTEXT",
                    "value": "array (   'context' =>    array (     'description' => 'Scope under which the request is made; determines fields present in response.',     'type' => 'string',     'enum' =>      array (       0 => 'view',       1 => 'embed',       2 => 'edit',     ),     'default' => 'view',     'required' => false,   ), )",
                    "doc": "Read by Rest\\Context::of(): which view of a resource is wanted.",
                    "visibility": "public"
                },
                {
                    "name": "FORCE",
                    "value": "array (   'force' =>    array (     'description' => 'Whether to bypass Trash and force deletion.',     'type' => 'boolean',     'default' => false,     'required' => false,   ), )",
                    "doc": "Read by Content\\PostWriter: whether a delete bypasses the trash.",
                    "visibility": "public"
                },
                {
                    "name": "USERS",
                    "value": "array (   'page' =>    array (     'description' => 'Current page of the collection.',     'type' => 'integer',     'default' => 1,     'minimum' => 1,     'required' => false,   ),   'per_page' =>    array (     'description' => 'Maximum number of items to be returned in result set.',     'type' => 'integer',     'default' => 10,     'minimum' => 1,     'maximum' => 100,     'required' => false,   ),   'search' =>    array (     'description' => 'Limit results to those matching a string.',     'type' => 'string',     'required' => false,   ),   'exclude' =>    array (     'description' => 'Ensure result set excludes specific IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'default' =>      array (     ),     'required' => false,   ),   'include' =>    array (     'description' => 'Limit result set to specific IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'default' =>      array (     ),     'required' => false,   ),   'offset' =>    array (     'description' => 'Offset the result set by a specific number of items.',     'type' => 'integer',     'required' => false,   ),   'order' =>    array (     'default' => 'asc',     'description' => 'Order sort attribute ascending or descending.',     'enum' =>      array (       0 => 'asc',       1 => 'desc',     ),     'type' => 'string',     'required' => false,   ),   'orderby' =>    array (     'default' => 'name',     'description' => 'Sort collection by user attribute.',     'enum' =>      array (       0 => 'id',       1 => 'include',       2 => 'name',       3 => 'registered_date',       4 => 'slug',       5 => 'include_slugs',       6 => 'email',       7 => 'url',     ),     'type' => 'string',     'required' => false,   ),   'slug' =>    array (     'description' => 'Limit result set to users with one or more specific slugs.',     'type' => 'array',     'items' =>      array (       'type' => 'string',     ),     'required' => false,   ),   'roles' =>    array (     'description' => 'Limit result set to users matching at least one specific role provided. Accepts csv list or single role.',     'type' => 'array',     'items' =>      array (       'type' => 'string',     ),     'required' => false,   ),   'capabilities' =>    array (     'description' => 'Limit result set to users matching at least one specific capability provided. Accepts csv list or single capability.',     'type' => 'array',     'items' =>      array (       'type' => 'string',     ),     'required' => false,   ),   'who' =>    array (     'description' => 'Limit result set to users who are considered authors.',     'type' => 'string',     'enum' =>      array (       0 => 'authors',     ),     'required' => false,   ),   'has_published_posts' =>    array (     'description' => 'Limit result set to users who have published posts.',     'type' =>      array (       0 => 'boolean',       1 => 'array',     ),     'items' =>      array (       'type' => 'string',       'enum' =>        array (       ),     ),     'required' => false,   ),   'search_columns' =>    array (     'default' =>      array (     ),     'description' => 'Array of column names to be searched.',     'type' => 'array',     'items' =>      array (       'enum' =>        array (         0 => 'email',         1 => 'name',         2 => 'id',         3 => 'username',         4 => 'slug',       ),       'type' => 'string',     ),     'required' => false,   ), )",
                    "doc": "Read by Rest\\UserCollectionParams: the user collection.",
                    "visibility": "public"
                },
                {
                    "name": "TERMS",
                    "value": "array (   'page' =>    array (     'description' => 'Current page of the collection.',     'type' => 'integer',     'default' => 1,     'minimum' => 1,     'required' => false,   ),   'per_page' =>    array (     'description' => 'Maximum number of items to be returned in result set.',     'type' => 'integer',     'default' => 10,     'minimum' => 1,     'maximum' => 100,     'required' => false,   ),   'search' =>    array (     'description' => 'Limit results to those matching a string.',     'type' => 'string',     'required' => false,   ),   'exclude' =>    array (     'description' => 'Ensure result set excludes specific IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'default' =>      array (     ),     'required' => false,   ),   'include' =>    array (     'description' => 'Limit result set to specific IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'default' =>      array (     ),     'required' => false,   ),   'offset' =>    array (     'description' => 'Offset the result set by a specific number of items.',     'type' => 'integer',     'required' => false,   ),   'order' =>    array (     'description' => 'Order sort attribute ascending or descending.',     'type' => 'string',     'default' => 'asc',     'enum' =>      array (       0 => 'asc',       1 => 'desc',     ),     'required' => false,   ),   'orderby' =>    array (     'description' => 'Sort collection by term attribute.',     'type' => 'string',     'default' => 'name',     'enum' =>      array (       0 => 'id',       1 => 'include',       2 => 'name',       3 => 'slug',       4 => 'include_slugs',       5 => 'term_group',       6 => 'description',       7 => 'count',     ),     'required' => false,   ),   'hide_empty' =>    array (     'description' => 'Whether to hide terms not assigned to any posts.',     'type' => 'boolean',     'default' => false,     'required' => false,   ),   'parent' =>    array (     'description' => 'Limit result set to terms assigned to a specific parent.',     'type' => 'integer',     'required' => false,   ),   'post' =>    array (     'description' => 'Limit result set to terms assigned to a specific post.',     'type' => 'integer',     'default' => NULL,     'required' => false,   ),   'slug' =>    array (     'description' => 'Limit result set to terms with one or more specific slugs.',     'type' => 'array',     'items' =>      array (       'type' => 'string',     ),     'required' => false,   ), )",
                    "doc": "Read by Rest\\TermCollectionParams: a term collection, either shape.",
                    "visibility": "public"
                },
                {
                    "name": "COMMENTS",
                    "value": "array (   'page' =>    array (     'description' => 'Current page of the collection.',     'type' => 'integer',     'default' => 1,     'minimum' => 1,     'required' => false,   ),   'per_page' =>    array (     'description' => 'Maximum number of items to be returned in result set.',     'type' => 'integer',     'default' => 10,     'minimum' => 1,     'maximum' => 100,     'required' => false,   ),   'search' =>    array (     'description' => 'Limit results to those matching a string.',     'type' => 'string',     'required' => false,   ),   'after' =>    array (     'description' => 'Limit response to comments published after a given ISO8601 compliant date.',     'type' => 'string',     'format' => 'date-time',     'required' => false,   ),   'author' =>    array (     'description' => 'Limit result set to comments assigned to specific user IDs. Requires authorization.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'required' => false,   ),   'author_exclude' =>    array (     'description' => 'Ensure result set excludes comments assigned to specific user IDs. Requires authorization.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'required' => false,   ),   'author_email' =>    array (     'default' => NULL,     'description' => 'Limit result set to that from a specific author email. Requires authorization.',     'format' => 'email',     'type' => 'string',     'required' => false,   ),   'before' =>    array (     'description' => 'Limit response to comments published before a given ISO8601 compliant date.',     'type' => 'string',     'format' => 'date-time',     'required' => false,   ),   'exclude' =>    array (     'description' => 'Ensure result set excludes specific IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'default' =>      array (     ),     'required' => false,   ),   'include' =>    array (     'description' => 'Limit result set to specific IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'default' =>      array (     ),     'required' => false,   ),   'offset' =>    array (     'description' => 'Offset the result set by a specific number of items.',     'type' => 'integer',     'required' => false,   ),   'order' =>    array (     'description' => 'Order sort attribute ascending or descending.',     'type' => 'string',     'default' => 'desc',     'enum' =>      array (       0 => 'asc',       1 => 'desc',     ),     'required' => false,   ),   'orderby' =>    array (     'description' => 'Sort collection by comment attribute.',     'type' => 'string',     'default' => 'date_gmt',     'enum' =>      array (       0 => 'date',       1 => 'date_gmt',       2 => 'id',       3 => 'include',       4 => 'post',       5 => 'parent',       6 => 'type',     ),     'required' => false,   ),   'parent' =>    array (     'default' =>      array (     ),     'description' => 'Limit result set to comments of specific parent IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'required' => false,   ),   'parent_exclude' =>    array (     'default' =>      array (     ),     'description' => 'Ensure result set excludes specific parent IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'required' => false,   ),   'post' =>    array (     'default' =>      array (     ),     'description' => 'Limit result set to comments assigned to specific post IDs.',     'type' => 'array',     'items' =>      array (       'type' => 'integer',     ),     'required' => false,   ),   'status' =>    array (     'default' => 'approve',     'description' => 'Limit result set to comments assigned a specific status. Requires authorization.',     'type' => 'string',     'required' => false,   ),   'type' =>    array (     'default' => 'comment',     'description' => 'Limit result set to comments assigned a specific type. Requires authorization.',     'type' => 'string',     'required' => false,   ),   'password' =>    array (     'description' => 'The password for the post if it is password protected.',     'type' => 'string',     'required' => false,   ), )",
                    "doc": "Read by Rest\\CommentsController::list(): the comment collection.",
                    "visibility": "public"
                },
                {
                    "name": "USER_CREATE",
                    "value": "array (   'username' =>    array (     'description' => 'Login name for the user.',     'type' => 'string',     'required' => true,   ),   'name' =>    array (     'description' => 'Display name for the user.',     'type' => 'string',     'required' => false,   ),   'first_name' =>    array (     'description' => 'First name for the user.',     'type' => 'string',     'required' => false,   ),   'last_name' =>    array (     'description' => 'Last name for the user.',     'type' => 'string',     'required' => false,   ),   'email' =>    array (     'description' => 'The email address for the user.',     'type' => 'string',     'format' => 'email',     'required' => true,   ),   'url' =>    array (     'description' => 'URL of the user.',     'type' => 'string',     'format' => 'uri',     'required' => false,   ),   'description' =>    array (     'description' => 'Description of the user.',     'type' => 'string',     'required' => false,   ),   'locale' =>    array (     'description' => 'Locale for the user.',     'type' => 'string',     'required' => false,   ),   'nickname' =>    array (     'description' => 'The nickname for the user.',     'type' => 'string',     'required' => false,   ),   'roles' =>    array (     'description' => 'Roles assigned to the user.',     'type' => 'array',     'items' =>      array (       'type' => 'string',     ),     'required' => false,   ),   'password' =>    array (     'description' => 'Password for the user (never included).',     'type' => 'string',     'required' => true,   ), )",
                    "doc": "Read by Rest\\UsersController::create(): the body of a user create. The locale takes any\nstring here; the reference's enum is the site's installed languages, which is not a constant.",
                    "visibility": "public"
                },
                {
                    "name": "USER_EDIT",
                    "value": "array (   'name' =>    array (     'description' => 'Display name for the user.',     'type' => 'string',     'required' => false,   ),   'first_name' =>    array (     'description' => 'First name for the user.',     'type' => 'string',     'required' => false,   ),   'last_name' =>    array (     'description' => 'Last name for the user.',     'type' => 'string',     'required' => false,   ),   'email' =>    array (     'description' => 'The email address for the user.',     'type' => 'string',     'format' => 'email',     'required' => false,   ),   'url' =>    array (     'description' => 'URL of the user.',     'type' => 'string',     'format' => 'uri',     'required' => false,   ),   'description' =>    array (     'description' => 'Description of the user.',     'type' => 'string',     'required' => false,   ),   'locale' =>    array (     'description' => 'Locale for the user.',     'type' => 'string',     'required' => false,   ),   'nickname' =>    array (     'description' => 'The nickname for the user.',     'type' => 'string',     'required' => false,   ),   'slug' =>    array (     'description' => 'An alphanumeric identifier for the user.',     'type' => 'string',     'required' => false,   ),   'roles' =>    array (     'description' => 'Roles assigned to the user.',     'type' => 'array',     'items' =>      array (       'type' => 'string',     ),     'required' => false,   ),   'password' =>    array (     'description' => 'Password for the user (never included).',     'type' => 'string',     'required' => false,   ),   'meta' =>    array (     'description' => 'Meta fields.',     'type' => 'object',     'properties' =>      array (       'show_admin_bar_front' =>        array (         'type' => 'string',         'default' => 'true',       ),     ),     'required' => false,   ), )",
                    "doc": "Read by Rest\\UsersController::update(): the body of a user edit; nothing is required.",
                    "visibility": "public"
                },
                {
                    "name": "USER_DELETE",
                    "value": "array (   'force' =>    array (     'type' => 'boolean',     'default' => false,     'description' => 'Required to be true, as users do not support trashing.',     'required' => false,   ),   'reassign' =>    array (     'type' => 'integer',     'description' => 'Reassign the deleted user\\'s posts and links to this user ID.',     'required' => true,     'handler_validates' => true,   ), )",
                    "doc": "Read by Rest\\UsersController::delete(): the reassignment a user delete requires, and the force it insists on.",
                    "visibility": "public"
                },
                {
                    "name": "APPLICATION_PASSWORD",
                    "value": "array (   'app_id' =>    array (     'description' => 'A UUID provided by the application to uniquely identify it. It is recommended to use an UUID v5 with the URL or DNS namespace.',     'type' => 'string',     'oneOf' =>      array (       0 =>        array (         'type' => 'string',         'format' => 'uuid',       ),       1 =>        array (         'type' => 'string',         'enum' =>          array (           0 => '',         ),       ),     ),     'required' => false,   ),   'name' =>    array (     'description' => 'The name of the application password.',     'type' => 'string',     'minLength' => 1,     'pattern' => '.*\\\\S.*',     'required' => true,   ), )",
                    "doc": "Read by Rest\\ApplicationPasswordsController::create(): the body of a new application password.",
                    "visibility": "public"
                },
                {
                    "name": "SEARCH",
                    "value": "array (   'context' =>    array (     'description' => 'Scope under which the request is made; determines fields present in response.',     'type' => 'string',     'enum' =>      array (       0 => 'view',       1 => 'embed',     ),     'default' => 'view',     'required' => false,   ),   'page' =>    array (     'description' => 'Current page of the collection.',     'type' => 'integer',     'default' => 1,     'minimum' => 1,     'required' => false,   ),   'per_page' =>    array (     'description' => 'Maximum number of items to be returned in result set.',     'type' => 'integer',     'default' => 10,     'minimum' => 1,     'maximum' => 100,     'required' => false,   ),   'search' =>    array (     'description' => 'Limit results to those matching a string.',     'type' => 'string',     'required' => false,   ),   'type' =>    array (     'default' => 'post',     'description' => 'Limit results to items of an object type.',     'type' => 'string',     'enum' =>      array (       0 => 'post',       1 => 'term',       2 => 'post-format',     ),     'required' => false,     'handler_validates' => true,   ),   'subtype' =>    array (     'default' => 'any',     'description' => 'Limit results to items of one or more object subtypes.',     'type' => 'array',     'items' =>      array (       'enum' =>        array (         0 => 'post',         1 => 'page',         2 => 'category',         3 => 'post_tag',         4 => 'any',       ),       'type' => 'string',     ),     'required' => false,     'handler_validates' => true,   ), )",
                    "doc": "Read by Rest\\SearchController::list(): the search collection, whose context has no edit view.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "merge",
                    "static": true,
                    "visibility": "public",
                    "signature": "merge(array $sets): array",
                    "doc": "The sets merged into one map, as a route's endpoint publishes them.",
                    "shapes": [
                        "@param list<array<string, array<string, mixed>>> $sets",
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "sets",
                            "type": "array",
                            "shape": "list<array<string, array<string, mixed>>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 166,
                    "end": 169
                }
            ]
        },
        {
            "name": "Minn\\Http\\CertificateName",
            "short": "CertificateName",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/CertificateName.php",
            "lines": 56,
            "doc": "Whether a TLS certificate names a host: a wildcard only as a whole first\nlabel with at least two labels after it, matching exactly one label; an\nIP address never matches by name; the subjectAltName DNS entries win over\nthe common name when present.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "valid",
                    "static": true,
                    "visibility": "public",
                    "signature": "valid(string $reference): bool",
                    "doc": "Whether a certificate's reference name is one a host can match.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "reference",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "matches",
                    "static": true,
                    "visibility": "public",
                    "signature": "matches(string $host, string $reference): bool",
                    "doc": "Whether the host matches the reference name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reference",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "certificateMatches",
                    "static": true,
                    "visibility": "public",
                    "signature": "certificateMatches(string $host, array $certificate): bool",
                    "doc": "Whether a parsed certificate (openssl_x509_parse) names the host.",
                    "shapes": [
                        "@param array<string, mixed> $certificate"
                    ],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "certificate",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 67
                }
            ]
        },
        {
            "name": "Minn\\Http\\CookieText",
            "short": "CookieText",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/CookieText.php",
            "lines": 94,
            "doc": "Set-Cookie text and the matching rules a cookie jar applies: parsing a\nheader into name, value and attributes; normalizing attributes (expires\nand max-age as timestamps, the domain without its leading dot); whether\na cookie belongs to a domain and a path (RFC 6265).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $header, string $name = ''): array",
                    "doc": "A Set-Cookie value split up. With a name given, the first part is\nall value; a first part without \"=\" is a value with an empty name.",
                    "shapes": [
                        "@return array{name: string, value: string, attributes: array<string, string|true>}"
                    ],
                    "params": [
                        {
                            "name": "header",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "normalizeAttribute",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalizeAttribute(string $name, mixed $value, int $referenceTime): mixed",
                    "doc": "One attribute normalized, or null when it should go: dates become timestamps, the domain loses its leading dot.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "referenceTime",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "hostMatches",
                    "static": true,
                    "visibility": "public",
                    "signature": "hostMatches(?string $cookieDomain, string $domain): bool",
                    "doc": "Whether a host-only cookie with this domain attribute (none means any) belongs to the domain: the same text only.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "cookieDomain",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "domainMatches",
                    "static": true,
                    "visibility": "public",
                    "signature": "domainMatches(?string $cookieDomain, string $domain): bool",
                    "doc": "Whether a cookie with this domain attribute (none means any) belongs to the domain or one of its subdomains (never an IP address).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "cookieDomain",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "pathMatches",
                    "static": true,
                    "visibility": "public",
                    "signature": "pathMatches(?string $cookiePath, string $requestPath): bool",
                    "doc": "Whether a cookie with this path attribute (none means any) is sent for the request path.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "cookiePath",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "requestPath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "defaultPath",
                    "static": true,
                    "visibility": "public",
                    "signature": "defaultPath(string $requestPath): string",
                    "doc": "The path a cookie without one gets: the request path up to its last slash, or \"/\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "requestPath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 105
                }
            ]
        },
        {
            "name": "Minn\\Http\\Destination",
            "short": "Destination",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Destination.php",
            "lines": 102,
            "doc": "Where Minn\\Http lets a request go. Only http and https; when hosts are\nnamed, every hop must start with one of them (and with one of the\nclient's own, when it is bound); and an address outside the\npublic internet (loopback, private and shared ranges, link-local, cloud\nmetadata, reserved) is refused unless its host is listed in $private. A\nname is resolved here and curl is pinned to the addresses that were\nchecked, so DNS cannot answer one way to the check and another to the\nconnection.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Exchange",
                "Minn\\Http\\Outbound"
            ],
            "usedBy": [
                "Minn\\Http",
                "Minn\\Http\\Download",
                "Minn\\Http\\Location"
            ],
            "constructor": {
                "signature": "__construct(array $hosts = array ( ), array $private = array ( ), ?Closure $lookup = NULL, array $within = array ( ))",
                "doc": "",
                "shapes": [
                    "@param list<string> $hosts URL prefixes every hop must start with; none means any public host",
                    "@param list<string> $private host names or addresses allowed to reach a private address",
                    "@param (Closure(string): list<string>)|null $lookup a host's addresses; DNS when null",
                    "@param list<string> $within URL prefixes the client itself is bound to (an extension's needs.http); none means unbound"
                ],
                "params": [
                    {
                        "name": "hosts",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": "URL prefixes every hop must start with; none means any public host"
                    },
                    {
                        "name": "private",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": "host names or addresses allowed to reach a private address"
                    },
                    {
                        "name": "lookup",
                        "type": "?Closure",
                        "shape": "(Closure(string): list<string>)|null",
                        "default": "NULL",
                        "doc": "a host's addresses; DNS when null"
                    },
                    {
                        "name": "within",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": "URL prefixes the client itself is bound to (an extension's needs.http); none means unbound"
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "private",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "hosts",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "lookup",
                    "type": "?Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "within",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "refusal",
                    "static": false,
                    "visibility": "public",
                    "signature": "refusal(string $url): ?string",
                    "doc": "Why $url may not be requested, or null when nothing about the URL itself refuses it (a name is judged again once resolved).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "pinned",
                    "static": false,
                    "visibility": "public",
                    "signature": "pinned(Minn\\Http\\Outbound $request): Minn\\Http\\Outbound|Minn\\Http\\Exchange",
                    "doc": "The request with curl pinned to the addresses its host resolves to,\nor the failed exchange when the name does not resolve or resolves\nsomewhere private it was not allowed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "host",
                    "static": true,
                    "visibility": "public",
                    "signature": "host(string $url): string",
                    "doc": "A URL's host, lower-cased, without the brackets around an IPv6 address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "startsWithOne",
                    "static": true,
                    "visibility": "private",
                    "signature": "startsWithOne(string $url, array $prefixes): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $prefixes"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefixes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "allowed",
                    "static": false,
                    "visibility": "private",
                    "signature": "allowed(string $host, string $address): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "dns",
                    "static": true,
                    "visibility": "private",
                    "signature": "dns(string $host): array",
                    "doc": "A name's IPv4 addresses, or its IPv6 ones when it has none.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 119
                }
            ]
        },
        {
            "name": "Minn\\Http\\DiePage",
            "short": "DiePage",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/DiePage.php",
            "lines": 126,
            "doc": "The page wp_die shows a browser, as the reference draws it (probe\nfunctions-remaining): its stylesheet word for word, the html element's\nlanguage (or dir='rtl' for a right-to-left message, which also sets a\nTahoma font), the charset, the robots tag, the title and the message as\ngiven, then any links. The caller escapes what needs escaping. The\nstylesheet is kept here with four spaces for each of its tabs.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "STYLES",
                    "value": "'        html {             background: #f1f1f1;         }         body {             background: #fff;             border: 1px solid #ccd0d4;             color: #444;             font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;             margin: 2em auto;             padding: 1em 2em;             max-width: 700px;             -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .04);             box-shadow: 0 1px 1px rgba(0, 0, 0, .04);         }         h1 {             border-bottom: 1px solid #dadada;             clear: both;             color: #666;             font-size: 24px;             margin: 30px 0 0 0;             padding: 0;             padding-bottom: 7px;         }         #error-page {             margin-top: 50px;         }         #error-page p,         #error-page .wp-die-message {             font-size: 14px;             line-height: 1.5;             margin: 25px 0 20px;         }         #error-page code {             font-family: Consolas, Monaco, monospace;         }         ul li {             margin-bottom: 10px;             font-size: 14px ;         }         a {             color: #3858e9;         }         a:hover,         a:active {             color: #183ad6;         }         a:focus {             color: #183ad6;             box-shadow: 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color, #3858e9);             outline: 2px solid transparent;         }         .button {             background: #f3f5f6;             border: 1px solid #016087;             color: #016087;             display: inline-block;             text-decoration: none;             font-size: 13px;             line-height: 2;             height: 28px;             margin: 0;             padding: 0 10px 1px;             cursor: pointer;             -webkit-border-radius: 3px;             -webkit-appearance: none;             border-radius: 3px;             white-space: nowrap;             -webkit-box-sizing: border-box;             -moz-box-sizing:    border-box;             box-sizing:         border-box;              vertical-align: top;         }          .button.button-large {             line-height: 2.30769231;             min-height: 32px;             padding: 0 12px;         }          .button:hover,         .button:focus {             background: #f1f1f1;         }          .button:focus {             background: #f3f5f6;             border-color: #007cba;             -webkit-box-shadow: 0 0 0 1px #007cba;             box-shadow: 0 0 0 1px #007cba;             color: #016087;             outline: 2px solid transparent;             outline-offset: 0;         }          .button:active {             background: #f3f5f6;             border-color: #7e8993;             -webkit-box-shadow: none;             box-shadow: none;         }'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(string $languageAttributes, string $direction, string $charset, string $robots, string $title, string $message, string $links): string",
                    "doc": "The whole page: $languageAttributes go inside <html> unless the direction\nis 'rtl'; $robots is the printed robots tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "languageAttributes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "direction",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "robots",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "links",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "styles",
                    "static": true,
                    "visibility": "private",
                    "signature": "styles(): string",
                    "doc": "The stylesheet with its tabs back.",
                    "shapes": [],
                    "params": [],
                    "line": 136,
                    "end": 139
                }
            ]
        },
        {
            "name": "Minn\\Http\\Download",
            "short": "Download",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Download.php",
            "lines": 36,
            "doc": "A file the engine fetches for itself (a package, a language pack), over\nits Minn\\Http client with the rules a download needs: https at every hop,\none of the caller's host prefixes when given, no private address, and a\nbody over the cap fails rather than being truncated. The messages are\nwritten for the person who asked for the download.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Destination"
            ],
            "usedBy": [
                "Minn\\Admin\\Translations",
                "Minn\\Ops\\EngineChecksums",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Packages"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 21
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "https",
                    "static": false,
                    "visibility": "public",
                    "signature": "https(string $url, int $maxBytes, array $hostPrefixes = array ( ), string $userAgent = 'Minn Engine'): string",
                    "doc": "The body at $url, following at most five redirects.",
                    "shapes": [
                        "@param list<string> $hostPrefixes URL prefixes every hop must start with (none: any https host)"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hostPrefixes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array ( )",
                            "doc": "URL prefixes every hop must start with (none: any https host)"
                        },
                        {
                            "name": "userAgent",
                            "type": "string",
                            "shape": "",
                            "default": "'Minn Engine'",
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 51
                }
            ]
        },
        {
            "name": "Minn\\Http\\Envelope",
            "short": "Envelope",
            "namespace": "Minn\\Http",
            "kind": "interface",
            "file": "public/minn/src/Minn/Http/Envelope.php",
            "lines": 9,
            "doc": "What runs around a matched route once the router knows the route takes\nthe request: the place a host lets other code refuse, answer or edit it\n(the runtime's REST server filters). The router hands over the argument\ncheck's refusal and the policy's, unthrown, because that code may clear\nthe one and must never run the handler past the other. Without an\nenvelope the router throws them itself.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Matched",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Http\\Router",
                "Minn\\Rest\\RuntimeEnvelope"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "around",
                    "static": false,
                    "visibility": "public",
                    "signature": "around(Minn\\Http\\Matched $matched, Minn\\Http\\Request $request, ?Minn\\RestError $invalid, ?Minn\\RestError $refusal, Closure $invoke): Minn\\Http\\Response",
                    "doc": "The answer to a matched request, refusals included.",
                    "shapes": [
                        "@param Closure(): Response $invoke the route's handler; it may throw RestError"
                    ],
                    "params": [
                        {
                            "name": "matched",
                            "type": "Minn\\Http\\Matched",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invalid",
                            "type": "?Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "refusal",
                            "type": "?Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invoke",
                            "type": "Closure",
                            "shape": "Closure(): Response",
                            "default": null,
                            "doc": "the route's handler; it may throw RestError"
                        }
                    ],
                    "line": 25,
                    "end": 25
                }
            ]
        },
        {
            "name": "Minn\\Http\\Exchange",
            "short": "Exchange",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Exchange.php",
            "lines": 74,
            "doc": "What came back: the final response's status, headers (repeats as lists), Set-Cookie values, and body, or the transport error.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\RequestFailed",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Http",
                "Minn\\Http\\Destination",
                "Minn\\Http\\Fake",
                "Minn\\Http\\RawResponse",
                "Minn\\Http\\RequestFailed",
                "Minn\\Http\\Transport"
            ],
            "constructor": {
                "signature": "__construct(int $code, array $headers, array $cookies, string $body, ?string $error = NULL, array $head = array ( ), int $errno = 0, string $url = '')",
                "doc": "",
                "shapes": [
                    "@param array<string, string|list<string>> $headers names lower-cased",
                    "@param list<string> $cookies raw Set-Cookie header values",
                    "@param list<string> $head the final response's status line and header lines as they came"
                ],
                "params": [
                    {
                        "name": "code",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "headers",
                        "type": "array",
                        "shape": "array<string, string|list<string>>",
                        "default": null,
                        "doc": "names lower-cased"
                    },
                    {
                        "name": "cookies",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": "raw Set-Cookie header values"
                    },
                    {
                        "name": "body",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "error",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "head",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": "the final response's status line and header lines as they came"
                    },
                    {
                        "name": "errno",
                        "type": "int",
                        "shape": "",
                        "default": "0",
                        "doc": "curl's error number when the transport failed; 0 when the request was refused before it was sent"
                    },
                    {
                        "name": "url",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": "where the final response came from"
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 21
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "code",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "headers",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "cookies",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "error",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "head",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "errno",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "failure",
                    "static": true,
                    "visibility": "public",
                    "signature": "failure(string $error, int $errno, string $url): self",
                    "doc": "An exchange in which no response arrived.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "errno",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "failed",
                    "static": false,
                    "visibility": "public",
                    "signature": "failed(): bool",
                    "doc": "Whether the transport failed before any status came back.",
                    "shapes": [],
                    "params": [],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "ok",
                    "static": false,
                    "visibility": "public",
                    "signature": "ok(): bool",
                    "doc": "A response arrived and it was a 2xx.",
                    "shapes": [],
                    "params": [],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "json",
                    "static": false,
                    "visibility": "public",
                    "signature": "json(): mixed",
                    "doc": "The body decoded as JSON, or null when it is not JSON.",
                    "shapes": [],
                    "params": [],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "header",
                    "static": false,
                    "visibility": "public",
                    "signature": "header(string $name): ?string",
                    "doc": "One header by any spelling of its name; a repeated header's values joined with \", \".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "cookie",
                    "static": false,
                    "visibility": "public",
                    "signature": "cookie(string $name): ?string",
                    "doc": "One cookie's value from the Set-Cookie headers, percent-decoded; the last one set wins.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "throw",
                    "static": false,
                    "visibility": "public",
                    "signature": "throw(): self",
                    "doc": "This exchange when it is ok(), otherwise a RequestFailed exception\n(a RuntimeException) carrying it, for callers who would rather catch\nthan check.",
                    "shapes": [],
                    "params": [],
                    "line": 75,
                    "end": 82
                }
            ]
        },
        {
            "name": "Minn\\Http\\Failure",
            "short": "Failure",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Failure.php",
            "lines": 207,
            "doc": "What the public sees when the engine cannot answer: a plain page with no\ndetail, while the detail goes to the log. Installed once per request,\nit sets PHP's error settings from the debug constants (display stays off\nunless WP_DEBUG and WP_DEBUG_DISPLAY ask for it) and catches the fatal\nerrors PHP would otherwise print.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html",
                "Minn\\Http",
                "Minn\\Http\\Response",
                "Minn\\Runtime\\DebugMode"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\Maintenance",
                "Minn\\Runtime\\Plugins"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FATAL",
                    "value": "4437",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "recorder",
                    "type": "mixed",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "display",
                    "type": "bool",
                    "readonly": false,
                    "static": true,
                    "doc": "Whether errors display for this request: display_errors, once the debug constants set it.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "armed",
                    "type": "bool",
                    "readonly": false,
                    "static": true,
                    "doc": "Whether a failure right now may be recorded against an extension: only while the extensions boot.",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "armRecovery",
                    "static": true,
                    "visibility": "public",
                    "signature": "armRecovery(): void",
                    "doc": "Opens the window in which a failure is an extension's fault: while\nthe plugins and the theme's functions file load and the boot actions\nfire, code that fails fails for every visitor, so pausing it heals\nthe site. A failure after that (a route, a shortcode, a template)\nanswers to one request's input and is never grounds for a pause;\nit is logged and the request ends in the error page.",
                    "shapes": [],
                    "params": [],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "disarmRecovery",
                    "static": true,
                    "visibility": "public",
                    "signature": "disarmRecovery(): void",
                    "doc": "Closes the window armRecovery() opened.",
                    "shapes": [],
                    "params": [],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "onFatal",
                    "static": true,
                    "visibility": "public",
                    "signature": "onFatal(callable $recorder): void",
                    "doc": "What to do with a fatal beyond showing the page: the engine records\nthe extension it came from so the next request loads without it.\nInstalled once the runtime is up, since it needs the database.",
                    "shapes": [
                        "@param callable(array{type:int,file:string,line:int,message:string}): void $recorder"
                    ],
                    "params": [
                        {
                            "name": "recorder",
                            "type": "callable",
                            "shape": "callable(array{type:int,file:string,line:int,message:string}): void",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": true,
                    "visibility": "public",
                    "signature": "install(array $constants, array $server): void",
                    "doc": "Sets PHP's error settings from the debug constants as the reference's\nboot does (Runtime\\DebugMode), and installs the error handlers. With\nWP_DEBUG off, or for a request that answers a machine, errors never\ndisplay. In the first case the reference leaves php.ini's setting;\nthe engine never shows a visitor PHP's errors. Detail is shown only\nwhile display_errors is on.",
                    "shapes": [
                        "@param array<string, mixed> $constants the debug and request constants, by name",
                        "@param array<string, mixed> $server the request's server variables"
                    ],
                    "params": [
                        {
                            "name": "constants",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the debug and request constants, by name"
                        },
                        {
                            "name": "server",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the request's server variables"
                        }
                    ],
                    "line": 71,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "report",
                    "static": true,
                    "visibility": "public",
                    "signature": "report(Throwable $error): Minn\\Http\\Response",
                    "doc": "Logs the cause; the page says only that something went wrong.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "Throwable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "reportJson",
                    "static": true,
                    "visibility": "public",
                    "signature": "reportJson(Throwable $error): Minn\\Http\\Response",
                    "doc": "The same, for a request that asked for JSON: a client that speaks REST\nis answered in REST, never handed the HTML error page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "Throwable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "internal",
                    "static": true,
                    "visibility": "public",
                    "signature": "internal(): Minn\\Http\\Response",
                    "doc": "The 500 page.",
                    "shapes": [],
                    "params": [],
                    "line": 151,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "databaseUnavailable",
                    "static": true,
                    "visibility": "public",
                    "signature": "databaseUnavailable(): Minn\\Http\\Response",
                    "doc": "The 503 page the reference shows when the database cannot be reached.",
                    "shapes": [],
                    "params": [],
                    "line": 158,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "maintenance",
                    "static": true,
                    "visibility": "public",
                    "signature": "maintenance(): Minn\\Http\\Response",
                    "doc": "The 503 page while maintenance mode holds; monitors read the status, the retry hint, and the title.",
                    "shapes": [],
                    "params": [],
                    "line": 188,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "detailed",
                    "static": true,
                    "visibility": "public",
                    "signature": "detailed(string $class, string $message, string $file, int $line): Minn\\Http\\Response",
                    "doc": "The same page with the cause on it, for a site that asked to see\nerrors. Only ever reached when WP_DEBUG_DISPLAY (or WP_DEBUG) is on:\na site that has not asked never learns this much from a response.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "line",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "discardOutput",
                    "static": true,
                    "visibility": "private",
                    "signature": "discardOutput(): void",
                    "doc": "Whatever a half-finished render left in the output buffers goes; the error page must stand alone.",
                    "shapes": [],
                    "params": [],
                    "line": 93,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "note",
                    "static": true,
                    "visibility": "private",
                    "signature": "note(Throwable $error): void",
                    "doc": "Logs the failure, clears whatever a half-finished render left, and offers it to recovery.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "Throwable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": true,
                    "visibility": "private",
                    "signature": "record(array $error): void",
                    "doc": "Hands the failure to the recorder, and never lets recovery itself\ntake the request down: a site that cannot record a pause should\nstill answer with the error page.",
                    "shapes": [
                        "@param array{type: int, file: string, line: int, message: string} $error"
                    ],
                    "params": [
                        {
                            "name": "error",
                            "type": "array",
                            "shape": "array{type: int, file: string, line: int, message: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "dropin",
                    "static": true,
                    "visibility": "private",
                    "signature": "dropin(string $file): Minn\\Http\\Response",
                    "doc": "A drop-in's own page: what it prints, under the status it set (200\nwhen it set none) and only the headers it sent itself, as the\nreference serves db-error.php when its database is away.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": true,
                    "visibility": "private",
                    "signature": "page(int $status, string $title, string $text, string $detail = ''): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "detail",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 223
                }
            ]
        },
        {
            "name": "Minn\\Http\\Fake",
            "short": "Fake",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Fake.php",
            "lines": 94,
            "doc": "Answers requests in place of the network, and keeps what was sent. A test\nmakes one and hands its client to the code it tests:\n\n$fake = new Fake(['api.example.com/*' => ['ok' => true]]);\n$result = (new StatusCheck($fake->http()))->run();\n$fake->sent('api.example.com/status');   // the requests that went there\n\nOnly that client is answered, so there is nothing to put back and nothing\nelse in the process sees the fake.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Exchange",
                "Minn\\Http\\Outbound",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Http"
            ],
            "constructor": {
                "signature": "__construct(array $answers = array ( ))",
                "doc": "Keys are URL patterns (* matches anything; the scheme and query may be\nleft off); values are an array (sent as JSON), a string (the body), a\nstatus code, an Exchange from reply(), or a closure taking the\nOutbound and returning one of those. A request no pattern matches\nfails as if nothing were listening.",
                "shapes": [
                    "@param array<string, mixed> $answers"
                ],
                "params": [
                    {
                        "name": "answers",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": "array ( )",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 36,
                "end": 38
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "sent",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "answers",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "http",
                    "static": false,
                    "visibility": "public",
                    "signature": "http(array $within = array ( )): Minn\\Http",
                    "doc": "A client this fake answers, bound to $within as an extension's is by\nits needs.http. The destination rules still run, but names are not resolved.",
                    "shapes": [
                        "@param list<string> $within"
                    ],
                    "params": [
                        {
                            "name": "within",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "answer",
                    "static": false,
                    "visibility": "public",
                    "signature": "answer(Minn\\Http\\Outbound $request): Minn\\Http\\Exchange",
                    "doc": "The answer for one request, which is recorded as sent.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "sent",
                    "static": false,
                    "visibility": "public",
                    "signature": "sent(string $pattern = '*'): array",
                    "doc": "The requests sent so far, oldest first; with a pattern, only those whose URL matches it.",
                    "shapes": [
                        "@return list<Outbound>"
                    ],
                    "params": [
                        {
                            "name": "pattern",
                            "type": "string",
                            "shape": "",
                            "default": "'*'",
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "reply",
                    "static": true,
                    "visibility": "public",
                    "signature": "reply(array|string $body = '', int $status = 200, array $headers = array ( )): Minn\\Http\\Exchange",
                    "doc": "A response made by hand, for a fake to answer with. An array body is sent as JSON.",
                    "shapes": [
                        "@param array<string, string|list<string>> $headers name => value; Set-Cookie values become cookies"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array|string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "200",
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "array<string, string|list<string>>",
                            "default": "array ( )",
                            "doc": "name => value; Set-Cookie values become cookies"
                        }
                    ],
                    "line": 78,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "matches",
                    "static": true,
                    "visibility": "public",
                    "signature": "matches(string $pattern, string $url): bool",
                    "doc": "Whether a URL matches a pattern in which * stands for anything; the scheme and the query string may be left off.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "pattern",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "exchange",
                    "static": true,
                    "visibility": "private",
                    "signature": "exchange(mixed $answer, string $url): Minn\\Http\\Exchange",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "answer",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 114
                }
            ]
        },
        {
            "name": "Minn\\Http\\Ipv6",
            "short": "Ipv6",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Ipv6.php",
            "lines": 62,
            "doc": "IPv6 addresses as text: written out in full (eight groups, or six and an\nIPv4 tail), compressed (\"::\" for the longest run of zero groups, the\nfirst when two tie), and checked. Zone suffixes (\"%eth0\") do not pass.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "expand",
                    "static": true,
                    "visibility": "public",
                    "signature": "expand(string $ip): string",
                    "doc": "The address with \"::\" expanded into zero groups.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "compress",
                    "static": true,
                    "visibility": "public",
                    "signature": "compress(string $ip): string",
                    "doc": "The address with leading zeros dropped from all-digit groups and the longest zero run as \"::\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "valid",
                    "static": true,
                    "visibility": "public",
                    "signature": "valid(string $ip): bool",
                    "doc": "Whether the text is an IPv6 address (with an optional IPv4 tail).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 72
                }
            ]
        },
        {
            "name": "Minn\\Http\\IriParts",
            "short": "IriParts",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/IriParts.php",
            "lines": 138,
            "doc": "An IRI (a URL that may carry non-ASCII text) split into its parts and\nwritten back normalized: scheme and host in lower case, a scheme's\ndefault port dropped, dot segments removed, and every character a URL\nmay not hold percent-encoded. The IRI form keeps non-ASCII characters;\nthe URI form encodes them too.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(?string $scheme, ?string $userinfo, ?string $host, ?int $port, string $path, ?string $query, ?string $fragment)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "scheme",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "userinfo",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "host",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "port",
                        "type": "?int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "path",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "query",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "fragment",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 27
            },
            "cases": [],
            "constants": [
                {
                    "name": "PORTS",
                    "value": "array (   'acap' => 674,   'dict' => 2628,   'file' => NULL,   'http' => 80,   'https' => 443, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "scheme",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "userinfo",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "host",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "port",
                    "type": "?int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "path",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "query",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "fragment",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $iri): self",
                    "doc": "The parts of an IRI (RFC 3986 appendix B).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "iri",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "valid",
                    "static": false,
                    "visibility": "public",
                    "signature": "valid(): bool",
                    "doc": "Whether the parts make a well-formed IRI: a valid scheme when there is one, no \"//\" path without an authority.",
                    "shapes": [],
                    "params": [],
                    "line": 49,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "resolve",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolve(self $ref): ?self",
                    "doc": "The reference resolved against this base (RFC 3986 section 5.2), or null when the base has no scheme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ref",
                            "type": "self",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "withHost",
                    "static": false,
                    "visibility": "public",
                    "signature": "withHost(?string $host): self",
                    "doc": "The same IRI with another host.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "host",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "withPath",
                    "static": false,
                    "visibility": "public",
                    "signature": "withPath(string $path): self",
                    "doc": "The same IRI with another path.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "toIri",
                    "static": false,
                    "visibility": "public",
                    "signature": "toIri(): string",
                    "doc": "The normalized IRI: non-ASCII characters stay as they are.",
                    "shapes": [],
                    "params": [],
                    "line": 89,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "toUri",
                    "static": false,
                    "visibility": "public",
                    "signature": "toUri(): string",
                    "doc": "The normalized URI: non-ASCII characters percent-encoded too.",
                    "shapes": [],
                    "params": [],
                    "line": 95,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": false,
                    "visibility": "private",
                    "signature": "write(string $keep): string",
                    "doc": "The text, with $keep naming the extra byte ranges left unencoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "keep",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "mergePath",
                    "static": false,
                    "visibility": "private",
                    "signature": "mergePath(string $path): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "removeDots",
                    "static": true,
                    "visibility": "private",
                    "signature": "removeDots(string $path): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "private",
                    "signature": "encode(string $text, string $allowed, string $keep): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "keep",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 150
                }
            ]
        },
        {
            "name": "Minn\\Http\\Kernel",
            "short": "Kernel",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Kernel.php",
            "lines": 38,
            "doc": "The edge. Turns a request into a response through the router and turns\na RestError thrown anywhere underneath into the WordPress error shape.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Router",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Router $router)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "router",
                        "type": "Minn\\Http\\Router",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 17
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "router",
                    "type": "Minn\\Http\\Router",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "handle",
                    "static": false,
                    "visibility": "public",
                    "signature": "handle(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "Routes the request; a thrown failure becomes its response, and null means no route matched.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "harden",
                    "static": true,
                    "visibility": "private",
                    "signature": "harden(Minn\\Http\\Request $request, Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "Headers every response carries: no content sniffing anywhere; the\nsign-in and admin pages refuse framing (both headers), keep their\nreferrer to themselves and are never cached, as the reference's do.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 49
                }
            ]
        },
        {
            "name": "Minn\\Http\\LegacyHeaders",
            "short": "LegacyHeaders",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/LegacyHeaders.php",
            "lines": 60,
            "doc": "WP_Http's legacy readers, kept for plugins that still call them (probe\nhttp-classes). They read a header block the old way, and decode a chunked\nbody with the reference's quirk. RawResponse does both properly for the\nengine's own requests.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(array|string $headers): array",
                    "doc": "A header block (a string, its folded lines joined, or a list of lines)\nread into the last status line's code and message, lower-cased\nheaders (a repeated one as a list) and the Set-Cookie values. Each\nstatus line starts the headers over.",
                    "shapes": [
                        "@param string|list<string> $headers",
                        "@return array{response: array{code: int, message: string}, headers: array<string, string|list<string>>, cookies: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "headers",
                            "type": "array|string",
                            "shape": "string|list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "dechunk",
                    "static": true,
                    "visibility": "public",
                    "signature": "dechunk(string $body): string",
                    "doc": "A chunked body decoded as the reference's WP_Http::chunkTransferDecode\ndecodes one. The CRLF after a chunk is not stepped over, so it decodes\nonly when chunks run into each other and a final 0 ends the body; any\nother shape comes back as it was.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 71
                }
            ]
        },
        {
            "name": "Minn\\Http\\Location",
            "short": "Location",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Location.php",
            "lines": 85,
            "doc": "Where a redirect leads: a Location header made absolute against the URL that sent it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Destination"
            ],
            "usedBy": [
                "Minn\\Http",
                "Minn\\Login\\LoginController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(string $location): string",
                    "doc": "A redirect's address made safe, as wp_sanitize_redirect() makes it\n(probe security-parity): spaces as %20, whole UTF-8 sequences\nURL-encoded, any other character outside the URL set dropped, and an\nencoded CR or LF taken out until none is left. Other encoded control\ncharacters stay, as they do on the reference.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "resolve",
                    "static": true,
                    "visibility": "public",
                    "signature": "resolve(string $base, string $location): string",
                    "doc": "The absolute URL $location names, read against $base as RFC 3986\nreads a reference: a scheme keeps it as written, \"//\" takes the\nbase's scheme, a fragment or query alone keeps the base's path, and a\nrelative path joins the base's directory with \".\" and \"..\" resolved.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "sameOrigin",
                    "static": true,
                    "visibility": "public",
                    "signature": "sameOrigin(string $one, string $two): bool",
                    "doc": "Whether two URLs share scheme, host, and port, so credentials may follow from one to the other.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "one",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "two",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "withoutDotSegments",
                    "static": true,
                    "visibility": "private",
                    "signature": "withoutDotSegments(string $path): string",
                    "doc": "A path with its \".\" and \"..\" segments resolved (RFC 3986 remove_dot_segments).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 80
                }
            ]
        },
        {
            "name": "Minn\\Http\\Matched",
            "short": "Matched",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Matched.php",
            "lines": 15,
            "doc": "A route the router matched to a request and whose policy it judged: the\nroute, the object and method that answer it, the pattern's captures, and\nevery method the same handler answers on that pattern (the reference\nlists POST, PUT and PATCH together for one edit handler).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Route"
            ],
            "usedBy": [
                "Minn\\Http\\Envelope",
                "Minn\\Http\\Router",
                "Minn\\Rest\\RuntimeEnvelope"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Route $route, object $handler, string $method, array $captures, array $methods)",
                "doc": "",
                "shapes": [
                    "@param array<string, string> $captures",
                    "@param list<string> $methods"
                ],
                "params": [
                    {
                        "name": "route",
                        "type": "Minn\\Http\\Route",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "handler",
                        "type": "object",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "method",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "captures",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "methods",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "route",
                    "type": "Minn\\Http\\Route",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "handler",
                    "type": "object",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "method",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "captures",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "methods",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Http\\MediaType",
            "short": "MediaType",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/MediaType.php",
            "lines": 18,
            "doc": "Reading the media types a request names in its Accept and Content-Type headers.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Runtime\\DebugMode"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "json",
                    "static": true,
                    "visibility": "public",
                    "signature": "json(string $types): bool",
                    "doc": "Whether a list of media types names JSON: application/json, or any\napplication/…+json vendor type, parameters and case ignored\n(wp_is_json_media_type(), probe load-remaining).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "types",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 24
                }
            ]
        },
        {
            "name": "Minn\\Http\\Method",
            "short": "Method",
            "namespace": "Minn\\Http",
            "kind": "enum",
            "file": "public/minn/src/Minn/Http/Method.php",
            "lines": 33,
            "doc": "",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Engine",
                "Minn\\Front\\AssetsController",
                "Minn\\Front\\Canonical",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\Redirects",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Request",
                "Minn\\Http\\Route",
                "Minn\\Http\\Router",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\AjaxController",
                "Minn\\Theme\\MainQueryBridge"
            ],
            "constructor": null,
            "cases": [
                {
                    "name": "Get",
                    "value": "GET",
                    "doc": ""
                },
                {
                    "name": "Head",
                    "value": "HEAD",
                    "doc": ""
                },
                {
                    "name": "Post",
                    "value": "POST",
                    "doc": ""
                },
                {
                    "name": "Put",
                    "value": "PUT",
                    "doc": ""
                },
                {
                    "name": "Patch",
                    "value": "PATCH",
                    "doc": ""
                },
                {
                    "name": "Delete",
                    "value": "DELETE",
                    "doc": ""
                },
                {
                    "name": "Options",
                    "value": "OPTIONS",
                    "doc": ""
                },
                {
                    "name": "Any",
                    "value": "*",
                    "doc": "For a route that accepts every method and sorts them out itself."
                }
            ],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "fromName",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromName(string $name): self",
                    "doc": "The verb for a name, GET when the name is unknown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "matches",
                    "static": false,
                    "visibility": "public",
                    "signature": "matches(self $declared): bool",
                    "doc": "HEAD is served by GET handlers; the kernel drops the body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "declared",
                            "type": "self",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "canonicalRedirects",
                    "static": false,
                    "visibility": "public",
                    "signature": "canonicalRedirects(): bool",
                    "doc": "Canonical redirects (trailing slash, pretty-URL mapping, 404 guessing)\nrun only for reads; every other method renders the URL as typed.",
                    "shapes": [],
                    "params": [],
                    "line": 35,
                    "end": 38
                }
            ]
        },
        {
            "name": "Minn\\Http\\Outbound",
            "short": "Outbound",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Outbound.php",
            "lines": 46,
            "doc": "One outgoing HTTP request, normalised: the transport needs nothing else.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Http",
                "Minn\\Http\\Destination",
                "Minn\\Http\\Fake",
                "Minn\\Http\\Transport"
            ],
            "constructor": {
                "signature": "__construct(string $method, string $url, array $headers = array ( ), ?string $body = NULL, float $timeout = 5.0, int $redirects = 5, bool $verifySsl = true, string $userAgent = '', ?string $caInfo = NULL, bool $blocking = true, ?Closure $prepare = NULL, ?float $connectTimeout = NULL, ?int $maxBytes = NULL)",
                "doc": "",
                "shapes": [
                    "@param list<string> $headers \"Name: value\" lines",
                    "@param (Closure(\\CurlHandle): void)|null $prepare a last word on the curl handle before it is sent"
                ],
                "params": [
                    {
                        "name": "method",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "headers",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": "\"Name: value\" lines"
                    },
                    {
                        "name": "body",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "timeout",
                        "type": "float",
                        "shape": "",
                        "default": "5.0",
                        "doc": ""
                    },
                    {
                        "name": "redirects",
                        "type": "int",
                        "shape": "",
                        "default": "5",
                        "doc": ""
                    },
                    {
                        "name": "verifySsl",
                        "type": "bool",
                        "shape": "",
                        "default": "true",
                        "doc": ""
                    },
                    {
                        "name": "userAgent",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "caInfo",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "blocking",
                        "type": "bool",
                        "shape": "",
                        "default": "true",
                        "doc": ""
                    },
                    {
                        "name": "prepare",
                        "type": "?Closure",
                        "shape": "(Closure(\\CurlHandle): void)|null",
                        "default": "NULL",
                        "doc": "a last word on the curl handle before it is sent"
                    },
                    {
                        "name": "connectTimeout",
                        "type": "?float",
                        "shape": "float|null",
                        "default": "NULL",
                        "doc": "seconds to connect, when not the whole timeout"
                    },
                    {
                        "name": "maxBytes",
                        "type": "?int",
                        "shape": "int|null",
                        "default": "NULL",
                        "doc": "the largest body accepted; a longer one fails the exchange"
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "method",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "headers",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "timeout",
                    "type": "float",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "redirects",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "verifySsl",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "userAgent",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "caInfo",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "blocking",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "prepare",
                    "type": "?Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "connectTimeout",
                    "type": "?float",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "maxBytes",
                    "type": "?int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "to",
                    "static": false,
                    "visibility": "public",
                    "signature": "to(string $url, string $method, ?string $body, array $headers): self",
                    "doc": "The same request sent somewhere else, as the next hop of a redirect.",
                    "shapes": [
                        "@param list<string> $headers \"Name: value\" lines"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "method",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "\"Name: value\" lines"
                        }
                    ],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "preparing",
                    "static": false,
                    "visibility": "public",
                    "signature": "preparing(Closure $prepare): self",
                    "doc": "The same request with a last word on the curl handle, run after any it already has.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "prepare",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 54
                }
            ]
        },
        {
            "name": "Minn\\Http\\Policy",
            "short": "Policy",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Policy.php",
            "lines": 115,
            "doc": "What a route requires of its caller, as data on the route: the router\nenforces it before the handler runs, so a grep over the attributes is\nthe authorization surface. The two refusals are the reference's: a\ncaller who is not signed in gets the sign-in code (401), a signed-in\ncaller who lacks the capability gets the refusal code (403); how a bad\nnonce is answered belongs to whoever judges the policy. A policy that\nnames a subject has the record looked up first, and answers the\nrecord's 404 before either refusal, which is the reference's order.\n\nWritten inline in the attribute with `new`, which is what an attribute\nargument allows: `policy: new Policy(Access::Cap, 'upload_files',\nrefuse: 'rest_cannot_create', message: '...')`.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Access",
                "Minn\\Http\\Subject"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Engine",
                "Minn\\Front\\AssetsController",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Route",
                "Minn\\Http\\RouteRow",
                "Minn\\Http\\Router",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\AjaxController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Access $access = Minn\\Http\\Access::Public, ?string $cap = NULL, array $caps = array ( ), ?string $param = NULL, string $signIn = 'rest_not_logged_in', string $signInMessage = 'You are not currently logged in.', string $refuse = 'rest_forbidden', string $message = 'Sorry, you are not allowed to do that.', ?Minn\\Http\\Policy $edit = NULL, ?Minn\\Http\\Subject $subject = NULL, ?string $missing = NULL, ?string $missingMessage = NULL, int $signInStatus = 401, ?string $verb = NULL, ?array $opener = NULL)",
                "doc": "",
                "shapes": [
                    "@param list<string> $caps further capabilities every one of which the caller must hold"
                ],
                "params": [
                    {
                        "name": "access",
                        "type": "Minn\\Http\\Access",
                        "shape": "",
                        "default": "Minn\\Http\\Access::Public",
                        "doc": ""
                    },
                    {
                        "name": "cap",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "caps",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "array ( )",
                        "doc": "further capabilities every one of which the caller must hold"
                    },
                    {
                        "name": "param",
                        "type": "?string",
                        "shape": "string|null",
                        "default": "NULL",
                        "doc": "the pattern capture holding the object id an Own policy judges, or the subject's id"
                    },
                    {
                        "name": "signIn",
                        "type": "string",
                        "shape": "",
                        "default": "'rest_not_logged_in'",
                        "doc": ""
                    },
                    {
                        "name": "signInMessage",
                        "type": "string",
                        "shape": "",
                        "default": "'You are not currently logged in.'",
                        "doc": ""
                    },
                    {
                        "name": "refuse",
                        "type": "string",
                        "shape": "",
                        "default": "'rest_forbidden'",
                        "doc": ""
                    },
                    {
                        "name": "message",
                        "type": "string",
                        "shape": "",
                        "default": "'Sorry, you are not allowed to do that.'",
                        "doc": ""
                    },
                    {
                        "name": "edit",
                        "type": "?Minn\\Http\\Policy",
                        "shape": "Policy|null",
                        "default": "NULL",
                        "doc": "a policy judged as well when the request asks for the edit context"
                    },
                    {
                        "name": "subject",
                        "type": "?Minn\\Http\\Subject",
                        "shape": "Subject|null",
                        "default": "NULL",
                        "doc": "the record the capture names, looked up before the caller is judged"
                    },
                    {
                        "name": "missing",
                        "type": "?string",
                        "shape": "string|null",
                        "default": "NULL",
                        "doc": "the 404 code when the subject does not exist; the subject's own when null"
                    },
                    {
                        "name": "missingMessage",
                        "type": "?string",
                        "shape": "string|null",
                        "default": "NULL",
                        "doc": "its message; the subject's own when null"
                    },
                    {
                        "name": "signInStatus",
                        "type": "int",
                        "shape": "",
                        "default": "401",
                        "doc": "the status a signed-out caller is refused with (the reference answers some routes' signed-out writes 404, not 401)"
                    },
                    {
                        "name": "verb",
                        "type": "?string",
                        "shape": "string|null",
                        "default": "NULL",
                        "doc": "what a Type or Taxonomy route does (create, edit, delete), judged with the type's or taxonomy's own capabilities"
                    },
                    {
                        "name": "opener",
                        "type": "?array",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 33,
                "end": 50
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "access",
                    "type": "Minn\\Http\\Access",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "cap",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "caps",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "param",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "signIn",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "signInMessage",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "refuse",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "message",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "edit",
                    "type": "?Minn\\Http\\Policy",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "subject",
                    "type": "?Minn\\Http\\Subject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "missing",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "missingMessage",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "signInStatus",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "verb",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "opener",
                    "type": "?array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "isPublic",
                    "static": false,
                    "visibility": "public",
                    "signature": "isPublic(): bool",
                    "doc": "Whether the route is open to anyone with nothing to look up, so the gate need not run at all.",
                    "shapes": [],
                    "params": [],
                    "line": 53,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "missingCode",
                    "static": false,
                    "visibility": "public",
                    "signature": "missingCode(): string",
                    "doc": "The 404 code a missing subject earns.",
                    "shapes": [],
                    "params": [],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "missingText",
                    "static": false,
                    "visibility": "public",
                    "signature": "missingText(): string",
                    "doc": "The 404 message a missing subject earns.",
                    "shapes": [],
                    "params": [],
                    "line": 65,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "capabilities",
                    "static": false,
                    "visibility": "public",
                    "signature": "capabilities(): array",
                    "doc": "Every capability the policy asks for by name, the one on the object\nincluded, so a listing can show what a route takes.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 76,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "toArray(): array",
                    "doc": "The policy as data, for the route catalogue. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 86,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "describe",
                    "static": false,
                    "visibility": "public",
                    "signature": "describe(): string",
                    "doc": "The policy in one line, for the route index and the docs.",
                    "shapes": [],
                    "params": [],
                    "line": 116,
                    "end": 134
                }
            ]
        },
        {
            "name": "Minn\\Http\\Punycode",
            "short": "Punycode",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Punycode.php",
            "lines": 103,
            "doc": "Internationalized host names in ASCII: each label that is not ASCII is\nwritten as \"xn--\" plus its Punycode (RFC 3492) and must stay under 64\nbytes. Labels keep their case: there is no Nameprep step, as on the\nreference (\"Bücher\" becomes \"xn--Bcher-kva\").",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "PREFIX",
                    "value": "'xn--'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "MAX_LENGTH",
                    "value": "64",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "BASE",
                    "value": "36",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TMIN",
                    "value": "1",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TMAX",
                    "value": "26",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SKEW",
                    "value": "38",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "DAMP",
                    "value": "700",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "INITIAL_BIAS",
                    "value": "72",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "INITIAL_N",
                    "value": "128",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "host",
                    "static": true,
                    "visibility": "public",
                    "signature": "host(string $hostname): string",
                    "doc": "A whole host name, label by label.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hostname",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "label",
                    "static": true,
                    "visibility": "public",
                    "signature": "label(string $text): string",
                    "doc": "One label in ASCII.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "public",
                    "signature": "encode(string $input): string",
                    "doc": "The Punycode of a UTF-8 string (without the prefix).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "input",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "digits",
                    "static": true,
                    "visibility": "private",
                    "signature": "digits(int $q, int $bias): string",
                    "doc": "One delta as variable-length digits.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "q",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bias",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "digit",
                    "static": true,
                    "visibility": "private",
                    "signature": "digit(int $d): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "adapt",
                    "static": true,
                    "visibility": "private",
                    "signature": "adapt(int $delta, int $points, int $damp): int",
                    "doc": "The next bias; the first delta is damped by DAMP, later ones by 2.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "delta",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "points",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "damp",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 116
                }
            ]
        },
        {
            "name": "Minn\\Http\\RawResponse",
            "short": "RawResponse",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/RawResponse.php",
            "lines": 105,
            "doc": "An HTTP response as text, the way the Requests library hands it from\ntransport to parser: the status line and headers, a blank line, the\nbody. Built from an exchange, split back up, chunked bodies joined and\ncompressed ones inflated.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Exchange"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "fromExchange",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromExchange(Minn\\Http\\Exchange $exchange): string",
                    "doc": "The exchange as raw response text: its status line, header lines, a blank line, the body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "exchange",
                            "type": "Minn\\Http\\Exchange",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 22
                },
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $raw): array",
                    "doc": "The text split into protocol, status, header pairs (folded lines\njoined) and body.",
                    "shapes": [
                        "@return array{protocol: float, status: int, headers: list<array{0: string, 1: string}>, body: string}"
                    ],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "parseHead",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseHead(string $head): array",
                    "doc": "A head alone (the body went to a file): protocol, status, header pairs, and an empty body.",
                    "shapes": [
                        "@return array{protocol: float, status: int, headers: list<array{0: string, 1: string}>, body: string}"
                    ],
                    "params": [
                        {
                            "name": "head",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "unchunk",
                    "static": true,
                    "visibility": "public",
                    "signature": "unchunk(string $body): string",
                    "doc": "A chunked body joined; text that is not chunked comes back as it was.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "inflateLoose",
                    "static": true,
                    "visibility": "public",
                    "signature": "inflateLoose(string $data): string|false",
                    "doc": "A gzip body inflated past its header fields (extra, name, comment,\nheader CRC) and trailer, or a zlib one past its two-byte header, as\nWP_Http_Encoding::compatible_gzinflate reads them; false when neither\ninflates.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "inflate",
                    "static": true,
                    "visibility": "public",
                    "signature": "inflate(string $data): string",
                    "doc": "A gzip or zlib body inflated; anything else (raw deflate included) comes back as it was.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 118
                }
            ]
        },
        {
            "name": "Minn\\Http\\Refusal",
            "short": "Refusal",
            "namespace": "Minn\\Http",
            "kind": "interface",
            "file": "public/minn/src/Minn/Http/Refusal.php",
            "lines": 5,
            "doc": "A refusal a route judges after its arguments and before its policy: the\nreference turns some requests away at the head of its permission check,\nbefore it looks at the caller at all (a post created with an id).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Request"
            ],
            "usedBy": [
                "Minn\\Rest\\ExistingPost"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "refuse",
                    "static": true,
                    "visibility": "public",
                    "signature": "refuse(Minn\\Http\\Request $request): void",
                    "doc": "Throws the refusal when the request earns it; returns quietly otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 15
                }
            ]
        },
        {
            "name": "Minn\\Http\\Request",
            "short": "Request",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Request.php",
            "lines": 145,
            "doc": "An immutable picture of the incoming request. Built once from the PHP\nglobals at the edge; handlers only ever see this object.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Method",
                "Minn\\Http\\TrustedProxies",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\SignIn",
                "Minn\\Autoloader",
                "Minn\\Context",
                "Minn\\Engine",
                "Minn\\Extension\\Seams",
                "Minn\\Front\\AssetsController",
                "Minn\\Front\\AttachmentAddresses",
                "Minn\\Front\\Canonical",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\Redirects",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\SingleQueries",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Envelope",
                "Minn\\Http\\Kernel",
                "Minn\\Http\\Refusal",
                "Minn\\Http\\Router",
                "Minn\\Login\\LoginController",
                "Minn\\Media\\Upload",
                "Minn\\Ops\\Diagnostics",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\ExistingPost",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\AjaxController",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Runtime\\MenuEvents",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\PostSave",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Runtime\\UserEvents",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\FeedHeaders"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Method $method, string $path, array $query, array $headers, array $cookies, string $body, bool $secure, string $host, array $form = array ( ), array $files = array ( ), string $remoteAddress = '', array $server = array ( ))",
                "doc": "",
                "shapes": [
                    "@param array<string, string|array> $query",
                    "@param array<string, string> $headers lower-cased names",
                    "@param array<string, string> $cookies",
                    "@param array<string, mixed> $form decoded form fields, for bodies that are not JSON",
                    "@param array<string, array> $files uploaded files, keyed by field"
                ],
                "params": [
                    {
                        "name": "method",
                        "type": "Minn\\Http\\Method",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "path",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "query",
                        "type": "array",
                        "shape": "array<string, string|array>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "headers",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": "lower-cased names"
                    },
                    {
                        "name": "cookies",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "body",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "secure",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "host",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "form",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": "array ( )",
                        "doc": "decoded form fields, for bodies that are not JSON"
                    },
                    {
                        "name": "files",
                        "type": "array",
                        "shape": "array<string, array>",
                        "default": "array ( )",
                        "doc": "uploaded files, keyed by field"
                    },
                    {
                        "name": "remoteAddress",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "server",
                        "type": "array",
                        "shape": "",
                        "default": "array ( )",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 37
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "method",
                    "type": "Minn\\Http\\Method",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "path",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "query",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "headers",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "cookies",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "secure",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "host",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "form",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "files",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "remoteAddress",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "server",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "what the server says about itself: software, protocol, and address; diagnostics only",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromGlobals",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromGlobals(): self",
                    "doc": "The request PHP received, read once from the superglobals.",
                    "shapes": [],
                    "params": [],
                    "line": 40,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "json",
                    "static": false,
                    "visibility": "public",
                    "signature": "json(): array",
                    "doc": "The JSON body as an array, or the form fields when the body is empty or a form.",
                    "shapes": [],
                    "params": [],
                    "line": 82,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "withPath",
                    "static": false,
                    "visibility": "public",
                    "signature": "withPath(string $path): self",
                    "doc": "The same request addressed to another path (a REST route carried in ?rest_route=).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "query",
                    "static": false,
                    "visibility": "public",
                    "signature": "query(string $key, ?string $default = NULL): ?string",
                    "doc": "One query value as a string, or the default when it is absent or not a string.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "flag",
                    "static": false,
                    "visibility": "public",
                    "signature": "flag(string $key): bool",
                    "doc": "A query value read as the reference reads a boolean argument: true, 1, yes, on; anything else is false.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "flagged",
                    "static": false,
                    "visibility": "public",
                    "signature": "flagged(string $key): bool",
                    "doc": "A boolean the query or the body sets, as a DELETE may carry force in either (probes rest-posts-write, rest-terms-controller).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": false,
                    "visibility": "public",
                    "signature": "has(string $key): bool",
                    "doc": "Whether the query carries this key at all, even empty.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "header",
                    "static": false,
                    "visibility": "public",
                    "signature": "header(string $name): ?string",
                    "doc": "A request header by case-insensitive name, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "cookie",
                    "static": false,
                    "visibility": "public",
                    "signature": "cookie(string $name): ?string",
                    "doc": "A cookie's value, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 140,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "segments",
                    "static": false,
                    "visibility": "public",
                    "signature": "segments(): array",
                    "doc": "The path split into non-empty segments: \"/a/b/\" becomes [\"a\", \"b\"].",
                    "shapes": [],
                    "params": [],
                    "line": 146,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "queryStringWithout",
                    "static": false,
                    "visibility": "public",
                    "signature": "queryStringWithout(string ...$keys): string",
                    "doc": "The query string with the given keys removed, ready to append to a redirect.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "keys",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 156
                }
            ]
        },
        {
            "name": "Minn\\Http\\RequestFailed",
            "short": "RequestFailed",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/RequestFailed.php",
            "lines": 7,
            "doc": "Thrown by Exchange::throw() when no response arrived or it was not a 2xx; the exchange rides along.",
            "implements": [
                "Stringable",
                "Throwable"
            ],
            "extends": "RuntimeException",
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Exchange"
            ],
            "usedBy": [
                "Minn\\Http\\Exchange"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Exchange $reply, string $message)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "reply",
                        "type": "Minn\\Http\\Exchange",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "message",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 12,
                "end": 15
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "reply",
                    "type": "Minn\\Http\\Exchange",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Http\\RequestsNames",
            "short": "RequestsNames",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/RequestsNames.php",
            "lines": 18,
            "doc": "The Requests library's PSR-0 class names (Requests_Exception_HTTP_404,\nRequests_IDNAEncoder, ...) mapped to the PSR-4 names they stand for.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SEGMENTS",
                    "value": "array (   'http' => 'Http',   'idnaencoder' => 'IdnaEncoder',   'ipv6' => 'Ipv6',   'iri' => 'Iri',   'ssl' => 'Ssl',   'curl' => 'Curl',   'fsockopen' => 'Fsockopen',   'hooker' => 'HookManager',   'casesensitivedictionary' => 'CaseInsensitiveDictionary',   'caseinsensitivedictionary' => 'CaseInsensitiveDictionary',   'filterediterator' => 'FilteredIterator', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "modern",
                    "static": true,
                    "visibility": "public",
                    "signature": "modern(string $legacy): ?string",
                    "doc": "The namespaced name for a Requests_* name, or null when it is not one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "legacy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 27
                }
            ]
        },
        {
            "name": "Minn\\Http\\Response",
            "short": "Response",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Response.php",
            "lines": 133,
            "doc": "What a handler returns. Nothing is written to the client until the\nkernel calls send(), so a response can be inspected, wrapped, or\nreplaced on the way out. Work that belongs after the client has its\nanswer (a cron run a page found due) rides along as afterSend closures.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Auth\\AuthCookies",
                "Minn\\Auth\\SignIn",
                "Minn\\Engine",
                "Minn\\Front\\AssetsController",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\Maintenance",
                "Minn\\Front\\PrintedResponse",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Envelope",
                "Minn\\Http\\Failure",
                "Minn\\Http\\Kernel",
                "Minn\\Http\\Router",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\AjaxController",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\FrontLifecycle",
                "Minn\\Theme\\TemplateBuffer"
            ],
            "constructor": {
                "signature": "__construct(int $status = 200, array $headers = array ( ), string $body = '', array $cookies = array ( ), array $afterSend = array ( ))",
                "doc": "",
                "shapes": [
                    "@param array<string, string> $headers",
                    "@param list<array{0: string, 1: string, 2: array}> $cookies name, value, setcookie options",
                    "@param list<Closure(): void> $afterSend run once the response has been handed to the client"
                ],
                "params": [
                    {
                        "name": "status",
                        "type": "int",
                        "shape": "",
                        "default": "200",
                        "doc": ""
                    },
                    {
                        "name": "headers",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": "array ( )",
                        "doc": ""
                    },
                    {
                        "name": "body",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "cookies",
                        "type": "array",
                        "shape": "list<array{0: string, 1: string, 2: array}>",
                        "default": "array ( )",
                        "doc": "name, value, setcookie options"
                    },
                    {
                        "name": "afterSend",
                        "type": "array",
                        "shape": "list<Closure(): void>",
                        "default": "array ( )",
                        "doc": "run once the response has been handed to the client"
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "status",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "headers",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "cookies",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "afterSend",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(string $body, int $status = 200): self",
                    "doc": "An HTML response.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "200",
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "json",
                    "static": true,
                    "visibility": "public",
                    "signature": "json(mixed $payload, int $status = 200): self",
                    "doc": "A JSON response with the payload encoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "payload",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "200",
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "redirect",
                    "static": true,
                    "visibility": "public",
                    "signature": "redirect(string $location, int $status = 301): self",
                    "doc": "A redirect to a location.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "301",
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "withHeader",
                    "static": false,
                    "visibility": "public",
                    "signature": "withHeader(string $name, string $value): self",
                    "doc": "The same response with one header set, after those already set (one already there keeps its place).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "withoutHeader",
                    "static": false,
                    "visibility": "public",
                    "signature": "withoutHeader(string $name): self",
                    "doc": "The same response without one header.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "withCookie",
                    "static": false,
                    "visibility": "public",
                    "signature": "withCookie(string $name, string $value, array $options): self",
                    "doc": "The same response with a cookie to set.",
                    "shapes": [
                        "@param array<string, mixed> $options setcookie options: expires, path, secure, httponly, samesite"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "setcookie options: expires, path, secure, httponly, samesite"
                        }
                    ],
                    "line": 71,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "withoutBody",
                    "static": false,
                    "visibility": "public",
                    "signature": "withoutBody(): self",
                    "doc": "The same response with an empty body, the HEAD answer.",
                    "shapes": [],
                    "params": [],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "afterSend",
                    "static": false,
                    "visibility": "public",
                    "signature": "afterSend(Closure $work): self",
                    "doc": "The same response with work to run once the client has been answered. @param Closure(): void $work",
                    "shapes": [
                        "@param Closure(): void $work"
                    ],
                    "params": [
                        {
                            "name": "work",
                            "type": "Closure",
                            "shape": "Closure(): void",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "emitHeader",
                    "static": true,
                    "visibility": "public",
                    "signature": "emitHeader(string $line): void",
                    "doc": "One header line sent now, as plugin code sends one, ahead of the\nresponse's own (which win on a shared name). Nothing outside a web\nrequest, or once the head is out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "line",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "public",
                    "signature": "write(string $bytes): void",
                    "doc": "Bytes written to PHP's output now, so into whatever buffers are open:\nfor a page passed through buffers plugin code opened before it\n(Theme\\TemplateBuffer), whose handlers then see it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "sendHead",
                    "static": false,
                    "visibility": "public",
                    "signature": "sendHead(): void",
                    "doc": "Writes the status, the headers, and the cookies now, and nothing else:\nfor an answer that code outside the engine may finish on its own (an\najax handler that ends the request), which must find them already said.",
                    "shapes": [],
                    "params": [],
                    "line": 115,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "send",
                    "static": false,
                    "visibility": "public",
                    "signature": "send(): void",
                    "doc": "Writes the status, the headers, the cookies, and the body, ends the\nrequest for the client, then runs the after-send work in the same\nprocess (the server that can close the connection first does).",
                    "shapes": [],
                    "params": [],
                    "line": 131,
                    "end": 147
                }
            ]
        },
        {
            "name": "Minn\\Http\\Route",
            "short": "Route",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/Route.php",
            "lines": 75,
            "doc": "Declares a handler method as a route. The policy lives here, as\nmetadata the router enforces before the handler runs, so the\nauthorization surface of the engine is a grep away; a route with no\npolicy is one the ratchet in the style suite counts down. The parameter\nsets it reads live here too, judged before the policy is (the reference\nrefuses a bad argument before it refuses a caller), so the REST index can\ntell a client what a route takes as well as what it requires of them.\n\nPatterns: \"/wp/v2/posts/{id}\" captures one segment, \"{id:\\d+}\" constrains\nit, and \"/{path*}\" captures the rest of the path (slashes included).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Front\\AssetsController",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\SitemapController",
                "Minn\\Http\\Matched",
                "Minn\\Http\\RouteRow",
                "Minn\\Http\\Router",
                "Minn\\Login\\LoginController",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\Catalogue",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\AjaxController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Method $method, string $pattern, ?Minn\\Http\\Policy $policy = NULL, array $args = array ( ), bool $index = true, array $body = array ( ), ?string $name = NULL, ?string $params = NULL, ?string $refuse = NULL)",
                "doc": "",
                "shapes": [
                    "@param list<array<string, array<string, mixed>>> $args the parameter sets this route reads, from Args",
                    "@param list<array<string, array<string, mixed>>> $body the parameter sets this route reads from the JSON body, from Args or the shape that owns them"
                ],
                "params": [
                    {
                        "name": "method",
                        "type": "Minn\\Http\\Method",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "pattern",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "policy",
                        "type": "?Minn\\Http\\Policy",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "args",
                        "type": "array",
                        "shape": "list<array<string, array<string, mixed>>>",
                        "default": "array ( )",
                        "doc": "the parameter sets this route reads, from Args"
                    },
                    {
                        "name": "index",
                        "type": "bool",
                        "shape": "",
                        "default": "true",
                        "doc": "whether the route is listed in the REST index (a route the index spells itself is not)"
                    },
                    {
                        "name": "body",
                        "type": "array",
                        "shape": "list<array<string, array<string, mixed>>>",
                        "default": "array ( )",
                        "doc": "the parameter sets this route reads from the JSON body, from Args or the shape that owns them"
                    },
                    {
                        "name": "name",
                        "type": "?string",
                        "shape": "string|null",
                        "default": "NULL",
                        "doc": "the route's name in the catalogue; the handler's Class::method when null"
                    },
                    {
                        "name": "params",
                        "type": "?string",
                        "shape": "class-string<RouteParams>|null",
                        "default": "NULL",
                        "doc": "the parameters' source when they depend on the captures; $args otherwise"
                    },
                    {
                        "name": "refuse",
                        "type": "?string",
                        "shape": "class-string<Refusal>|null",
                        "default": "NULL",
                        "doc": "a refusal judged after the arguments and before the policy"
                    }
                ],
                "visibility": "public",
                "line": 32,
                "end": 43
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "method",
                    "type": "Minn\\Http\\Method",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "pattern",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "policy",
                    "type": "?Minn\\Http\\Policy",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "args",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "index",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "name",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "params",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "refuse",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "arguments",
                    "static": false,
                    "visibility": "public",
                    "signature": "arguments(array $captures = array ( )): array",
                    "doc": "The parameters this route accepts, as the REST index publishes them:\nfrom its params source for these captures (a capture the pattern fixes,\nsuch as {base:posts}, counts when none is given), or its fixed sets.",
                    "shapes": [
                        "@param array<string, string> $captures",
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "bodyArguments",
                    "static": false,
                    "visibility": "public",
                    "signature": "bodyArguments(): array",
                    "doc": "The parameters this route reads from the JSON body, validated before the caller is judged.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "regex",
                    "static": false,
                    "visibility": "public",
                    "signature": "regex(): string",
                    "doc": "The pattern as a regular expression with named captures.",
                    "shapes": [],
                    "params": [],
                    "line": 73,
                    "end": 95
                }
            ]
        },
        {
            "name": "Minn\\Http\\RouteMiss",
            "short": "RouteMiss",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/RouteMiss.php",
            "lines": 3,
            "doc": "A handler declining a request its pattern matched: the router swallows\nit and goes on to the next route, so a catch-all pattern can leave a\npath it does not own to whatever registers after it (a plugin's route\nunder the same namespace, say) instead of answering \"no route\" itself.",
            "implements": [
                "Stringable",
                "Throwable"
            ],
            "extends": "RuntimeException",
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Http\\Router",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\TermCollectionParams",
                "Minn\\Rest\\TermObject"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": []
        },
        {
            "name": "Minn\\Http\\RouteParams",
            "short": "RouteParams",
            "namespace": "Minn\\Http",
            "kind": "interface",
            "file": "public/minn/src/Minn/Http/RouteParams.php",
            "lines": 10,
            "doc": "The parameters a route takes when they depend on what its captures name\n(a post type's collection takes its own taxonomies, its own orderby\nvalues, whatever plugins add to it), rather than on a fixed set.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Rest\\PostCollectionParams",
                "Minn\\Rest\\TermCollectionParams",
                "Minn\\Rest\\UserCollectionParams"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "for",
                    "static": true,
                    "visibility": "public",
                    "signature": "for(array $captures): array",
                    "doc": "The route's parameters for these captures, as the index publishes them; none when the captures name nothing.",
                    "shapes": [
                        "@param array<string, string> $captures",
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 20
                }
            ]
        },
        {
            "name": "Minn\\Http\\RouteRow",
            "short": "RouteRow",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/RouteRow.php",
            "lines": 81,
            "doc": "One line of the route table: what a route is, who it is for, and what it\ntakes, read from the attribute and the handler method alone, so the table\ncan be built from the classes without a request, a database, or a site.\nThis is the row the REST index, the docs, and contracts/api/routes.json\nare written from.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Args",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Route"
            ],
            "usedBy": [
                "Minn\\Http\\Router",
                "Minn\\Rest\\Catalogue"
            ],
            "constructor": {
                "signature": "__construct(string $method, string $pattern, string $name, string $handler, string $summary, ?Minn\\Http\\Policy $policy, array $args, array $body, bool $index, ?string $params = NULL, string $regex = '')",
                "doc": "",
                "shapes": [
                    "@param array<string, array<string, mixed>> $args the query parameters the route reads",
                    "@param array<string, array<string, mixed>> $body the JSON body parameters it reads"
                ],
                "params": [
                    {
                        "name": "method",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "pattern",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "name",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "handler",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "summary",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "policy",
                        "type": "?Minn\\Http\\Policy",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "args",
                        "type": "array",
                        "shape": "array<string, array<string, mixed>>",
                        "default": null,
                        "doc": "the query parameters the route reads"
                    },
                    {
                        "name": "body",
                        "type": "array",
                        "shape": "array<string, array<string, mixed>>",
                        "default": null,
                        "doc": "the JSON body parameters it reads"
                    },
                    {
                        "name": "index",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "params",
                        "type": "?string",
                        "shape": "class-string<RouteParams>|null",
                        "default": "NULL",
                        "doc": "where the parameters come from when they depend on the path"
                    },
                    {
                        "name": "regex",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 36
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "method",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "pattern",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "name",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "handler",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "summary",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "policy",
                    "type": "?Minn\\Http\\Policy",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "args",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "index",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "params",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "regex",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(Minn\\Http\\Route $route, ReflectionMethod $method): self",
                    "doc": "The row for one attribute on one handler method; the name defaults to the handler.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "route",
                            "type": "Minn\\Http\\Route",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "method",
                            "type": "ReflectionMethod",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "argsFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "argsFor(string $route): array",
                    "doc": "The parameters as the index publishes them for one concrete route the\npattern takes (a {base} route's parameters are that base's).",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "toArray(): array",
                    "doc": "The row as data, for the JSON catalogue. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 73,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "summary",
                    "static": true,
                    "visibility": "private",
                    "signature": "summary(string $doc): string",
                    "doc": "The first sentence of a docblock, the way the API docs read it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "doc",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 95
                }
            ]
        },
        {
            "name": "Minn\\Http\\Router",
            "short": "Router",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Router.php",
            "lines": 260,
            "doc": "Matches a request to a #[Route] on one of the registered handler\nobjects, has the check refuse a bad argument, has the gate judge the\nroute's policy, and invokes the method with the request plus the named\npattern captures. That order is the reference's: an invalid parameter is\nanswered before the caller is looked at. The gate is the one\nthing a router cannot be built without: a policy nobody judges is a\nroute nobody may call.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Envelope",
                "Minn\\Http\\Matched",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\RouteMiss",
                "Minn\\Http\\RouteRow",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Http\\Kernel",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\EngineRoutes",
                "Minn\\Rest\\RouteCatalogue"
            ],
            "constructor": {
                "signature": "__construct(Closure $gate, ?Closure $check = NULL, ?Minn\\Http\\Envelope $envelope = NULL)",
                "doc": "",
                "shapes": [
                    "@param Closure(Policy $policy, Request $request, array<string, string> $captures): void $gate throws when the policy refuses the caller",
                    "@param Closure(Route $route, Request $request): void|null $check throws when a declared argument is missing or invalid; judged before the gate"
                ],
                "params": [
                    {
                        "name": "gate",
                        "type": "Closure",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "check",
                        "type": "?Closure",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "envelope",
                        "type": "?Minn\\Http\\Envelope",
                        "shape": "Envelope|null",
                        "default": "NULL",
                        "doc": "what runs around a matched route instead of the router throwing its refusals itself"
                    }
                ],
                "visibility": "public",
                "line": 31,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "routes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "gate",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "check",
                    "type": "?Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "envelope",
                    "type": "?Minn\\Http\\Envelope",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(object ...$handlers): self",
                    "doc": "Registers every #[Route] method of the given handlers; returns the router for chaining.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handlers",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "routes",
                    "static": false,
                    "visibility": "public",
                    "signature": "routes(): array",
                    "doc": "The routes that list in an index: pattern => methods. @return array<string, list<string>>",
                    "shapes": [
                        "@return array<string, list<string>>"
                    ],
                    "params": [],
                    "line": 54,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "table",
                    "static": false,
                    "visibility": "public",
                    "signature": "table(): array",
                    "doc": "Every registered route as a row: what it is, who it is for, what it\ntakes. The same rows Rest\\Catalogue reads from the classes alone.",
                    "shapes": [
                        "@return list<RouteRow>"
                    ],
                    "params": [],
                    "line": 71,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "allowed",
                    "static": false,
                    "visibility": "public",
                    "signature": "allowed(Minn\\Http\\Request $request): array",
                    "doc": "The methods the caller may use on this path, for the Allow header:\nevery route matching the path (a route with no captures that names\nthe path exactly claims it alone), its policy judged for the caller\nwithout dispatching. A route that states no policy counts for GET\nonly, until it states one. Empty when nothing matched or nothing\nis allowed, and the header is then left out, as the reference does.",
                    "shapes": [
                        "@return list<string> in the reference's order"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "matching",
                    "static": false,
                    "visibility": "public",
                    "signature": "matching(Minn\\Http\\Request $request): array",
                    "doc": "The routes a request's method and path match, policies unjudged, in\nthe order dispatch tries them, with their captures: what a batch\nreads to tell a route that does not take part from no route at all.",
                    "shapes": [
                        "@return list<array{0: Route, 1: array<string, string>}>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "dispatch",
                    "static": false,
                    "visibility": "public",
                    "signature": "dispatch(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "Null when nothing matched, so the caller can fall through.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 170
                },
                {
                    "routes": [],
                    "name": "admits",
                    "static": false,
                    "visibility": "private",
                    "signature": "admits(Minn\\Http\\Policy $policy, Minn\\Http\\Request $request, array $captures): bool",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $captures"
                    ],
                    "params": [
                        {
                            "name": "policy",
                            "type": "Minn\\Http\\Policy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "arguments",
                    "static": true,
                    "visibility": "private",
                    "signature": "arguments(ReflectionMethod $method, array $captures): array",
                    "doc": "The captures a handler takes, by parameter name; a capture spelled as\nthe reference spells it (user_id) binds to its camelCase parameter.",
                    "shapes": [
                        "@param array<string, string> $captures",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "method",
                            "type": "ReflectionMethod",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "answer",
                    "static": false,
                    "visibility": "private",
                    "signature": "answer(Minn\\Http\\Route $route, Minn\\Http\\Request $request, array $captures, Closure $invoke): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $captures",
                        "@param Closure(): Response $invoke"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "Minn\\Http\\Route",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invoke",
                            "type": "Closure",
                            "shape": "Closure(): Response",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "enveloped",
                    "static": false,
                    "visibility": "private",
                    "signature": "enveloped(Minn\\Http\\Matched $matched, Minn\\Http\\Request $request, Closure $invoke): Minn\\Http\\Response",
                    "doc": "The refusals judged up front and handed over unthrown. The policy is\njudged even past a bad argument, because the envelope may clear that;\na policy that declines the route throws before anything hears of it.",
                    "shapes": [
                        "@param Closure(): Response $invoke"
                    ],
                    "params": [
                        {
                            "name": "matched",
                            "type": "Minn\\Http\\Matched",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invoke",
                            "type": "Closure",
                            "shape": "Closure(): Response",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 217,
                    "end": 239
                },
                {
                    "routes": [],
                    "name": "methodsOf",
                    "static": false,
                    "visibility": "private",
                    "signature": "methodsOf(object $handler, string $name, string $pattern, Minn\\Http\\Method $asked): array",
                    "doc": "The methods one handler answers on one pattern alongside the request's,\ngrouped as the reference registers them: reading alone, deleting\nalone, and creating or editing together (POST, PUT, PATCH).",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "handler",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pattern",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "asked",
                            "type": "Minn\\Http\\Method",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 248,
                    "end": 258
                },
                {
                    "routes": [],
                    "name": "literal",
                    "static": true,
                    "visibility": "private",
                    "signature": "literal(Minn\\Http\\Route $route): ?string",
                    "doc": "The one path a route spells, a capture it fixes ({base:media}) read as its word; null for a route with a real capture.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "route",
                            "type": "Minn\\Http\\Route",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 261,
                    "end": 265
                },
                {
                    "routes": [],
                    "name": "spells",
                    "static": true,
                    "visibility": "private",
                    "signature": "spells(Minn\\Http\\Route $route, string $path): bool",
                    "doc": "Whether a route names a path in so many words: its captures, if any,\nonly choose among words ({base:categories|tags}), so the path is one of\nthe routes it spells rather than a value it captures.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "route",
                            "type": "Minn\\Http\\Route",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 272,
                    "end": 279
                }
            ]
        },
        {
            "name": "Minn\\Http\\StatusText",
            "short": "StatusText",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/StatusText.php",
            "lines": 16,
            "doc": "The reason phrase a status line carries for each code, as the reference's\ntable has them (probe functions-remaining): its own wording where it\ndiffers from today's RFCs (\"Request Entity Too Large\", \"Reserved\" for 306).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "PHRASES",
                    "value": "array (   100 => 'Continue',   101 => 'Switching Protocols',   102 => 'Processing',   103 => 'Early Hints',   200 => 'OK',   201 => 'Created',   202 => 'Accepted',   203 => 'Non-Authoritative Information',   204 => 'No Content',   205 => 'Reset Content',   206 => 'Partial Content',   207 => 'Multi-Status',   226 => 'IM Used',   300 => 'Multiple Choices',   301 => 'Moved Permanently',   302 => 'Found',   303 => 'See Other',   304 => 'Not Modified',   305 => 'Use Proxy',   306 => 'Reserved',   307 => 'Temporary Redirect',   308 => 'Permanent Redirect',   400 => 'Bad Request',   401 => 'Unauthorized',   402 => 'Payment Required',   403 => 'Forbidden',   404 => 'Not Found',   405 => 'Method Not Allowed',   406 => 'Not Acceptable',   407 => 'Proxy Authentication Required',   408 => 'Request Timeout',   409 => 'Conflict',   410 => 'Gone',   411 => 'Length Required',   412 => 'Precondition Failed',   413 => 'Request Entity Too Large',   414 => 'Request-URI Too Long',   415 => 'Unsupported Media Type',   416 => 'Requested Range Not Satisfiable',   417 => 'Expectation Failed',   418 => 'I\\'m a teapot',   421 => 'Misdirected Request',   422 => 'Unprocessable Entity',   423 => 'Locked',   424 => 'Failed Dependency',   425 => 'Too Early',   426 => 'Upgrade Required',   428 => 'Precondition Required',   429 => 'Too Many Requests',   431 => 'Request Header Fields Too Large',   451 => 'Unavailable For Legal Reasons',   500 => 'Internal Server Error',   501 => 'Not Implemented',   502 => 'Bad Gateway',   503 => 'Service Unavailable',   504 => 'Gateway Timeout',   505 => 'HTTP Version Not Supported',   506 => 'Variant Also Negotiates',   507 => 'Insufficient Storage',   510 => 'Not Extended',   511 => 'Network Authentication Required', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(int $code): string",
                    "doc": "The phrase for a code, or empty for one the table does not know.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                }
            ]
        },
        {
            "name": "Minn\\Http\\Subject",
            "short": "Subject",
            "namespace": "Minn\\Http",
            "kind": "enum",
            "file": "public/minn/src/Minn/Http/Subject.php",
            "lines": 46,
            "doc": "The record a route capture names, so a policy can have it looked up\nbefore the caller is judged: the reference answers \"no such post\" ahead\nof \"you may not\", and the 404 it sends is the record's own. A kind that\nreads its post type or taxonomy from the {base} capture says so.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Http\\Policy",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\Subjects",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController"
            ],
            "constructor": null,
            "cases": [
                {
                    "name": "Post",
                    "value": null,
                    "doc": "A post of the type the {base} capture names (posts, pages, blocks, media, navigation, menu-items); a post when there is none."
                },
                {
                    "name": "PostParent",
                    "value": null,
                    "doc": "The same lookup, refused as an invalid parent (revisions and autosaves)."
                },
                {
                    "name": "Attachment",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Block",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "Navigation",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "MenuItem",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "GlobalStyles",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "GlobalStylesParent",
                    "value": null,
                    "doc": "A global styles post, refused as an invalid parent (its revisions)."
                },
                {
                    "name": "Term",
                    "value": null,
                    "doc": "A term of the taxonomy the {base} capture names (categories, tags, wp_pattern_category)."
                },
                {
                    "name": "Menu",
                    "value": null,
                    "doc": ""
                },
                {
                    "name": "User",
                    "value": null,
                    "doc": "A user by id, or \"me\" for the caller, who must then be signed in."
                },
                {
                    "name": "Comment",
                    "value": null,
                    "doc": ""
                }
            ],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "missingCode",
                    "static": false,
                    "visibility": "public",
                    "signature": "missingCode(): string",
                    "doc": "The reference's error code for a record that does not exist.",
                    "shapes": [],
                    "params": [],
                    "line": 34,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "missingMessage",
                    "static": false,
                    "visibility": "public",
                    "signature": "missingMessage(): string",
                    "doc": "The reference's message for a record that does not exist.",
                    "shapes": [],
                    "params": [],
                    "line": 47,
                    "end": 57
                }
            ]
        },
        {
            "name": "Minn\\Http\\Transport",
            "short": "Transport",
            "namespace": "Minn\\Http",
            "kind": "final class",
            "file": "public/minn/src/Minn/Http/Transport.php",
            "lines": 138,
            "doc": "The engine's outgoing HTTP transport over curl: it sends exactly what an\nOutbound says and nothing else decides. Redirects are followed by curl, so\nthe header lines of every hop arrive in order; only the last response's\nblock is kept, the way plugin code expects to read it. Code calling out\ngoes through Minn\\Http, which owns the rules about where a request may go.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Exchange",
                "Minn\\Http\\Outbound"
            ],
            "usedBy": [
                "Minn\\Http"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "send",
                    "static": true,
                    "visibility": "public",
                    "signature": "send(Minn\\Http\\Outbound $request): Minn\\Http\\Exchange",
                    "doc": "Performs one outgoing request over curl and returns the exchange, a transport error included.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "options",
                    "static": true,
                    "visibility": "private",
                    "signature": "options(Minn\\Http\\Outbound $request, array $lines): array",
                    "doc": "The curl options every request carries, the header lines collected into $lines as they arrive.",
                    "shapes": [
                        "@param list<string> $lines",
                        "@return array<int, mixed>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Outbound",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lines",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "limit",
                    "static": true,
                    "visibility": "private",
                    "signature": "limit(int $maxBytes): array",
                    "doc": "Stops a body that grows past $maxBytes: curl refuses up front when the\nlength is announced, and the progress callback aborts when it is not.",
                    "shapes": [
                        "@return array<int, mixed>"
                    ],
                    "params": [
                        {
                            "name": "maxBytes",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "lastHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "lastHead(array $lines): array",
                    "doc": "The last response's status line and header lines, line endings removed.",
                    "shapes": [
                        "@param list<string> $lines",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "lines",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "lastBlock",
                    "static": true,
                    "visibility": "private",
                    "signature": "lastBlock(array $lines): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $lines",
                        "@return array{0: array<string, string|list<string>>, 1: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "lines",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 150
                }
            ]
        },
        {
            "name": "Minn\\Http\\TrustedProxies",
            "short": "TrustedProxies",
            "namespace": "Minn\\Http",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Http/TrustedProxies.php",
            "lines": 115,
            "doc": "Which addresses in front of the engine may speak for the client.\n\nBy default none do: a forwarded header is a request header, and a request\nheader is the client's word. Behind a proxy or CDN that terminates TLS,\n`REMOTE_ADDR` is then the proxy's, which makes every visitor look like one\naddress (the sign-in throttle would lock them all out together) and every\nrequest look insecure (the auth cookie would lose its Secure flag).\n\nA site says who to believe in `wp-config.php`:\n\ndefine('MINN_TRUSTED_PROXIES', '10.0.0.0/8, 2400:cb00::/32');\ndefine('MINN_TRUSTED_PROXIES', '*');   // any: only when nothing but the proxy can reach PHP\n\nThe client is then the right-most address in `X-Forwarded-For` that is not\nitself trusted, which is what a proxy chain appends, so a client that sends\nits own `X-Forwarded-For` cannot put an address the engine believes to the\nright of the proxy's. `*` trusts whoever connects, not every forwarded\nhop: the client is the address that proxy appended (with it every hop,\nthe client's own included, would be skipped as trusted, and every visitor\nwould be the proxy again).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http"
            ],
            "usedBy": [
                "Minn\\Http\\Request"
            ],
            "constructor": {
                "signature": "__construct(array $ranges)",
                "doc": "",
                "shapes": [
                    "@param list<string> $ranges addresses or CIDR ranges, or ['*'] for any"
                ],
                "params": [
                    {
                        "name": "ranges",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": "addresses or CIDR ranges, or ['*'] for any"
                    }
                ],
                "visibility": "private",
                "line": 32,
                "end": 34
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "ranges",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "none",
                    "static": true,
                    "visibility": "public",
                    "signature": "none(): self",
                    "doc": "Nobody in front of the engine speaks for the client.",
                    "shapes": [],
                    "params": [],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "configured",
                    "static": true,
                    "visibility": "public",
                    "signature": "configured(): self",
                    "doc": "What the site declared in wp-config.php, or nobody.",
                    "shapes": [],
                    "params": [],
                    "line": 43,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "trusts",
                    "static": false,
                    "visibility": "public",
                    "signature": "trusts(string $address): bool",
                    "doc": "Whether the engine believes what this address says about the client.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "clientAddress",
                    "static": false,
                    "visibility": "public",
                    "signature": "clientAddress(string $remoteAddress, string $forwardedFor): string",
                    "doc": "The client's address, given who connected and what was forwarded: the\nright-most forwarded address that is not itself a trusted proxy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "remoteAddress",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "forwardedFor",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "forwardedSecure",
                    "static": false,
                    "visibility": "public",
                    "signature": "forwardedSecure(string $remoteAddress, string $forwardedProto): bool",
                    "doc": "Whether a forwarded scheme may be believed, and says https.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "remoteAddress",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "forwardedProto",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "coversHop",
                    "static": false,
                    "visibility": "private",
                    "signature": "coversHop(string $hop): bool",
                    "doc": "Whether a forwarded hop is a trusted proxy: one a declared range covers (`*` speaks for the connecting address only).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hop",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "bare",
                    "static": true,
                    "visibility": "private",
                    "signature": "bare(string $value): string",
                    "doc": "An address with a port or brackets stripped, as a forwarded list may carry them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "covers",
                    "static": true,
                    "visibility": "private",
                    "signature": "covers(string $range, string $address): bool",
                    "doc": "Whether a CIDR range or a plain address covers the address given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "range",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 142
                }
            ]
        },
        {
            "name": "Minn\\I18n\\Catalog",
            "short": "Catalog",
            "namespace": "Minn\\I18n",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/I18n/Catalog.php",
            "lines": 56,
            "doc": "One translation file's contents: its headers as written, its messages\nkeyed the gettext way (the context, a 0x04 byte, then the original; the\noriginal alone without a context), each with its translated forms and,\nwhere the file says, the original plural, and the file's plural rule.\nAn empty translation is still a translation: it is what the file says.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\PluralRule"
            ],
            "usedBy": [
                "Minn\\I18n\\Gettext",
                "Minn\\I18n\\MoFile",
                "Minn\\I18n\\PhpFile",
                "Minn\\I18n\\TextDomains",
                "Minn\\I18n\\TranslationFiles"
            ],
            "constructor": {
                "signature": "__construct(array $headers, array $entries, Minn\\I18n\\PluralRule $plural)",
                "doc": "",
                "shapes": [
                    "@param array<string, string> $headers",
                    "@param array<string, array{translations: list<string>, plural: ?string}> $entries"
                ],
                "params": [
                    {
                        "name": "headers",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "entries",
                        "type": "array",
                        "shape": "array<string, array{translations: list<string>, plural: ?string}>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "plural",
                        "type": "Minn\\I18n\\PluralRule",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 20,
                "end": 22
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "headers",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "entries",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "plural",
                    "type": "Minn\\I18n\\PluralRule",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "from",
                    "static": true,
                    "visibility": "public",
                    "signature": "from(array $headers, array $entries): self",
                    "doc": "A catalog from headers and entries, its plural rule taken from the headers.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "entries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "key",
                    "static": true,
                    "visibility": "public",
                    "signature": "key(string $original, ?string $context): string",
                    "doc": "The lookup key for an original in a context; an empty or missing context is no context.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "original",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "headerValue",
                    "static": false,
                    "visibility": "public",
                    "signature": "headerValue(string $name): ?string",
                    "doc": "A header's value, its name matched without case.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "translate",
                    "static": false,
                    "visibility": "public",
                    "signature": "translate(string $key): ?string",
                    "doc": "The translation of a message, empty when the file says so, or null when the file has no entry.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "translatePlural",
                    "static": false,
                    "visibility": "public",
                    "signature": "translatePlural(string $key, int $count): ?string",
                    "doc": "The form of a message a count takes under this file's rule (the first form when the file has fewer), or null when the file has no entry.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": false,
                    "visibility": "public",
                    "signature": "has(string $key): bool",
                    "doc": "Whether the file has an entry for the message.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 68
                }
            ]
        },
        {
            "name": "Minn\\I18n\\Gettext",
            "short": "Gettext",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/Gettext.php",
            "lines": 84,
            "doc": "Translation as plugins see it (__, _x, _n and the rest map here): the\nmessage looked up in its domain's loaded files (loading the domain just\nin time on first use, through the loader the runtime hands over), else\nthe English, then the gettext filters a plugin may change it through.\nEngine code translates here rather than through the WordPress names;\nwith no runtime (an engine CLI verb) there is nothing loaded, and the\nEnglish stands.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Catalog",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\Search",
                "Minn\\Blocks\\Dynamic\\TagCloud",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\Texturize",
                "Minn\\Engine",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\EmbedCard",
                "Minn\\Front\\FeedTemplates",
                "Minn\\Front\\ToolbarMarkup",
                "Minn\\Front\\ToolbarMenus",
                "Minn\\I18n\\LocalDates",
                "Minn\\Login\\LoginHooks",
                "Minn\\Query\\DateSql",
                "Minn\\Query\\TaxSql",
                "Minn\\Rest\\RestMeta",
                "Minn\\Runtime\\AccountFlows",
                "Minn\\Runtime\\ApplicationPasswordSignIn",
                "Minn\\Runtime\\MenuEvents",
                "Minn\\Runtime\\MetaKeys",
                "Minn\\Runtime\\NavMenuItems",
                "Minn\\Runtime\\PostData",
                "Minn\\Runtime\\PostQuery",
                "Minn\\Runtime\\Registry",
                "Minn\\Runtime\\UpdateCounts",
                "Minn\\Theme\\ArchiveTitle",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\PatternText"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "loader",
                    "type": "?Closure",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "loadWith",
                    "static": true,
                    "visibility": "public",
                    "signature": "loadWith(Closure $loader): void",
                    "doc": "The runtime's just-in-time loader for a domain's files. @param Closure(string): mixed $loader",
                    "shapes": [
                        "@param Closure(string): mixed $loader"
                    ],
                    "params": [
                        {
                            "name": "loader",
                            "type": "Closure",
                            "shape": "Closure(string): mixed",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "public",
                    "signature": "text(string $text, string $domain = 'default'): string",
                    "doc": "A message (__).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": "'default'",
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "inContext",
                    "static": true,
                    "visibility": "public",
                    "signature": "inContext(string $text, string $context, string $domain = 'default'): string",
                    "doc": "A message in a context (_x).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": "'default'",
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "plural",
                    "static": true,
                    "visibility": "public",
                    "signature": "plural(string $single, string $plural, int $number, string $domain = 'default'): string",
                    "doc": "The form a count takes (_n): the domain's own plural, else English's.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "single",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plural",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": "'default'",
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "pluralInContext",
                    "static": true,
                    "visibility": "public",
                    "signature": "pluralInContext(string $single, string $plural, int $number, string $context, string $domain = 'default'): string",
                    "doc": "The form a count takes in a context (_nx).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "single",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plural",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": "'default'",
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "lookup",
                    "static": true,
                    "visibility": "public",
                    "signature": "lookup(string $domain, string $key): ?string",
                    "doc": "A domain's translation of a message key, or null (no runtime to have loaded one, no file, no entry).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "pluralForm",
                    "static": true,
                    "visibility": "public",
                    "signature": "pluralForm(string $single, string $plural, int $number, string $domain, ?string $context): string",
                    "doc": "The plural form a count takes in a domain, or English's when no file has the message.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "single",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plural",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "hooked",
                    "static": true,
                    "visibility": "private",
                    "signature": "hooked(): bool",
                    "doc": "Whether the hook API is loaded: without it (an engine CLI verb, a unit case) a message stands unfiltered.",
                    "shapes": [],
                    "params": [],
                    "line": 75,
                    "end": 78
                }
            ]
        },
        {
            "name": "Minn\\I18n\\LegacyPluralForms",
            "short": "LegacyPluralForms",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/LegacyPluralForms.php",
            "lines": 190,
            "doc": "The plural expression reader the old POMO library carries (Plural_Forms),\nkept apart from PluralExpression because plugins see its quirks: it reads\nonly n, whole numbers, parentheses, % and the comparisons, && and ||, and\nthe ternary, skipping spaces and tabs alone. It turns the expression into\npostfix tokens once (operators of equal strength group to the left, the\nternary to the right) and runs them on a stack per number: an operand the\nstack lacks is null, == and != compare strictly, values stay as PHP left\nthem until the answer is cast to an integer, and % is PHP's own, so a zero\ndivisor throws. Every refusal is an Exception with the reference's words\n(probe translation-files).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "OP_CHARS",
                    "value": "'|&><!=%?:'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "LEVELS",
                    "value": "array (   0 =>    array (     0 => '(',     1 => ')',   ),   1 =>    array (     0 => '?:',     1 => '?',   ),   2 =>    array (     0 => '||',   ),   3 =>    array (     0 => '&&',   ),   4 =>    array (     0 => '==',     1 => '!=',   ),   5 =>    array (     0 => '<',     1 => '<=',     2 => '>',     3 => '>=',   ),   6 =>    array (     0 => '%',   ), )",
                    "doc": "The operators by how loosely they bind, loosest first; the parentheses below everything.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $expression): array",
                    "doc": "The expression as postfix tokens: ['var'], ['value', int] or ['op', string].",
                    "shapes": [
                        "@return list<array{0: string, 1?: int|string}>"
                    ],
                    "params": [
                        {
                            "name": "expression",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "execute",
                    "static": true,
                    "visibility": "public",
                    "signature": "execute(array $tokens, int $n): int",
                    "doc": "The value of postfix tokens for one number.",
                    "shapes": [
                        "@param list<array{0: string, 1?: int|string}> $tokens"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<array{0: string, 1?: int|string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "n",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "token",
                    "static": true,
                    "visibility": "private",
                    "signature": "token(string $expression, int $at, array $output, array $stack): int",
                    "doc": "Reads one token at an offset onto the output or the operator stack; the offset after it.",
                    "shapes": [
                        "@param list<array{0: string, 1?: int|string}> $output",
                        "@param list<string> $stack"
                    ],
                    "params": [
                        {
                            "name": "expression",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "output",
                            "type": "array",
                            "shape": "list<array{0: string, 1?: int|string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stack",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "operator",
                    "static": true,
                    "visibility": "private",
                    "signature": "operator(string $expression, int $at, array $output, array $stack): int",
                    "doc": "Reads the one- or two-character operator at an offset; its length.",
                    "shapes": [
                        "@param list<array{0: string, 1?: int|string}> $output",
                        "@param list<string> $stack"
                    ],
                    "params": [
                        {
                            "name": "expression",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "output",
                            "type": "array",
                            "shape": "list<array{0: string, 1?: int|string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stack",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "closeParenthesis",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeParenthesis(array $output, array $stack): void",
                    "doc": "",
                    "shapes": [
                        "@param list<array{0: string, 1?: int|string}> $output",
                        "@param list<string> $stack"
                    ],
                    "params": [
                        {
                            "name": "output",
                            "type": "array",
                            "shape": "list<array{0: string, 1?: int|string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stack",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 140,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "closeTernary",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeTernary(array $output, array $stack): void",
                    "doc": "A \":\" moves operators out until its \"?\", which becomes the whole ternary.",
                    "shapes": [
                        "@param list<array{0: string, 1?: int|string}> $output",
                        "@param list<string> $stack"
                    ],
                    "params": [
                        {
                            "name": "output",
                            "type": "array",
                            "shape": "list<array{0: string, 1?: int|string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stack",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 166
                },
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "private",
                    "signature": "apply(string $operator, array $stack): mixed",
                    "doc": "Runs one operator on the values it pops, rightmost first.",
                    "shapes": [
                        "@param list<mixed> $stack"
                    ],
                    "params": [
                        {
                            "name": "operator",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stack",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 173,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "strengths",
                    "static": true,
                    "visibility": "private",
                    "signature": "strengths(): array",
                    "doc": "Each operator's strength: its level's place in LEVELS.",
                    "shapes": [
                        "@return array<string, int>"
                    ],
                    "params": [],
                    "line": 199,
                    "end": 209
                }
            ]
        },
        {
            "name": "Minn\\I18n\\LocalDates",
            "short": "LocalDates",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/LocalDates.php",
            "lines": 35,
            "doc": "A date in the site's language, as the reference's wp_date writes one:\nPHP's format, with the weekday and month names (D, l, F, M) and the\nmeridiems (a, A) in the language's own words, and a month written after\nits day in the genitive where the language declines month names.\nBackslashed characters stay as written.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Support\\Locale"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Dates",
                "Minn\\Theme\\ArchiveTitle"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "format",
                    "static": true,
                    "visibility": "public",
                    "signature": "format(DateTimeInterface $time, string $format): string",
                    "doc": "The date in the format given, its names translated.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "time",
                            "type": "DateTimeInterface",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 50
                }
            ]
        },
        {
            "name": "Minn\\I18n\\LocaleStack",
            "short": "LocaleStack",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/LocaleStack.php",
            "lines": 42,
            "doc": "The locales a request switched into, innermost last, each with the user\nwhose locale it is (false when a locale was named outright). Empty means\nthe request speaks its own locale.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "stack",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "push",
                    "static": false,
                    "visibility": "public",
                    "signature": "push(string $locale, int|false $userId = false): void",
                    "doc": "Enters a locale, a user's or one named outright.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int|false",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 21
                },
                {
                    "routes": [],
                    "name": "pop",
                    "static": false,
                    "visibility": "public",
                    "signature": "pop(): ?string",
                    "doc": "Leaves the innermost locale; the one now in force, or null when none is switched.",
                    "shapes": [],
                    "params": [],
                    "line": 24,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": false,
                    "visibility": "public",
                    "signature": "clear(): void",
                    "doc": "Leaves every switched locale.",
                    "shapes": [],
                    "params": [],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": false,
                    "visibility": "public",
                    "signature": "current(): ?string",
                    "doc": "The innermost switched locale, or null.",
                    "shapes": [],
                    "params": [],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "currentUser",
                    "static": false,
                    "visibility": "public",
                    "signature": "currentUser(): int|false",
                    "doc": "The user whose locale is innermost, or false (none switched, or a locale named outright).",
                    "shapes": [],
                    "params": [],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "switched",
                    "static": false,
                    "visibility": "public",
                    "signature": "switched(): bool",
                    "doc": "Whether any locale is switched in.",
                    "shapes": [],
                    "params": [],
                    "line": 49,
                    "end": 52
                }
            ]
        },
        {
            "name": "Minn\\I18n\\MoFile",
            "short": "MoFile",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/MoFile.php",
            "lines": 106,
            "doc": "The GNU gettext binary catalog (.mo), read and written. The file opens\nwith a magic number that also says its byte order, then a revision, the\nmessage count, and the offsets of two tables of (length, offset) pairs:\nthe originals, then the translations. The entry with an empty original\ncarries the headers; a plural original is \"singular NUL plural\" and its\ntranslations are NUL-separated; a context precedes the original with a\n0x04 byte.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Catalog"
            ],
            "usedBy": [
                "Minn\\I18n\\TranslationFiles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAGIC",
                    "value": "2500072158",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $bytes): ?Minn\\I18n\\Catalog",
                    "doc": "The catalog in a .mo file's bytes, or null when they are not one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "public",
                    "signature": "write(array $headers, array $entries): string",
                    "doc": "A .mo file's bytes for headers and entries, little-endian, entries in\nthe sorted order gettext expects.",
                    "shapes": [
                        "@param array<string, string> $headers",
                        "@param array<string, array{translations: list<string>, plural: ?string}> $entries"
                    ],
                    "params": [
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "entries",
                            "type": "array",
                            "shape": "array<string, array{translations: list<string>, plural: ?string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "byteOrder",
                    "static": true,
                    "visibility": "private",
                    "signature": "byteOrder(string $bytes): ?string",
                    "doc": "\"V\" for a little-endian file, \"N\" for a big-endian one, null for anything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "string",
                    "static": true,
                    "visibility": "private",
                    "signature": "string(string $bytes, string $format, int $at): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "headers",
                    "static": true,
                    "visibility": "private",
                    "signature": "headers(string $block): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "headerBlock",
                    "static": true,
                    "visibility": "private",
                    "signature": "headerBlock(array $headers): string",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $headers"
                    ],
                    "params": [
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\I18n\\PhpFile",
            "short": "PhpFile",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/PhpFile.php",
            "lines": 22,
            "doc": "The PHP translation file (.l10n.php): a file that returns an array of its\nlower-cased headers and a \"messages\" map from the gettext key to the\ntranslation, plural forms joined by NUL bytes. It is the site's own data,\nread the way the reference reads it, by including it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Catalog"
            ],
            "usedBy": [
                "Minn\\I18n\\TranslationFiles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $file): ?Minn\\I18n\\Catalog",
                    "doc": "The catalog a .l10n.php file returns, or null when it returns no messages.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 33
                }
            ]
        },
        {
            "name": "Minn\\I18n\\PluralExpression",
            "short": "PluralExpression",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/PluralExpression.php",
            "lines": 147,
            "doc": "The C subset a Plural-Forms header writes its rule in: the number n,\ninteger literals, parentheses, ! and unary minus, * / %, + -, the four\ncomparisons, == and !=, && and ||, and the ternary, with C's precedence\nand the ternary binding to the right. Parsed into a small tree once and\nevaluated per number; nothing is ever handed to PHP to run.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\I18n\\PluralRule"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TOKEN",
                    "value": "'/\\\\G\\\\s*(\\\\d+|n|==|!=|<=|>=|&&|\\\\|\\\\||[<>!?:()+\\\\-*\\\\/%])/'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BINARY",
                    "value": "array (   '||' => 1,   '&&' => 2,   '==' => 3,   '!=' => 3,   '<' => 4,   '>' => 4,   '<=' => 4,   '>=' => 4,   '+' => 5,   '-' => 5,   '*' => 6,   '/' => 6,   '%' => 6, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $expression): ?array",
                    "doc": "The expression as a tree, or null when it is not a whole expression.",
                    "shapes": [
                        "@return array<int, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "expression",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "evaluate",
                    "static": true,
                    "visibility": "public",
                    "signature": "evaluate(array $node, int $n): int",
                    "doc": "The value of a parsed expression for one number; true is 1 and false 0.",
                    "shapes": [
                        "@param array<int, mixed> $node"
                    ],
                    "params": [
                        {
                            "name": "node",
                            "type": "array",
                            "shape": "array<int, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "n",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "binary",
                    "static": true,
                    "visibility": "private",
                    "signature": "binary(string $operator, int $left, int $right): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "operator",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "left",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "right",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "tokens",
                    "static": true,
                    "visibility": "private",
                    "signature": "tokens(string $expression): ?array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "expression",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "ternary",
                    "static": true,
                    "visibility": "private",
                    "signature": "ternary(array $tokens, int $position): ?array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $tokens",
                        "@return array<int, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "binaryLevel",
                    "static": true,
                    "visibility": "private",
                    "signature": "binaryLevel(array $tokens, int $position, int $level): ?array",
                    "doc": "One level of left-associative binary operators, and every tighter level under it.",
                    "shapes": [
                        "@param list<string> $tokens",
                        "@return array<int, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "unary",
                    "static": true,
                    "visibility": "private",
                    "signature": "unary(array $tokens, int $position): ?array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $tokens",
                        "@return array<int, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 159
                }
            ]
        },
        {
            "name": "Minn\\I18n\\PluralRule",
            "short": "PluralRule",
            "namespace": "Minn\\I18n",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/I18n/PluralRule.php",
            "lines": 36,
            "doc": "A language's plural rule from its Plural-Forms header: how many forms it\nhas and which form a number takes. A file without the header follows\nEnglish (two forms, n != 1); an expression that does not parse sends\nevery number to the first form, as the reference does.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\PluralExpression"
            ],
            "usedBy": [
                "Minn\\I18n\\Catalog"
            ],
            "constructor": {
                "signature": "__construct(int $count, string $expression, ?array $tree)",
                "doc": "",
                "shapes": [
                    "@param array<int, mixed>|null $tree"
                ],
                "params": [
                    {
                        "name": "count",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "expression",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "tree",
                        "type": "?array",
                        "shape": "array<int, mixed>|null",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "count",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "expression",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "tree",
                    "type": "?array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "english",
                    "static": true,
                    "visibility": "public",
                    "signature": "english(): self",
                    "doc": "English: one form for 1, the other for everything else.",
                    "shapes": [],
                    "params": [],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "fromHeader",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromHeader(?string $header): self",
                    "doc": "The rule a Plural-Forms header states.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "header",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "fromExpression",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromExpression(int $count, string $expression): self",
                    "doc": "A rule from a form count and an expression in n.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expression",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "index",
                    "static": false,
                    "visibility": "public",
                    "signature": "index(int $n): int",
                    "doc": "The form a number takes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "n",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\I18n\\ScriptTranslations",
            "short": "ScriptTranslations",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/ScriptTranslations.php",
            "lines": 60,
            "doc": "Where a script's JSON translations are found, and how they reach the\npage. A script is placed by its URL: inside a plugin or a theme, its path\nthere; elsewhere on the site, its path from the site root; off the site,\nnowhere. The JSON files are named by the md5 of that path (with \".min.js\"\nread as \".js\"), or by the script's handle in a folder a plugin names.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "place",
                    "static": true,
                    "visibility": "public",
                    "signature": "place(string $src, string $siteUrl, string $pluginsUrl, string $themesUrl): array",
                    "doc": "A script's path inside its plugin, theme or site, and the languages\nsubfolder for it (\"plugins\", \"themes\", or \"\" for the site); the path\nis false for a script off the site.",
                    "shapes": [
                        "@return array{0: string|false, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "src",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pluginsUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themesUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "absolute",
                    "static": true,
                    "visibility": "public",
                    "signature": "absolute(string $src, string $siteUrl): string",
                    "doc": "The script made absolute the way place() reads it, for the filter that may move it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "src",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "fileHash",
                    "static": true,
                    "visibility": "public",
                    "signature": "fileHash(string $relative): string",
                    "doc": "The md5 a translation file is named by: a minified script shares its source's file.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "prefix",
                    "static": true,
                    "visibility": "public",
                    "signature": "prefix(string $domain, string $locale): string",
                    "doc": "The start of a translation file's name: the core domain goes by locale alone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "block",
                    "static": true,
                    "visibility": "public",
                    "signature": "block(string $domain, string $json): string",
                    "doc": "The inline script that hands a script's translations to wp.i18n before the script runs.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "json",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "origin",
                    "static": true,
                    "visibility": "private",
                    "signature": "origin(string $siteUrl): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "siteUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 74
                }
            ]
        },
        {
            "name": "Minn\\I18n\\SiteLanguage",
            "short": "SiteLanguage",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/SiteLanguage.php",
            "lines": 43,
            "doc": "The site's language as pages declare it: the locale in force (a switched\none first, then what pre_determine_locale or the WPLANG option give,\nthrough the locale filter) and the html element's dir and lang\nattributes, which a plugin may change through language_attributes.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "locale",
                    "static": true,
                    "visibility": "public",
                    "signature": "locale(): string",
                    "doc": "The locale in force (get_locale).",
                    "shapes": [],
                    "params": [],
                    "line": 19,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "tag",
                    "static": true,
                    "visibility": "public",
                    "signature": "tag(): string",
                    "doc": "The language tag pages carry: the locale with a hyphen, plain \"en\" read as en_US.",
                    "shapes": [],
                    "params": [],
                    "line": 34,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "public",
                    "signature": "attributes(string $doctype = 'html'): string",
                    "doc": "The html element's dir and lang attributes (lang for html, xml:lang for xhtml or a non-HTML html_type).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "doctype",
                            "type": "string",
                            "shape": "",
                            "default": "'html'",
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 57
                }
            ]
        },
        {
            "name": "Minn\\I18n\\TextDomains",
            "short": "TextDomains",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/TextDomains.php",
            "lines": 191,
            "doc": "The text domains this request knows: each domain's files in the order they\nwere loaded, and the domains looked for and not found (known, with no\nfiles), all in the order they first appeared, which is the order a locale\nswitch reloads them in. A lookup asks a domain's files in load order and\nthe first one with a translation answers, each under its own plural rule.\nThe registry also remembers the folder a plugin or theme named for its\ndomain (and how files there are named), and the domains unloaded for good.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Catalog"
            ],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "loaded",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "folders",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "closed",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "lookAgain",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "accepted",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "add",
                    "static": false,
                    "visibility": "public",
                    "signature": "add(string $domain, string $file, Minn\\I18n\\Catalog $catalog): void",
                    "doc": "Adds a loaded file to a domain; a file already loaded there is not added twice.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "catalog",
                            "type": "Minn\\I18n\\Catalog",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": false,
                    "visibility": "public",
                    "signature": "has(string $domain): bool",
                    "doc": "Whether any file is loaded for the domain.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "unload",
                    "static": false,
                    "visibility": "public",
                    "signature": "unload(string $domain): bool",
                    "doc": "Forgets a domain and its files; true when it had any.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "accept",
                    "static": false,
                    "visibility": "public",
                    "signature": "accept(string $domain): void",
                    "doc": "Records that load_textdomain() loaded a file for the domain. A file\nthat does not parse adds nothing to look up, yet the reference's\nglobal functions count its domain as loaded, while its translation\ncontroller does not (probe translations-early-wplang).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "opened",
                    "static": false,
                    "visibility": "public",
                    "signature": "opened(string $domain): bool",
                    "doc": "Whether the global functions count the domain as loaded: a file loaded, or one load_textdomain() accepted.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "markKnown",
                    "static": false,
                    "visibility": "public",
                    "signature": "markKnown(string $domain): void",
                    "doc": "Records that a domain was asked for, so it is looked for once and reloaded on a switch.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "waiting",
                    "static": false,
                    "visibility": "public",
                    "signature": "waiting(string $domain): bool",
                    "doc": "Whether a translation lookup should look for the domain's files: it was\nnever looked for, or nothing was found and a folder has been named for\nit since (the reference looks again after each load_plugin_textdomain;\nprobe plugin-data).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "known",
                    "static": false,
                    "visibility": "public",
                    "signature": "known(string $domain): bool",
                    "doc": "Whether the domain was loaded or looked for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "knownDomains",
                    "static": false,
                    "visibility": "public",
                    "signature": "knownDomains(): array",
                    "doc": "Every known domain, in the order it first appeared.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 100,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "unloadFile",
                    "static": false,
                    "visibility": "public",
                    "signature": "unloadFile(string $domain, string $file): bool",
                    "doc": "Drops one file from a domain; true when it was loaded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "catalogs",
                    "static": false,
                    "visibility": "public",
                    "signature": "catalogs(string $domain): array",
                    "doc": "The domain's files and catalogs, first loaded first.",
                    "shapes": [
                        "@return array<string, Catalog>"
                    ],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "translate",
                    "static": false,
                    "visibility": "public",
                    "signature": "translate(string $domain, string $key): ?string",
                    "doc": "The first loaded translation of a key in the domain, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "translatePlural",
                    "static": false,
                    "visibility": "public",
                    "signature": "translatePlural(string $domain, array $keys, int $count): ?string",
                    "doc": "The first loaded plural form for a count, or null: each key is looked\nfor in every file before the next key (the full \"singular NUL plural\"\nkey, then the singular alone).",
                    "shapes": [
                        "@param list<string> $keys"
                    ],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "keys",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "rememberFolder",
                    "static": false,
                    "visibility": "public",
                    "signature": "rememberFolder(string $domain, string $folder): void",
                    "doc": "Records the folder a plugin or theme named for its domain; files there are \"{domain}-{locale}\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "rememberThemeFolder",
                    "static": false,
                    "visibility": "public",
                    "signature": "rememberThemeFolder(string $domain, string $folder): void",
                    "doc": "Records the active theme's own language folder; files there are named by locale alone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 166
                },
                {
                    "routes": [],
                    "name": "folderFile",
                    "static": false,
                    "visibility": "public",
                    "signature": "folderFile(string $domain, string $locale): ?string",
                    "doc": "The .mo path a domain's named folder would hold for a locale, if a folder was named.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "close",
                    "static": false,
                    "visibility": "public",
                    "signature": "close(string $domain): void",
                    "doc": "Keeps an unloaded domain from loading again on its own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 189
                },
                {
                    "routes": [],
                    "name": "closed",
                    "static": false,
                    "visibility": "public",
                    "signature": "closed(string $domain): bool",
                    "doc": "Whether the domain was unloaded for good.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 192,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "domains",
                    "static": false,
                    "visibility": "public",
                    "signature": "domains(): array",
                    "doc": "The domains with files loaded.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 202,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "lookAgainUnlessLoaded",
                    "static": false,
                    "visibility": "private",
                    "signature": "lookAgainUnlessLoaded(string $domain): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 173
                }
            ]
        },
        {
            "name": "Minn\\I18n\\TranslationFiles",
            "short": "TranslationFiles",
            "namespace": "Minn\\I18n",
            "kind": "final class",
            "file": "public/minn/src/Minn/I18n/TranslationFiles.php",
            "lines": 48,
            "doc": "Which file a request for a .mo path reads, and reading it. Asked for\n\"x.mo\", the reference reads \"x.l10n.php\" when the format is php and that\nfile is there, and the .mo only otherwise; asked for the mo format, only\nthe .mo.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Catalog",
                "Minn\\I18n\\MoFile",
                "Minn\\I18n\\PhpFile",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\UsersController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "candidates",
                    "static": true,
                    "visibility": "public",
                    "signature": "candidates(string $mofile, string $format): array",
                    "doc": "The files to try for a requested .mo path, in order.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "mofile",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "languages",
                    "static": true,
                    "visibility": "public",
                    "signature": "languages(string $dir, ?string $asked = NULL): array",
                    "doc": "The languages a folder holds core translations for (each .mo but the\ntime zone names, the network admin's and the admin's), as\nget_available_languages lists them, through its filter ($asked: the\nfolder as the caller named it, null for the site's own).",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "asked",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $file): ?Minn\\I18n\\Catalog",
                    "doc": "A translation file's catalog by its extension, or null when it cannot be read as one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Json",
            "short": "Json",
            "namespace": "Minn",
            "kind": "final class",
            "file": "public/minn/src/Minn/Json.php",
            "lines": 134,
            "doc": "JSON in and out, for the engine and for code written for Minn:\n\nuse Minn\\Json;\n\nJson::encode($rows);              // {\"url\":\"https://example.com/a\",\"name\":\"Café\"}\nJson::decode($text);              // objects as arrays; JsonException when it is not JSON\nJson::decode($stored, or: []);    // the fallback, for text that may be empty or broken\nJson::file($path);                // the same, read from a file; the error names the file\n\nencode() writes slashes and characters as themselves unless flags say\notherwise (Json::ESCAPED is the form WordPress writes, which REST bodies\nkeep). A string cut mid-character still encodes: each invalid byte becomes\n\"?\", as wp_json_encode() does it (probe functions-utils). What cannot be\nencoded even then (NAN, nesting past the depth) throws a JsonException.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\AdminTypes",
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\Translations",
                "Minn\\Auth\\Roles",
                "Minn\\Blocks\\BlockStream",
                "Minn\\Blocks\\CoreBlocks",
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\Serializer",
                "Minn\\Cli\\Installer",
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\OptionCommand",
                "Minn\\Cli\\Preflight",
                "Minn\\Content\\Emoji",
                "Minn\\Content\\PluginState",
                "Minn\\Extension\\Loader",
                "Minn\\Extension\\Manifest",
                "Minn\\Front\\AdminBar",
                "Minn\\Html",
                "Minn\\Http",
                "Minn\\Http\\Exchange",
                "Minn\\Http\\Fake",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\I18n\\ScriptTranslations",
                "Minn\\Mail\\MailLog",
                "Minn\\Mail\\MailSettings",
                "Minn\\Mail\\MailerStrings",
                "Minn\\Ops\\Changelog",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Releases",
                "Minn\\Ops\\ShapeFiles",
                "Minn\\Ops\\Updates",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Schema",
                "Minn\\Rest\\SchemaData",
                "Minn\\Rest\\Taxonomies",
                "Minn\\Rest\\Types",
                "Minn\\Runtime\\Assets",
                "Minn\\Runtime\\Constants",
                "Minn\\Runtime\\Interactivity",
                "Minn\\Runtime\\OEmbed",
                "Minn\\Runtime\\Recovery",
                "Minn\\Runtime\\Registry",
                "Minn\\Runtime\\ScriptModules",
                "Minn\\Runtime\\SymbolGap",
                "Minn\\Runtime\\Symbols",
                "Minn\\Runtime\\ThemeSupports",
                "Minn\\Support\\Accents",
                "Minn\\Support\\KsesEntities",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\StyleLayers",
                "Minn\\Theme\\StylePresets",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplatePartTheme",
                "Minn\\Theme\\TemplatePatterns",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeStyles",
                "Minn\\Theme\\UserStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "READABLE",
                    "value": "320",
                    "doc": "Slashes and non-ASCII characters written as themselves: encode()'s default.",
                    "visibility": "public"
                },
                {
                    "name": "ESCAPED",
                    "value": "0",
                    "doc": "Slashes and non-ASCII characters escaped, as wp_json_encode() and the REST API write them.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "public",
                    "signature": "encode(mixed $value, int $flags = self::READABLE, int $depth = 512): string",
                    "doc": "A value as JSON; invalid UTF-8 is repaired, never a reason to fail.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": "self::READABLE",
                            "doc": "json_encode() flags; JSON_THROW_ON_ERROR here skips the repair, as it does for wp_json_encode()"
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": "512",
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "public",
                    "signature": "decode(string $text, mixed $or = NULL): mixed",
                    "doc": "The value the text holds, objects as arrays; with `or:` given, that comes back instead of an exception.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "or",
                            "type": "mixed",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "file",
                    "static": true,
                    "visibility": "public",
                    "signature": "file(string $path, mixed $or = NULL): mixed",
                    "doc": "The value a JSON file holds, objects as arrays; with `or:` given, a missing or broken file gives that instead.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "or",
                            "type": "mixed",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "repair",
                    "static": true,
                    "visibility": "public",
                    "signature": "repair(mixed $value, int $depth = 512): mixed",
                    "doc": "A value with every string and key made valid UTF-8, each invalid byte becoming \"?\", objects read as plain objects of their public properties.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": "512",
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "decodeKeepingEmptyObjects",
                    "static": true,
                    "visibility": "public",
                    "signature": "decodeKeepingEmptyObjects(string $json): mixed",
                    "doc": "JSON as arrays, but an empty object stays an object: an in-process\nREST answer keeps `{}` where the reference's data holds an empty\nobject (a global style's emptied settings), which decoding to arrays\nwould turn into `[]`.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "json",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "member",
                    "static": true,
                    "visibility": "private",
                    "signature": "member(mixed $item, int $depth): mixed",
                    "doc": "One member of an array or object: a nested one goes a level deeper, a string is repaired.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "private",
                    "signature": "text(string $text): string",
                    "doc": "A string made valid UTF-8: each invalid byte becomes \"?\", the valid characters stay.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 137,
                    "end": 140
                }
            ]
        },
        {
            "name": "Minn\\Login\\LoginController",
            "short": "LoginController",
            "namespace": "Minn\\Login",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Login/LoginController.php",
            "lines": 501,
            "doc": "Signing in. The page people see is /minn-admin/login: the form, the\nlost-password and reset flows, and logout all live there and link there.\n/wp-login.php stays as the address tooling knows (one-time login links,\nuptime probes, scripted sign-ins) and answers in place with the same\nshapes; a bare GET of it sends a browser to the clean page. Sessions\nand cookies validate on the engine AND on WordPress either way.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Nonce",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Auth\\PortableHash",
                "Minn\\Auth\\SignIn",
                "Minn\\Content\\Site",
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\Http\\Access",
                "Minn\\Http\\Location",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Login\\LoginForm",
                "Minn\\Login\\LoginHooks",
                "Minn\\Login\\LoginNotices",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Auth\\Authenticator $authenticator, Minn\\Auth\\SignIn $signIn, Minn\\Content\\Users $users, Minn\\Auth\\PasswordReset $reset)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "authenticator",
                        "type": "Minn\\Auth\\Authenticator",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "signIn",
                        "type": "Minn\\Auth\\SignIn",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "reset",
                        "type": "Minn\\Auth\\PasswordReset",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 41,
                "end": 49
            },
            "cases": [],
            "constants": [
                {
                    "name": "DAY",
                    "value": "86400",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "PATH",
                    "value": "'/minn-admin/login'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SEGMENTS",
                    "value": "array (   'lost-password' => 'lostpassword',   'reset' => 'rp',   'logout' => 'logout',   'register' => 'register',   'confirm-email' => 'confirm_admin_email', )",
                    "doc": "Clean path segment => the action wp-login.php spells with ?action=.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "authenticator",
                    "type": "Minn\\Auth\\Authenticator",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "signIn",
                    "type": "Minn\\Auth\\SignIn",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "reset",
                    "type": "Minn\\Auth\\PasswordReset",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /minn-admin/login",
                        "GET /minn-admin/login/{segment:lost-password|reset|logout|register|confirm-email}",
                        "GET /wp-login.php (public)"
                    ],
                    "name": "form",
                    "static": false,
                    "visibility": "public",
                    "signature": "form(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The sign-in, lost-password, reset, and logout pages.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 117
                },
                {
                    "routes": [
                        "POST /minn-admin/login",
                        "POST /minn-admin/login/{segment:lost-password|reset|logout|confirm-email}",
                        "POST /wp-login.php (public)"
                    ],
                    "name": "signIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "signIn(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Handles the posted form for each of those pages.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 358,
                    "end": 398
                },
                {
                    "routes": [],
                    "name": "landingFor",
                    "static": false,
                    "visibility": "private",
                    "signature": "landingFor(Minn\\Http\\Request $request, Minn\\Content\\UserRecord|WP_Error|null $user): string",
                    "doc": "Where a sign-in from this page lands, through login_redirect: the address asked for, or the admin, with who the sign-in found.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord|WP_Error|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "asked",
                    "static": false,
                    "visibility": "private",
                    "signature": "asked(Minn\\Http\\Request $request): array",
                    "doc": "The address a sign-in from this page asks for, and where it lands without one (the admin). @return array{0: string, 1: string}",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "checkEmail",
                    "static": false,
                    "visibility": "private",
                    "signature": "checkEmail(Minn\\Http\\Request $request): Minn\\Login\\LoginNotices",
                    "doc": "The check-your-email page's word, as the reference's: the confirmation link is on its way, or the registration is done.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "signInNotices",
                    "static": false,
                    "visibility": "private",
                    "signature": "signInNotices(Minn\\Http\\Request $request, Minn\\Login\\LoginNotices $notices): Minn\\Login\\LoginNotices",
                    "doc": "A sign-in page's notices after wp_login_errors, handed where a sign-in would land (the admin, unless the page names a landing).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "notices",
                            "type": "Minn\\Login\\LoginNotices",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "lostPassword",
                    "static": false,
                    "visibility": "private",
                    "signature": "lostPassword(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "POST lostpassword mints a key and mails the link; POST resetpass saves the new password. Null for other actions.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 174
                },
                {
                    "routes": [],
                    "name": "retrieve",
                    "static": false,
                    "visibility": "private",
                    "signature": "retrieve(Minn\\Http\\Request $request, string $login, string $siteName): Minn\\Http\\Response",
                    "doc": "A reset asked for with plugins loaded, as the reference asks for it\n(retrieve_password, its hooks and mail): the page again with the\nrefusal in its words, or on to \"check your email\". An unknown\naccount still counts against the address's attempts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "openResetLink",
                    "static": false,
                    "visibility": "private",
                    "signature": "openResetLink(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The link from the email: the key moves into a cookie scoped to\nwp-login.php and the browser lands on the form without the key in\nits address bar, as on the reference.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 216
                },
                {
                    "routes": [],
                    "name": "resetSession",
                    "static": false,
                    "visibility": "private",
                    "signature": "resetSession(Minn\\Http\\Request $request): array",
                    "doc": "The user and key from the reset cookie, when the key is still good. @return array{0: ?array, 1: string}",
                    "shapes": [
                        "@return array{0: ?array, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 219,
                    "end": 232
                },
                {
                    "routes": [],
                    "name": "savePassword",
                    "static": false,
                    "visibility": "private",
                    "signature": "savePassword(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 234,
                    "end": 260
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "private",
                    "signature": "register(Minn\\Http\\Request $request, string $siteName): Minn\\Http\\Response",
                    "doc": "Registration, when the site allows it (else off to the sign-in page\nsaying so): the form (its landing as registration_redirect says), or\na POST through register_new_user, landing where the form said (else\non the sign-in page, to check the email), or back on the form with\nevery refusal in its words.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 269,
                    "end": 288
                },
                {
                    "routes": [],
                    "name": "validateReset",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateReset(Minn\\Content\\UserRecord $user, string $mismatch): Minn\\Login\\LoginNotices",
                    "doc": "A new password judged as the reference judges it: the mismatch, then\nwhatever validate_password_reset adds.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mismatch",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 294,
                    "end": 302
                },
                {
                    "routes": [],
                    "name": "parts",
                    "static": false,
                    "visibility": "private",
                    "signature": "parts(string $action, string $title, string $siteName, ?Minn\\Content\\UserRecord $user = NULL, ?Minn\\Login\\LoginNotices $notices = NULL): array",
                    "doc": "What plugins put on one of the sign-in pages (LoginHooks::page()), for\na page titled $title, with its notices printed; without plugins, the\nnotices alone. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "?Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "notices",
                            "type": "?Minn\\Login\\LoginNotices",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 309,
                    "end": 313
                },
                {
                    "routes": [],
                    "name": "tokenLogin",
                    "static": false,
                    "visibility": "private",
                    "signature": "tokenLogin(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The one-time login link `wp user login` prints (the captaincore\nhelper's contract): the token in user meta must match, be under\nfifteen minutes old, and is spent on use. Any failure reads the same\nso ids cannot be probed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 321,
                    "end": 352
                },
                {
                    "routes": [],
                    "name": "adminEmail",
                    "static": false,
                    "visibility": "private",
                    "signature": "adminEmail(Minn\\Http\\Request $request, string $siteName): Minn\\Http\\Response",
                    "doc": "The administration email check (action confirm_admin_email): the\nscreen, or on to where the sign-in was going once the address is\nconfirmed or the reminder put off; someone who may not answer it is\nsent to sign in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 406,
                    "end": 422
                },
                {
                    "routes": [],
                    "name": "safeRedirect",
                    "static": false,
                    "visibility": "private",
                    "signature": "safeRedirect(string $target): string",
                    "doc": "Only this site's own URLs are sign-in destinations: a path, or an\nabsolute URL on the home host. Anything else lands in the admin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "target",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 428,
                    "end": 442
                },
                {
                    "routes": [],
                    "name": "logout",
                    "static": false,
                    "visibility": "private",
                    "signature": "logout(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Logging out ends the server-side session as well as the cookies, and\nneeds the session's own nonce so a stray link cannot do it; without\nthe nonce the reader is asked first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 449,
                    "end": 472
                },
                {
                    "routes": [],
                    "name": "action",
                    "static": false,
                    "visibility": "private",
                    "signature": "action(Minn\\Http\\Request $request): string",
                    "doc": "The action asked for: a clean path segment (/minn-admin/login/reset)\nor wp-login.php's ?action=. The reset flow's two halves share the\n\"reset\" segment; a POST there saves the password.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 479,
                    "end": 488
                },
                {
                    "routes": [],
                    "name": "actionUrl",
                    "static": false,
                    "visibility": "private",
                    "signature": "actionUrl(Minn\\Http\\Request $request, string $action, string $query = ''): string",
                    "doc": "An action's address on the page this request came in on: a path under the clean page, a query on wp-login.php.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 491,
                    "end": 498
                },
                {
                    "routes": [],
                    "name": "siteName",
                    "static": false,
                    "visibility": "private",
                    "signature": "siteName(): string",
                    "doc": "The site's name, as the sign-in pages head themselves (\"Site\" when it has none).",
                    "shapes": [],
                    "params": [],
                    "line": 501,
                    "end": 504
                },
                {
                    "routes": [],
                    "name": "base",
                    "static": false,
                    "visibility": "private",
                    "signature": "base(Minn\\Http\\Request $request): string",
                    "doc": "The sign-in page this request arrived at: the clean page, or wp-login.php for the tooling that still names it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 507,
                    "end": 510
                },
                {
                    "routes": [],
                    "name": "tooManyAttempts",
                    "static": false,
                    "visibility": "private",
                    "signature": "tooManyAttempts(Minn\\Http\\Request $request, int $wait): Minn\\Http\\Response",
                    "doc": "A guessed-at address waits out the window; the page says so and the status lets tooling see it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wait",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 513,
                    "end": 518
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "private",
                    "signature": "render(Minn\\Http\\Request $request, Minn\\Login\\LoginNotices $notices, string $redirect): string",
                    "doc": "The sign-in page, its notices through wp_login_errors first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "notices",
                            "type": "Minn\\Login\\LoginNotices",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirect",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 521,
                    "end": 534
                }
            ]
        },
        {
            "name": "Minn\\Login\\LoginForm",
            "short": "LoginForm",
            "namespace": "Minn\\Login",
            "kind": "final class",
            "file": "public/minn/src/Minn/Login/LoginForm.php",
            "lines": 263,
            "doc": "The sign-in page markup.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html",
                "Minn\\Login\\LoginHooks",
                "Minn\\Login\\LoginNotices"
            ],
            "usedBy": [
                "Minn\\Login\\LoginController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CSS",
                    "value": "'body { margin:0; min-height:100vh; display:flex; align-items:center; justify-content:center;        background:#0b0b0d; color:#ececed; font:15px/1.5 \"Hanken Grotesk\",\"Helvetica Neue\",sans-serif; } form { width:320px; background:#151518; border:1px solid #242429; border-radius:14px; padding:28px; } h1 { font-size:19px; font-weight:700; margin:0 0 18px; } h1 a { color:inherit; text-decoration:none; } h1 a:focus-visible { outline:2px solid #8a80f8; outline-offset:2px; border-radius:4px; } .hint { font-size:13px; color:#9d9da7; margin:0 0 12px; } .hint a { color:#ececed; } .msg { background:#14291c; border:1px solid #1f4a2c; border-radius:8px; padding:9px 12px; font-size:13px; margin-bottom:12px; } label { display:block; font-size:12px; color:#9d9da7; margin:14px 0 5px; } input[type=text],input[type=password] { width:100%; box-sizing:border-box; padding:9px 11px;        background:#0b0b0d; border:1px solid #31313a; border-radius:8px; color:#ececed; font-size:14px; } .switch { display:flex; align-items:center; gap:10px; margin-top:16px; font-size:13px; color:#9d9da7; cursor:pointer; } .switch input { position:absolute; opacity:0; width:0; height:0; } .switch .knob { position:relative; flex:0 0 34px; width:34px; height:20px; border-radius:999px; background:#31313a;        border:1px solid #3a3a44; transition:background .15s, border-color .15s; } .switch .knob::after { content:\"\"; position:absolute; top:2px; left:2px; width:14px; height:14px; border-radius:50%;        background:#ececed; transition:transform .15s; } .switch input:checked + .knob { background:#6459f0; border-color:#6459f0; } .switch input:checked + .knob::after { transform:translateX(14px); background:#fff; } .switch input:focus-visible + .knob { outline:2px solid #8a80f8; outline-offset:2px; } button { margin-top:18px; width:100%; padding:10px; background:#6459f0; color:#fff; border:0;        border-radius:8px; font-size:14px; font-weight:600; cursor:pointer; } .err { background:rgba(228,107,107,.12); border:1px solid rgba(228,107,107,.4); color:#e46b6b;        padding:9px 11px; border-radius:8px; font-size:13px; margin-bottom:14px; } .err p, .msg p { margin:0; } .err p + p, .msg p + p { margin-top:6px; } .err ul { margin:0; padding-left:18px; } .err a, .msg a { color:inherit; }'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(string $siteName, string $action, string $redirectTo, string $error, string $message = '', string $lostPasswordUrl = '', array $parts = array ( )): string",
                    "doc": "The sign-in page's HTML. With plugins loaded, $parts carries what they\nput on the page (LoginHooks::page()): the title, head, body classes,\nthe header's link and words, a message above the form, fields inside\nit, and the footer, each where the reference's page puts it; and its\nanswers about the page's own furniture (LoginHooks::signInFurniture()):\nthe word on Remember Me, the lost-password link, the focus.",
                    "shapes": [
                        "@param array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, errors?: string, messages?: string, form?: string, footer?: string, rememberHelp?: string, lostLink?: string, separator?: string, autofocus?: bool} $parts"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirectTo",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "error",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "lostPasswordUrl",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, errors?: string, messages?: string, form?: string, footer?: string, rememberHelp?: string, lostLink?: string, separator?: string, autofocus?: bool}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "embedded",
                    "static": true,
                    "visibility": "public",
                    "signature": "embedded(array $args, string $top, string $middle, string $bottom): string",
                    "doc": "The sign-in form a theme embeds in a page, as distinct from the engine's\nown sign-in page above. Every label, id and class is a seam themes and\nplugins style against, so the shape is fixed.",
                    "shapes": [
                        "@param array<string, mixed> $args the parsed wp_login_form arguments"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the parsed wp_login_form arguments"
                        },
                        {
                            "name": "top",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "middle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bottom",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "lostPassword",
                    "static": true,
                    "visibility": "public",
                    "signature": "lostPassword(string $siteName, string $action, string $error, string $message, array $parts = array ( ), string $redirect = ''): string",
                    "doc": "The lost-password form: one field, posts to itself, keeping where the\nreader goes once the mail is out ($redirect, LoginHooks::lostPasswordPage()).",
                    "shapes": [
                        "@param array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, form?: string, footer?: string} $parts what plugins put on the page (LoginHooks::page())"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "error",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, form?: string, footer?: string}",
                            "default": "array ( )",
                            "doc": "what plugins put on the page (LoginHooks::page())"
                        },
                        {
                            "name": "redirect",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(string $siteName, string $action, string $error, string $login, string $email, string $redirect, array $parts = array ( )): string",
                    "doc": "The registration form: a username and an email, what plugins add,\nwhere a sign-up lands (registration_redirect's answer), and word that\nthe confirmation comes by email.",
                    "shapes": [
                        "@param array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, form?: string, footer?: string} $parts"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "error",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirect",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, form?: string, footer?: string}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "resetPassword",
                    "static": true,
                    "visibility": "public",
                    "signature": "resetPassword(string $siteName, string $action, string $key, string $login, string $error, array $parts = array ( )): string",
                    "doc": "The new-password form; the key rides in a hidden field as on the reference.",
                    "shapes": [
                        "@param array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, form?: string, footer?: string} $parts"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "error",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, headerUrl?: string, headerText?: string, message?: string, form?: string, footer?: string}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "confirmed",
                    "static": true,
                    "visibility": "public",
                    "signature": "confirmed(string $siteName, string $message, string $homeUrl, array $parts = array ( )): string",
                    "doc": "A personal data request confirmed from its mail: the page's word (the\nconfirmation message, which comes as markup) and the way to the site.",
                    "shapes": [
                        "@param array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string} $parts"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "homeUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 158,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "adminEmail",
                    "static": true,
                    "visibility": "public",
                    "signature": "adminEmail(string $siteName, string $action, string $redirect, string $remindUrl, array $screen, array $parts = array ( )): string",
                    "doc": "The administration email check an administrator's sign-in may stop at:\nthe site's address, to confirm (posting the nonce field) or change, and\na later reminder when one is offered. $screen is what\n_minn_admin_email_screen() handed over.",
                    "shapes": [
                        "@param array<string, string> $screen",
                        "@param array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string} $parts"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "redirect",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "remindUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "screen",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 173,
                    "end": 189
                },
                {
                    "routes": [],
                    "name": "failure",
                    "static": true,
                    "visibility": "public",
                    "signature": "failure(string $siteName, string $message): string",
                    "doc": "The plain page a refused link gets: the reason, nothing else to do.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 192,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "notice",
                    "static": true,
                    "visibility": "public",
                    "signature": "notice(string $siteName, string $title, string $message, string $loginUrl): string",
                    "doc": "A message with a link back to sign-in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "loginUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "checkEmail",
                    "static": true,
                    "visibility": "public",
                    "signature": "checkEmail(string $siteName, string $loginUrl, array $parts = array ( )): string",
                    "doc": "The check-your-email page: no form, only its word (in the message\narea) and the way back to sign in.",
                    "shapes": [
                        "@param array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string} $parts"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "loginUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 211,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "notices",
                    "static": true,
                    "visibility": "private",
                    "signature": "notices(string $error, string $message, array $parts): string",
                    "doc": "The error and message areas: the notices as printed (LoginNotices,\nthrough the plugins' filters) when the page has them, else the plain\nwords.",
                    "shapes": [
                        "@param array{errors?: string, messages?: string} $parts"
                    ],
                    "params": [
                        {
                            "name": "error",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{errors?: string, messages?: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 224,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": true,
                    "visibility": "private",
                    "signature": "page(string $siteName, string $title, string $error, string $message, string $form, array $parts = array ( )): string",
                    "doc": "",
                    "shapes": [
                        "@param array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string} $parts"
                    ],
                    "params": [
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "error",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "form",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "array{title?: string, head?: string, bodyClass?: string, message?: string, errors?: string, messages?: string, footer?: string}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 242
                }
            ]
        },
        {
            "name": "Minn\\Login\\LoginHooks",
            "short": "LoginHooks",
            "namespace": "Minn\\Login",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Login/LoginHooks.php",
            "lines": 140,
            "doc": "The sign-in as plugins see it, when they are loaded. The credentials go\nthrough the reference's authenticate chain, so a plugin may refuse a\nsign-in (a breached password, a second factor, a locked account) or\naccept one the password alone would not; wp_login_failed is the chain's\nown report. wp_login follows a good sign-in and wp_logout a sign-out.\nThe refusal is shown as the page's notices (LoginNotices): the chain's\nown as one vague sentence, a plugin's in its own words.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Login\\LoginNotices"
            ],
            "usedBy": [
                "Minn\\Login\\LoginController",
                "Minn\\Login\\LoginForm"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "authenticate",
                    "static": false,
                    "visibility": "public",
                    "signature": "authenticate(string $login, string $password): Minn\\Content\\UserRecord|WP_Error|null",
                    "doc": "The credentials through wp_authenticate and the authenticate filters,\nas the reference's sign-in runs them: the user, or the refusal (a\nWP_Error, or null when the chain gave none).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "signedIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "signedIn(Minn\\Content\\UserRecord $user): void",
                    "doc": "After a good sign-in. The chain read the user through the runtime,\nwhich cached their meta before the new session was written, so the\ncache is let go first: a plugin reading session_tokens on wp_login\n(CleanTalk keeps the first session's address) must see the new one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "enter",
                    "static": false,
                    "visibility": "public",
                    "signature": "enter(string $action): void",
                    "doc": "A sign-in page request arriving, as wp-login.php announces it: login_init, then login_form_{action}.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": false,
                    "visibility": "public",
                    "signature": "page(string $action, string $title, string $siteName, string $homeUrl, ?Minn\\Content\\UserRecord $user = NULL, ?Minn\\Login\\LoginNotices $notices = NULL): array",
                    "doc": "What plugins put on the sign-in page, where the reference's page puts\nit: the title (login_title), the head (login_enqueue_scripts, then\nlogin_head, which prints the styles and scripts), the body classes\n(login_body_class), the header's link and words (login_headerurl,\nlogin_headertext), the message above the form (login_message), the\npage's notices (login_errors, login_messages), the fields inside the\nform (login_form, lostpassword_form or resetpass_form, as the page\nis), and the footer (login_footer).",
                    "shapes": [
                        "@return array{title: string, head: string, bodyClass: string, headerUrl: string, headerText: string, message: string, errors?: string, messages?: string, form: string, footer: string}"
                    ],
                    "params": [
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "homeUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "?Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "notices",
                            "type": "?Minn\\Login\\LoginNotices",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "landing",
                    "static": false,
                    "visibility": "public",
                    "signature": "landing(string $redirect, string $requested, Minn\\Content\\UserRecord|WP_Error|null $user): string",
                    "doc": "Where a sign-in lands, as login_redirect says (the requested address beside it, and the user it found or why not).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "redirect",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "requested",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord|WP_Error|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "leaving",
                    "static": false,
                    "visibility": "public",
                    "signature": "leaving(string $redirect, string $requested, int $userId): string",
                    "doc": "Where a sign-out lands, as logout_redirect says.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "redirect",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "requested",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "signedOut",
                    "static": false,
                    "visibility": "public",
                    "signature": "signedOut(int $userId): void",
                    "doc": "After a sign-out ended the session.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "signInFurniture",
                    "static": false,
                    "visibility": "public",
                    "signature": "signInFurniture(string $lostPasswordUrl): array",
                    "doc": "What the sign-in page asks plugins about its own furniture, as the\nreference's page asks: the word beside Remember Me\n(login_remember_me_help_text), the lost-password link\n(lost_password_html_link), what stands between the page's links\n(login_link_separator), and whether the name field takes the focus\n(enable_login_autofocus).",
                    "shapes": [
                        "@return array{rememberHelp: string, lostLink: string, separator: string, autofocus: bool}"
                    ],
                    "params": [
                        {
                            "name": "lostPasswordUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "lostPasswordPage",
                    "static": false,
                    "visibility": "public",
                    "signature": "lostPasswordPage(string $requested, WP_Error $errors): string",
                    "doc": "The lost-password page's questions, as the reference's page asks them:\nwhat stands between its links, where the form sends a reader once the\nmail is out (lostpassword_redirect, kept in the form), and lost_password\nwith the page's errors. Returns the address the form keeps.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "requested",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "errors",
                            "type": "WP_Error",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "postPasswordExpiry",
                    "static": false,
                    "visibility": "public",
                    "signature": "postPasswordExpiry(int $expires): int",
                    "doc": "When a post password's cookie runs out (post_password_expires; 0 is when the browser closes).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "expires",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 159
                }
            ]
        },
        {
            "name": "Minn\\Login\\LoginNotices",
            "short": "LoginNotices",
            "namespace": "Minn\\Login",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Login/LoginNotices.php",
            "lines": 113,
            "doc": "What a sign-in page tells the reader, held as the reference's pages hold\nit: notices by code, each an error or (severity \"message\") a message,\ntheir words as HTML. Printed, the errors are one paragraph, or a list\nwhen there are several, and the messages a paragraph each; with plugins\nloaded the sign-in page hands them through wp_login_errors first, and\nevery page prints them through login_errors and login_messages. The\nauthenticate chain's own refusals read as the engine's one sentence, so\na page never says which half of a sign-in was wrong.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html"
            ],
            "usedBy": [
                "Minn\\Login\\LoginController",
                "Minn\\Login\\LoginForm",
                "Minn\\Login\\LoginHooks"
            ],
            "constructor": {
                "signature": "__construct(array $notices = array ( ))",
                "doc": "",
                "shapes": [
                    "@param list<array{0: string, 1: string, 2: string}> $notices code, HTML, severity ('' or 'message')"
                ],
                "params": [
                    {
                        "name": "notices",
                        "type": "array",
                        "shape": "list<array{0: string, 1: string, 2: string}>",
                        "default": "array ( )",
                        "doc": "code, HTML, severity ('' or 'message')"
                    }
                ],
                "visibility": "private",
                "line": 28,
                "end": 31
            },
            "cases": [],
            "constants": [
                {
                    "name": "REFUSALS",
                    "value": "array (   0 => 'empty_username',   1 => 'empty_password',   2 => 'invalid_username',   3 => 'invalid_email',   4 => 'incorrect_password',   5 => 'authentication_failed', )",
                    "doc": "The chain's own refusals, which the page words as one.",
                    "visibility": "private"
                },
                {
                    "name": "REFUSED",
                    "value": "'<strong>Error:</strong> The username or password you entered is incorrect.'",
                    "doc": "The one sentence for any of them.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "notices",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "none",
                    "static": true,
                    "visibility": "public",
                    "signature": "none(): self",
                    "doc": "No notices.",
                    "shapes": [],
                    "params": [],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": true,
                    "visibility": "public",
                    "signature": "plain(string $code, string $text, string $severity = ''): self",
                    "doc": "The engine's own plain words as one notice; an \"Error:\" lead takes the reference's strong label.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "severity",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "refused",
                    "static": true,
                    "visibility": "public",
                    "signature": "refused(mixed $refusal): self",
                    "doc": "A sign-in refused: the chain's refusal, or (none given, or not one) the engine's one sentence.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "refusal",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(mixed $errors): self",
                    "doc": "The notices a WP_Error holds (a plugin may have handed back something else: then none).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "errors",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "with",
                    "static": false,
                    "visibility": "public",
                    "signature": "with(string $code, string $html, string $severity = ''): self",
                    "doc": "These notices and one more.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "severity",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "isEmpty",
                    "static": false,
                    "visibility": "public",
                    "signature": "isEmpty(): bool",
                    "doc": "Whether there are none.",
                    "shapes": [],
                    "params": [],
                    "line": 75,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "wpError",
                    "static": false,
                    "visibility": "public",
                    "signature": "wpError(): WP_Error",
                    "doc": "As the WP_Error plugins are handed.",
                    "shapes": [],
                    "params": [],
                    "line": 81,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "forSignIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "forSignIn(string $redirect): self",
                    "doc": "The sign-in page's notices after wp_login_errors, which is handed where a sign-in would land.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "redirect",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "areas",
                    "static": false,
                    "visibility": "public",
                    "signature": "areas(): array",
                    "doc": "The error and message areas' HTML ('' for an area with none),\nthrough login_errors and login_messages.",
                    "shapes": [
                        "@return array{errors: string, messages: string}"
                    ],
                    "params": [],
                    "line": 102,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "words",
                    "static": true,
                    "visibility": "private",
                    "signature": "words(string $text): string",
                    "doc": "Plain words as notice HTML.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 130
                }
            ]
        },
        {
            "name": "Minn\\Login\\ServeLogin",
            "short": "ServeLogin",
            "namespace": "Minn\\Login",
            "kind": "final class",
            "file": "public/minn/src/Minn/Login/ServeLogin.php",
            "lines": 3,
            "doc": "Thrown by the wp-login.php shape file when plugin code require's it\nmid-request (a hide-login plugin serving its own sign-in URL, the\nperfmatters pattern). Engine::respond() catches it and answers the\ncurrent request with the sign-in surface.",
            "implements": [
                "Throwable",
                "Stringable"
            ],
            "extends": "Exception",
            "uses": [],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Runtime\\Plugins"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": []
        },
        {
            "name": "Minn\\Mail\\AddressRules",
            "short": "AddressRules",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/AddressRules.php",
            "lines": 91,
            "doc": "Email addresses: the checks a mailer can apply (PHP's filter, the\nRFC 5322 grammar with comments, quoted local parts and domain literals,\nthe HTML5 form rule), parsing an address list, and the domain of an\naddress in ASCII.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\Transfer"
            ],
            "usedBy": [
                "Minn\\Mail\\Composer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "HTML5",
                    "value": "'/^[a-zA-Z0-9.!#$%&\\'*+\\\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "valid",
                    "static": true,
                    "visibility": "public",
                    "signature": "valid(string $address, string $pattern): bool",
                    "doc": "Whether the address passes the named check (\"php\", \"pcre\", \"pcre8\", \"html5\", \"noregex\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pattern",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "parseList",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseList(string $list, string $charset): array",
                    "doc": "The addresses in a comma-separated list, as the reference's simple\nparser reads one: split at every comma, quoted or not, each entry\nwith its display name (encoded words decoded into $charset); entries\nthat are not valid addresses are left out.",
                    "shapes": [
                        "@return list<array{name: string, address: string}>"
                    ],
                    "params": [
                        {
                            "name": "list",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "asciiDomain",
                    "static": true,
                    "visibility": "public",
                    "signature": "asciiDomain(string $address, string $charset): string",
                    "doc": "The address with its domain in ASCII (IDNA), the domain read from $charset first; unchanged when it cannot be.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "quoted",
                    "static": true,
                    "visibility": "public",
                    "signature": "quoted(string $text): string",
                    "doc": "The text as an RFC 822 quoted string when it holds a character that needs one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "rfc5322",
                    "static": true,
                    "visibility": "private",
                    "signature": "rfc5322(string $address): bool",
                    "doc": "RFC 5322 addr-spec with comments and folding white space, a quoted local part or a domain literal; local part 64, label 63 characters.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 102
                }
            ]
        },
        {
            "name": "Minn\\Mail\\ChangeNotices",
            "short": "ChangeNotices",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/ChangeNotices.php",
            "lines": 30,
            "doc": "The notices the reference mails a user when their password or email\naddress changes, as templates: plugins filter them (password_change_email,\nemail_change_email) with the placeholders still in them and the site name\nstill a %s in the subject, and fill() finishes them after.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "password",
                    "static": true,
                    "visibility": "public",
                    "signature": "password(): array",
                    "doc": "The password notice: subject and message, placeholders unfilled. @return array{subject: string, message: string}",
                    "shapes": [
                        "@return array{subject: string, message: string}"
                    ],
                    "params": [],
                    "line": 16,
                    "end": 22
                },
                {
                    "routes": [],
                    "name": "email",
                    "static": true,
                    "visibility": "public",
                    "signature": "email(): array",
                    "doc": "The email-address notice, sent to the address being left: subject and message, placeholders unfilled. @return array{subject: string, message: string}",
                    "shapes": [
                        "@return array{subject: string, message: string}"
                    ],
                    "params": [],
                    "line": 25,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "fill",
                    "static": true,
                    "visibility": "public",
                    "signature": "fill(string $text, array $values): string",
                    "doc": "A template's placeholders filled with their values. @param array<string, string> $values placeholder name (USERNAME, ...) => value",
                    "shapes": [
                        "@param array<string, string> $values placeholder name (USERNAME, ...) => value"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "values",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "placeholder name (USERNAME, ...) => value"
                        }
                    ],
                    "line": 34,
                    "end": 41
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Composer",
            "short": "Composer",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/Composer.php",
            "lines": 253,
            "doc": "A message as the reference's mailer writes it: the header block (Date,\nthe address lines, Subject, Message-ID, X-Mailer, custom headers,\nMIME-Version), the MIME header for its type, and the body, multipart\nwhen it has an alternative, inline parts or attachments. Boundaries are\n\"b1=_{id}\" to \"b3=_{id}\"; a 7-bit-clean body declared 8bit goes out as\n7bit us-ascii, and a body with a line past 998 characters as\nquoted-printable.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\AddressRules",
                "Minn\\Mail\\Draft",
                "Minn\\Mail\\Mailer",
                "Minn\\Mail\\Transfer"
            ],
            "usedBy": [
                "Minn\\Mail\\Mailer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ICAL_METHODS",
                    "value": "array (   0 => 'REQUEST',   1 => 'PUBLISH',   2 => 'REPLY',   3 => 'ADD',   4 => 'CANCEL',   5 => 'REFRESH',   6 => 'COUNTER',   7 => 'DECLINECOUNTER', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "body",
                    "static": true,
                    "visibility": "public",
                    "signature": "body(Minn\\Mail\\Draft $d, string $id): array",
                    "doc": "The body and the encoding a single-part message declares.",
                    "shapes": [
                        "@return array{body: string, encoding: string}"
                    ],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "headers",
                    "static": true,
                    "visibility": "public",
                    "signature": "headers(Minn\\Mail\\Draft $d, string $id, string $hostname, string $encoding): string",
                    "doc": "The header block, MIME-Version and the MIME header included.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hostname",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "encoding",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "mimeHeaders",
                    "static": true,
                    "visibility": "public",
                    "signature": "mimeHeaders(Minn\\Mail\\Draft $d, string $id, string $encoding): string",
                    "doc": "The MIME header for the message's type: the content type (with its boundary) and the transfer encoding.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "encoding",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "mailOnlyHeaders",
                    "static": true,
                    "visibility": "public",
                    "signature": "mailOnlyHeaders(Minn\\Mail\\Draft $d): string",
                    "doc": "The To and Subject lines PHP's mail() takes as arguments, written after the headers in the sent copy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "addressLine",
                    "static": true,
                    "visibility": "public",
                    "signature": "addressLine(Minn\\Mail\\Draft $d, string $name, array $list): string",
                    "doc": "\"Name: a, b\" for a list of [address, name] pairs.",
                    "shapes": [
                        "@param list<array{0: string, 1: string}> $list"
                    ],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "list",
                            "type": "array",
                            "shape": "list<array{0: string, 1: string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "address",
                    "static": true,
                    "visibility": "public",
                    "signature": "address(Minn\\Mail\\Draft $d, array $pair): string",
                    "doc": "One address as a header writes it: the address alone, or the name (as a phrase) and the address in angle brackets.",
                    "shapes": [
                        "@param array{0: string, 1: string} $pair"
                    ],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pair",
                            "type": "array",
                            "shape": "array{0: string, 1: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "secure",
                    "static": true,
                    "visibility": "public",
                    "signature": "secure(string $text): string",
                    "doc": "Header text with any line break taken out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "messageId",
                    "static": true,
                    "visibility": "public",
                    "signature": "messageId(string $given, string $id, string $hostname): string",
                    "doc": "The message id given when it is well formed, else one made from the id and the host name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "given",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hostname",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 245,
                    "end": 248
                },
                {
                    "routes": [],
                    "name": "encodingFor",
                    "static": true,
                    "visibility": "private",
                    "signature": "encodingFor(Minn\\Mail\\Draft $d, string $text): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string, 1: string} the encoding and charset a body part declares"
                    ],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "partHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "partHead(Minn\\Mail\\Draft $d, string $boundary, string $charset, string $contentType, string $encoding): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "boundary",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "encoding",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "related",
                    "static": true,
                    "visibility": "private",
                    "signature": "related(Minn\\Mail\\Draft $d, string $outer, string $inner): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "outer",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "inner",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "alternative",
                    "static": true,
                    "visibility": "private",
                    "signature": "alternative(Minn\\Mail\\Draft $d, string $outer, string $inner): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "outer",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "inner",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 161,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "end",
                    "static": true,
                    "visibility": "private",
                    "signature": "end(Minn\\Mail\\Draft $d, string $boundary): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "boundary",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 167,
                    "end": 170
                },
                {
                    "routes": [],
                    "name": "calendar",
                    "static": true,
                    "visibility": "private",
                    "signature": "calendar(Minn\\Mail\\Draft $d, string $boundary, string $after): string",
                    "doc": "A text/calendar part when the message carries one, followed by $after;\nits method is the calendar's own (upper-cased) when it is a known one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "boundary",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "after",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "date",
                    "static": true,
                    "visibility": "private",
                    "signature": "date(string $given): string",
                    "doc": "The date given when it reads as a moment already past, else now; either way as RFC 5322 writes it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "given",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "attachAll",
                    "static": true,
                    "visibility": "private",
                    "signature": "attachAll(Minn\\Mail\\Draft $d, string $disposition, string $boundary): string",
                    "doc": "Every attachment of one disposition as parts of the boundary, then the boundary's end; an identical one, or a repeated inline id, goes once.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "disposition",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "boundary",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 211
                },
                {
                    "routes": [],
                    "name": "attachmentHead",
                    "static": true,
                    "visibility": "private",
                    "signature": "attachmentHead(Minn\\Mail\\Draft $d, array $a, string $boundary): string",
                    "doc": "",
                    "shapes": [
                        "@param array<int, mixed> $a"
                    ],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "a",
                            "type": "array",
                            "shape": "array<int, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "boundary",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 214,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "attachmentData",
                    "static": true,
                    "visibility": "private",
                    "signature": "attachmentData(array $a): string",
                    "doc": "",
                    "shapes": [
                        "@param array<int, mixed> $a"
                    ],
                    "params": [
                        {
                            "name": "a",
                            "type": "array",
                            "shape": "array<int, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 242
                },
                {
                    "routes": [],
                    "name": "extraLines",
                    "static": true,
                    "visibility": "private",
                    "signature": "extraLines(Minn\\Mail\\Draft $d): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string> X-Priority, X-Mailer, Disposition-Notification-To and the custom headers"
                    ],
                    "params": [
                        {
                            "name": "d",
                            "type": "Minn\\Mail\\Draft",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 251,
                    "end": 269
                }
            ]
        },
        {
            "name": "Minn\\Mail\\DataLines",
            "short": "DataLines",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/DataLines.php",
            "lines": 28,
            "doc": "A message cut into the lines SMTP DATA sends. Any line break (CRLF, CR\nor LF) ends a line. A line longer than 998 characters is cut at its last\nspace within the first 998 (the space dropped), or at 997 when there is\nnone; in the header block (when the first line reads \"Name: ...\" with no\nspace in the name, up to the first empty line) each continuation starts\nwith a tab. Dot stuffing is the sender's job, after the cut.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\SmtpSession"
            ],
            "usedBy": [
                "Minn\\Mail\\SmtpSession"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "split",
                    "static": true,
                    "visibility": "public",
                    "signature": "split(string $message): array",
                    "doc": "The lines to send, without their line endings.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 41
                }
            ]
        },
        {
            "name": "Minn\\Mail\\DebugOutput",
            "short": "DebugOutput",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/DebugOutput.php",
            "lines": 38,
            "doc": "Where a mailer's debug text goes, as its Debugoutput setting names it:\n\"echo\" (a timestamp and a tab, continuation lines indented under the\ntext), \"html\" (entity-escaped, line breaks dropped, ending in <br>),\n\"error_log\", a PSR-3 logger's debug(), or any other callable, which gets\nthe text and its level. The two printed forms come back as text for the\ncaller to print; the others are delivered here and return null.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "INDENT",
                    "value": "'                    \t                  '",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "smtp",
                    "static": true,
                    "visibility": "public",
                    "signature": "smtp(mixed $how, string $text, int $level): ?string",
                    "doc": "Debug text from the SMTP client: the text to print, or null once delivered; its html form carries a timestamp.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "how",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "mailer",
                    "static": true,
                    "visibility": "public",
                    "signature": "mailer(mixed $how, string $text, int $level): ?string",
                    "doc": "Debug text from the mailer itself: the text to print, or null once delivered; its html form has no timestamp.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "how",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "private",
                    "signature": "write(mixed $how, string $text, int $level): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "how",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "private",
                    "signature": "html(string $text): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Dkim",
            "short": "Dkim",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/Dkim.php",
            "lines": 110,
            "doc": "DKIM signatures (RFC 6376) as the reference's mailer writes them:\nrsa-sha256, relaxed header and simple body canonicalization, the\nstandard headers signed in the order they appear (plus any extra ones\nthe caller names), an optional identity, the signed headers copied into\nz= when asked, and the signature folded in 73-character pieces.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\Transfer"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $domain, string $selector, string $key, string $passphrase, string $identity)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "domain",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "selector",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "key",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": "the private key (PEM text)"
                    },
                    {
                        "name": "passphrase",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "identity",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 28
            },
            "cases": [],
            "constants": [
                {
                    "name": "SIGNED",
                    "value": "array (   0 => 'from',   1 => 'to',   2 => 'cc',   3 => 'date',   4 => 'subject',   5 => 'reply-to',   6 => 'message-id',   7 => 'content-type',   8 => 'mime-version',   9 => 'x-mailer', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "copyHeaders",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "domain",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "selector",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "key",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "passphrase",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "identity",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "copyingHeaders",
                    "static": false,
                    "visibility": "public",
                    "signature": "copyingHeaders(): self",
                    "doc": "The same signer, copying the signed headers into z= as well.",
                    "shapes": [],
                    "params": [],
                    "line": 31,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "quotedPrintable",
                    "static": true,
                    "visibility": "public",
                    "signature": "quotedPrintable(string $text): string",
                    "doc": "Text with everything outside the DKIM-safe printable set written as =XX.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "headers",
                    "static": true,
                    "visibility": "public",
                    "signature": "headers(string $text): string",
                    "doc": "Relaxed header canonicalization: unfolded, names lower-cased, runs of space collapsed, values trimmed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "body",
                    "static": true,
                    "visibility": "public",
                    "signature": "body(string $body): string",
                    "doc": "Simple body canonicalization: CRLF line endings and exactly one at the end.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "sign",
                    "static": false,
                    "visibility": "public",
                    "signature": "sign(string $text): ?string",
                    "doc": "The base64 RSA-SHA256 signature of the text, or null when the key cannot be read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "signatureHeader",
                    "static": false,
                    "visibility": "public",
                    "signature": "signatureHeader(string $headerBlock, string $subject, string $body, int $time, array $extra, string $eol): ?string",
                    "doc": "The DKIM-Signature header for a message, signed at $time.",
                    "shapes": [
                        "@param list<string> $extra lower-case names of further headers to sign"
                    ],
                    "params": [
                        {
                            "name": "headerBlock",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subject",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "time",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "lower-case names of further headers to sign"
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "signedHeaders",
                    "static": false,
                    "visibility": "private",
                    "signature": "signedHeaders(string $headerBlock, array $extra): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $extra",
                        "@return array{0: list<string>, 1: list<string>, 2: list<string>} names, header lines and z= copies"
                    ],
                    "params": [
                        {
                            "name": "headerBlock",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 122
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Draft",
            "short": "Draft",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/Draft.php",
            "lines": 66,
            "doc": "Everything a message is composed from: the transport it goes out on\n(which decides the line ending, the header line length, and where To,\nSubject and Bcc are written), the envelope, the content, the headers,\nand the attachments as [path or data, file name, name, encoding, type,\nis data, disposition, content id]. $toHeader is \"list\" (To, or\nundisclosed-recipients when there is neither To nor Cc) or \"omit\" (one\nmessage per recipient, the address given to each send instead).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\HeaderWords"
            ],
            "usedBy": [
                "Minn\\Mail\\Composer",
                "Minn\\Mail\\Mailer"
            ],
            "constructor": {
                "signature": "__construct(string $mailer, string $eol, string $charset, string $contentType, string $encoding, string $subject, string $body, string $altBody, string $ical, string $from, string $fromName, array $to, array $cc, array $bcc, array $replyTo, string $messageId, string $messageDate, ?int $priority, string $xMailer, string $confirmReadingTo, array $customHeaders, array $attachments, string $toHeader = 'list')",
                "doc": "",
                "shapes": [
                    "@param list<array{0: string, 1: string}> $to address and name pairs, as are $cc, $bcc and $replyTo",
                    "@param list<array{0: string, 1: string}> $customHeaders name and value pairs",
                    "@param list<array<int, mixed>> $attachments"
                ],
                "params": [
                    {
                        "name": "mailer",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "eol",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "charset",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentType",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "encoding",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "subject",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "body",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "altBody",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "ical",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "from",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "fromName",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "to",
                        "type": "array",
                        "shape": "list<array{0: string, 1: string}>",
                        "default": null,
                        "doc": "address and name pairs, as are $cc, $bcc and $replyTo"
                    },
                    {
                        "name": "cc",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bcc",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "replyTo",
                        "type": "array",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "messageId",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "messageDate",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "priority",
                        "type": "?int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "xMailer",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "confirmReadingTo",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "customHeaders",
                        "type": "array",
                        "shape": "list<array{0: string, 1: string}>",
                        "default": null,
                        "doc": "name and value pairs"
                    },
                    {
                        "name": "attachments",
                        "type": "array",
                        "shape": "list<array<int, mixed>>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "toHeader",
                        "type": "string",
                        "shape": "",
                        "default": "'list'",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 50
            },
            "cases": [],
            "constants": [
                {
                    "name": "VERSION",
                    "value": "'7.1.1'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "mailer",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "eol",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "charset",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "contentType",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "encoding",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "subject",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "altBody",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "ical",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "from",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "fromName",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "to",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "cc",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "bcc",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "replyTo",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "messageId",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "messageDate",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "priority",
                    "type": "?int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "xMailer",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "confirmReadingTo",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "customHeaders",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "attachments",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "toHeader",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "lineLength",
                    "static": false,
                    "visibility": "public",
                    "signature": "lineLength(): int",
                    "doc": "The longest header line the transport takes before it must fold.",
                    "shapes": [],
                    "params": [],
                    "line": 53,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "encodeHeader",
                    "static": false,
                    "visibility": "public",
                    "signature": "encodeHeader(string $text, string $position = 'text'): string",
                    "doc": "Header text encoded for this message's charset and transport.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "string",
                            "shape": "",
                            "default": "'text'",
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "messageType",
                    "static": false,
                    "visibility": "public",
                    "signature": "messageType(): string",
                    "doc": "Which parts the message has: plain, or \"alt\", \"inline\", \"attach\" joined by \"_\".",
                    "shapes": [],
                    "params": [],
                    "line": 65,
                    "end": 80
                }
            ]
        },
        {
            "name": "Minn\\Mail\\HeaderWords",
            "short": "HeaderWords",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/HeaderWords.php",
            "lines": 112,
            "doc": "Header text as mail carries it (RFC 2047): left alone when it is plain\nand short enough, quoted when a phrase needs it, otherwise encoded words\nin Q (mostly ASCII) or B (mostly not), folded to the line length the\ntransport allows: 63 for PHP's mail(), 998 otherwise. Plain text only\nbecomes an encoded word to be folded when it is too long for one line.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\TextWrap",
                "Minn\\Mail\\Transfer"
            ],
            "usedBy": [
                "Minn\\Mail\\Draft"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAIL_LINE",
                    "value": "63",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SMTP_LINE",
                    "value": "998",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ATEXT_PHRASE",
                    "value": "'/[^A-Za-z0-9!#$%&\\'*+\\\\/=?^_`{|}~ -]/'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "public",
                    "signature": "encode(string $text, string $position, string $charset, int $lineLength, string $eol): string",
                    "doc": "The header text encoded for its position (\"text\", \"phrase\" or \"comment\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lineLength",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": "the transport's limit (MAIL_LINE or SMTP_LINE)"
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "q",
                    "static": true,
                    "visibility": "public",
                    "signature": "q(string $text, string $position = 'text'): string",
                    "doc": "RFC 2047 \"Q\" encoding for a position: spaces as \"_\", and the characters the position cannot carry as =XX.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "string",
                            "shape": "",
                            "default": "'text'",
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "base64Lines",
                    "static": true,
                    "visibility": "public",
                    "signature": "base64Lines(string $text, string $charset): array",
                    "doc": "Base64 lines of at most 63 characters cut at whole characters, so a\nmultibyte character is never split across encoded words.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "public",
                    "signature": "decode(string $value, string $charset): string",
                    "doc": "Encoded words decoded (adjacent ones joined) and converted into $charset; other text passes through.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "specials",
                    "static": true,
                    "visibility": "private",
                    "signature": "specials(string $text, string $position): int",
                    "doc": "How many characters the position counts as needing encoding.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "bLines",
                    "static": true,
                    "visibility": "private",
                    "signature": "bLines(string $text, string $charset, int $width): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "qLines",
                    "static": true,
                    "visibility": "private",
                    "signature": "qLines(string $text, string $position, string $charset, int $width, string $eol): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 124
                }
            ]
        },
        {
            "name": "Minn\\Mail\\HostEntry",
            "short": "HostEntry",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/HostEntry.php",
            "lines": 36,
            "doc": "One entry of a mailer's Host setting (\"host\", \"host:port\",\n\"ssl://host:465\", \"tls://host\"; entries are separated by semicolons):\nthe security prefix, the host and the port. Only ssl:// and tls:// are\nprefixes; anything else stays part of the host and fails the host check.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $prefix, string $host, ?int $port)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "prefix",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "host",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "port",
                        "type": "?int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 17
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "prefix",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "host",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "port",
                    "type": "?int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "parseAll",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseAll(string $hosts): array",
                    "doc": "The entries of a Host setting, null where one cannot be read.",
                    "shapes": [
                        "@return list<array{0: string, 1: self|null}> the trimmed entry text and its reading"
                    ],
                    "params": [
                        {
                            "name": "hosts",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "validHost",
                    "static": true,
                    "visibility": "public",
                    "signature": "validHost(mixed $host): bool",
                    "doc": "Whether a host name, IPv4 address or bracketed IPv6 address is well formed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "host",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Mail\\HtmlMessage",
            "short": "HtmlMessage",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/HtmlMessage.php",
            "lines": 55,
            "doc": "What a mailer reads out of an HTML message: the images it can carry\ninline (a src or background naming a file under the base directory, or\na data: URI of a raster image), the content id each one gets (the first\n32 hex digits of a SHA-256 of the URL, or of a data URI's bytes, at\n\"phpmailer.0\"), and the plain-text version (head, style and script\ndropped, tags stripped, entities decoded into the charset).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "NO_TEXT",
                    "value": "'This is an HTML-only message. To view it, activate HTML in your email application.'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "images",
                    "static": true,
                    "visibility": "public",
                    "signature": "images(string $html): array",
                    "doc": "Every quoted src or background value, in document order.",
                    "shapes": [
                        "@return list<array{attribute: string, url: string}>"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "dataImage",
                    "static": true,
                    "visibility": "public",
                    "signature": "dataImage(string $url): ?array",
                    "doc": "A data: URI's bytes and type when it is a raster image, else null.",
                    "shapes": [
                        "@return array{0: string, 1: string}|null"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "localPath",
                    "static": true,
                    "visibility": "public",
                    "signature": "localPath(string $url): ?string",
                    "doc": "A relative path with no scheme and no step up out of the base directory, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "cid",
                    "static": true,
                    "visibility": "public",
                    "signature": "cid(string $source): string",
                    "doc": "The content id the mailer gives an image.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "public",
                    "signature": "text(string $html, string $charset): string",
                    "doc": "The plain-text version of an HTML message.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 68
                }
            ]
        },
        {
            "name": "Minn\\Mail\\MailHeaders",
            "short": "MailHeaders",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/MailHeaders.php",
            "lines": 83,
            "doc": "The headers argument of wp_mail() read the way the reference reads it:\na string split into lines (CRLF or LF) or a list of lines; a line\nwithout a colon is skipped. From gives an address and a name (quotes\ndropped); Cc, Bcc and Reply-To add comma-separated entries (a comma\ninside quotes still splits); Content-Type gives a type and either a\ncharset or a boundary (a boundary leaves the charset empty); every\nother header is kept by name, the last of a name winning.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(?string $fromEmail, ?string $fromName, array $cc, array $bcc, array $replyTo, ?string $contentType, ?string $charset, string $boundary, array $custom)",
                "doc": "",
                "shapes": [
                    "@param list<string> $cc",
                    "@param list<string> $bcc",
                    "@param list<string> $replyTo",
                    "@param array<string, string> $custom"
                ],
                "params": [
                    {
                        "name": "fromEmail",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "fromName",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "cc",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bcc",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "replyTo",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentType",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "charset",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "boundary",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "custom",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 35
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "fromEmail",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "fromName",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "cc",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "bcc",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "replyTo",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "contentType",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "charset",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "boundary",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "custom",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(mixed $headers): self",
                    "doc": "The headers argument, as a string of lines or a list of them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "headers",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "recipient",
                    "static": true,
                    "visibility": "public",
                    "signature": "recipient(string $entry): array",
                    "doc": "One recipient entry as [address, name]: \"Name <address>\" (the name as written) or a bare address.",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "entry",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "from",
                    "static": true,
                    "visibility": "private",
                    "signature": "from(string $content): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string|null, 1: string|null}"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "contentType",
                    "static": true,
                    "visibility": "private",
                    "signature": "contentType(string $content, array $current): array",
                    "doc": "",
                    "shapes": [
                        "@param array{0: string|null, 1: string|null, 2: string} $current",
                        "@return array{0: string|null, 1: string|null, 2: string}"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "current",
                            "type": "array",
                            "shape": "array{0: string|null, 1: string|null, 2: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 97
                }
            ]
        },
        {
            "name": "Minn\\Mail\\MailLog",
            "short": "MailLog",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/MailLog.php",
            "lines": 45,
            "doc": "The engine's development transport: each message as one JSON line\n(time, from, to, subject, body) appended to wp-content/minn-mail.log.php,\nnothing sent. The file opens with a line that returns from any request\nfor it, so a web server that runs PHP never serves the reset links it\nholds (audit Low: it was a plain .log under the webroot).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Mail\\Mailer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "GUARD",
                    "value": "'<?php return; ?> '",
                    "doc": "The first line of the file: PHP that returns before the rest is sent.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "forSite",
                    "static": true,
                    "visibility": "public",
                    "signature": "forSite(): string",
                    "doc": "The site's log file.",
                    "shapes": [],
                    "params": [],
                    "line": 22,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $file): array",
                    "doc": "The messages a log file holds, oldest first (its guard line aside).",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "public",
                    "signature": "write(string $file, string $from, string $fromName, array $to, string $subject, string $body): bool",
                    "doc": "Appends one message; false when the file cannot be written.",
                    "shapes": [
                        "@param list<string> $to"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fromName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subject",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Mail\\MailSettings",
            "short": "MailSettings",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/MailSettings.php",
            "lines": 71,
            "doc": "How mail leaves the site, from the minn_mail option (JSON or a serialized\narray): the PHP mail\nfunction by default, SMTP when configured, or a log file for development.\nThe sender defaults to the site name at a no-reply address on the home host.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Json",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\MinnCommand",
                "Minn\\Mail\\Mailer",
                "Minn\\Mail\\Smtp",
                "Minn\\Ops\\Diagnostics"
            ],
            "constructor": {
                "signature": "__construct(string $transport = 'mail', string $host = '', int $port = 587, string $encryption = 'tls', string $username = '', string $password = '', string $fromEmail = '', string $fromName = '')",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "transport",
                        "type": "string",
                        "shape": "'mail'|'smtp'|'log'",
                        "default": "'mail'",
                        "doc": ""
                    },
                    {
                        "name": "host",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "port",
                        "type": "int",
                        "shape": "",
                        "default": "587",
                        "doc": ""
                    },
                    {
                        "name": "encryption",
                        "type": "string",
                        "shape": "'none'|'ssl'|'tls'",
                        "default": "'tls'",
                        "doc": ""
                    },
                    {
                        "name": "username",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "password",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "fromEmail",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "fromName",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 35
            },
            "cases": [],
            "constants": [
                {
                    "name": "OPTION",
                    "value": "'minn_mail'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "transport",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "host",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "port",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "encryption",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "username",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "password",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "fromEmail",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "fromName",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "stored",
                    "static": true,
                    "visibility": "public",
                    "signature": "stored(Minn\\Content\\Site $site): array",
                    "doc": "What the minn_mail option holds, without defaults: empty when the site\nhas not configured mail.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "fromSite",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromSite(Minn\\Content\\Site $site): self",
                    "doc": "The site's mail settings from its minn_mail option, or the defaults.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "toArray(): array",
                    "doc": "The option's JSON, secrets included, for the settings surface.",
                    "shapes": [],
                    "params": [],
                    "line": 74,
                    "end": 86
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Mailer",
            "short": "Mailer",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/Mailer.php",
            "lines": 88,
            "doc": "Sends a Message through the configured transport. Failures are logged\nand reported as false; nothing here throws into a request.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Mail\\Composer",
                "Minn\\Mail\\Draft",
                "Minn\\Mail\\MailLog",
                "Minn\\Mail\\MailSettings",
                "Minn\\Mail\\Message",
                "Minn\\Mail\\Notices",
                "Minn\\Mail\\Smtp",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Cli\\MinnCommand",
                "Minn\\Cli\\UserCommand",
                "Minn\\Mail\\Composer",
                "Minn\\Runtime\\AccountFlows"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Mail\\MailSettings $settings, string $logFile)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "settings",
                        "type": "Minn\\Mail\\MailSettings",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "logFile",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "settings",
                    "type": "Minn\\Mail\\MailSettings",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "logFile",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forSite",
                    "static": true,
                    "visibility": "public",
                    "signature": "forSite(Minn\\Content\\Site $site): self",
                    "doc": "A mailer using the site's own settings.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "mail",
                    "static": true,
                    "visibility": "public",
                    "signature": "mail(array|string $to, string $subject, string $body): bool",
                    "doc": "The one-line send: a recipient, a subject, a body, through the site's\ntransport and sender, with nothing to construct at the call site.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "to",
                            "type": "array|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subject",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "noticesFor",
                    "static": true,
                    "visibility": "public",
                    "signature": "noticesFor(Minn\\Content\\Site $site): Minn\\Mail\\Notices",
                    "doc": "The engine's own notices, worded once, from this site's name and address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "send",
                    "static": false,
                    "visibility": "public",
                    "signature": "send(Minn\\Mail\\Message $message): bool",
                    "doc": "Sends one message; false on failure. With WordPress's mail function\nloaded the message goes through wp_mail(), so its filters and the\nphpmailer_init hook (an SMTP plugin's way in) apply as they do on the\nreference; otherwise through the configured transport directly.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "message",
                            "type": "Minn\\Mail\\Message",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "viaSmtp",
                    "static": false,
                    "visibility": "private",
                    "signature": "viaSmtp(string $from, string $fromName, array $to, Minn\\Mail\\Message $message): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $to"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fromName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "Minn\\Mail\\Message",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "viaMail",
                    "static": false,
                    "visibility": "private",
                    "signature": "viaMail(string $from, string $fromName, array $to, Minn\\Mail\\Message $message): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $to"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fromName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "Minn\\Mail\\Message",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "draft",
                    "static": true,
                    "visibility": "private",
                    "signature": "draft(string $mailer, string $from, string $fromName, array $to, Minn\\Mail\\Message $message): Minn\\Mail\\Draft",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $to"
                    ],
                    "params": [
                        {
                            "name": "mailer",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fromName",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "Minn\\Mail\\Message",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 102
                }
            ]
        },
        {
            "name": "Minn\\Mail\\MailerStrings",
            "short": "MailerStrings",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/MailerStrings.php",
            "lines": 34,
            "doc": "The mailer's English messages, keyed as plugins look them up\n(\"authenticate\", \"provide_address\", ...): the base set, and the set\nWordPress's own mailer subclass loads, which words four of them\ndifferently. Captured from the reference into data/mailer-strings.json.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "sets",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "base",
                    "static": true,
                    "visibility": "public",
                    "signature": "base(): array",
                    "doc": "The base mailer's messages.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "wordpress",
                    "static": true,
                    "visibility": "public",
                    "signature": "wordpress(): array",
                    "doc": "The messages WordPress's mailer subclass loads.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "set",
                    "static": true,
                    "visibility": "private",
                    "signature": "set(string $name): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Message",
            "short": "Message",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/Message.php",
            "lines": 18,
            "doc": "One outgoing plain-text email.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Cli\\MinnCommand",
                "Minn\\Mail\\Mailer",
                "Minn\\Mail\\Notices"
            ],
            "constructor": {
                "signature": "__construct(array $to, string $subject, string $body, string $fromEmail = '', string $fromName = '')",
                "doc": "",
                "shapes": [
                    "@param list<string> $to"
                ],
                "params": [
                    {
                        "name": "to",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "subject",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "body",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "fromEmail",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "fromName",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 11,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "to",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "subject",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "body",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "fromEmail",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "fromName",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "to",
                    "static": true,
                    "visibility": "public",
                    "signature": "to(array|string $to, string $subject, string $body): self",
                    "doc": "One recipient or several, and the two things every mail has.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "to",
                            "type": "array|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subject",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 24
                }
            ]
        },
        {
            "name": "Minn\\Mail\\MimeTypes",
            "short": "MimeTypes",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/MimeTypes.php",
            "lines": 43,
            "doc": "The MIME type a mailer gives an attachment by its file extension (the\ntable the reference's mailer answers with); anything else is\napplication/octet-stream.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TYPES",
                    "value": "array (   'ai' => 'application/postscript',   'aif' => 'audio/x-aiff',   'aifc' => 'audio/x-aiff',   'aiff' => 'audio/x-aiff',   'avi' => 'video/x-msvideo',   'avif' => 'image/avif',   'bin' => 'application/macbinary',   'bmp' => 'image/bmp',   'css' => 'text/css',   'csv' => 'text/csv',   'dcr' => 'application/x-director',   'dir' => 'application/x-director',   'doc' => 'application/msword',   'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',   'dvi' => 'application/x-dvi',   'dxr' => 'application/x-director',   'eml' => 'message/rfc822',   'eps' => 'application/postscript',   'gif' => 'image/gif',   'gtar' => 'application/x-gtar',   'heic' => 'image/heic',   'heics' => 'image/heic-sequence',   'heif' => 'image/heif',   'heifs' => 'image/heif-sequence',   'htm' => 'text/html',   'html' => 'text/html',   'ics' => 'text/calendar',   'jpe' => 'image/jpeg',   'jpeg' => 'image/jpeg',   'jpg' => 'image/jpeg',   'js' => 'application/javascript',   'log' => 'text/plain',   'm4a' => 'audio/mp4',   'm4v' => 'video/mp4',   'mid' => 'audio/midi',   'midi' => 'audio/midi',   'mif' => 'application/vnd.mif',   'mka' => 'audio/x-matroska',   'mkv' => 'video/x-matroska',   'mov' => 'video/quicktime',   'movie' => 'video/x-sgi-movie',   'mp2' => 'audio/mpeg',   'mp3' => 'audio/mpeg',   'mp4' => 'video/mp4',   'mpe' => 'video/mpeg',   'mpeg' => 'video/mpeg',   'mpg' => 'video/mpeg',   'mpga' => 'audio/mpeg',   'oda' => 'application/oda',   'pdf' => 'application/pdf',   'php' => 'application/x-httpd-php',   'php3' => 'application/x-httpd-php',   'php4' => 'application/x-httpd-php',   'phps' => 'application/x-httpd-php-source',   'phtml' => 'application/x-httpd-php',   'png' => 'image/png',   'ppt' => 'application/vnd.ms-powerpoint',   'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',   'ps' => 'application/postscript',   'qt' => 'video/quicktime',   'ra' => 'audio/x-realaudio',   'ram' => 'audio/x-pn-realaudio',   'rm' => 'audio/x-pn-realaudio',   'rpm' => 'audio/x-pn-realaudio-plugin',   'rtf' => 'text/rtf',   'rtx' => 'text/richtext',   'rv' => 'video/vnd.rn-realvideo',   'shtml' => 'text/html',   'sit' => 'application/x-stuffit',   'smi' => 'application/smil',   'smil' => 'application/smil',   'swf' => 'application/x-shockwave-flash',   'tar' => 'application/x-tar',   'text' => 'text/plain',   'tgz' => 'application/x-tar',   'tif' => 'image/tiff',   'tiff' => 'image/tiff',   'txt' => 'text/plain',   'vcard' => 'text/vcard',   'vcf' => 'text/vcard',   'wav' => 'audio/x-wav',   'wbxml' => 'application/vnd.wap.wbxml',   'webm' => 'video/webm',   'webp' => 'image/webp',   'wmlc' => 'application/vnd.wap.wmlc',   'wmv' => 'video/x-ms-wmv',   'xht' => 'application/xhtml+xml',   'xhtml' => 'application/xhtml+xml',   'xl' => 'application/excel',   'xls' => 'application/vnd.ms-excel',   'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',   'xml' => 'text/xml',   'xsl' => 'text/xml',   'zip' => 'application/zip', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "forExtension",
                    "static": true,
                    "visibility": "public",
                    "signature": "forExtension(string $extension): string",
                    "doc": "The type for an extension, in any case.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "extension",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "forFilename",
                    "static": true,
                    "visibility": "public",
                    "signature": "forFilename(string $filename): string",
                    "doc": "The type for a file name or path: its last extension (a query string ignored).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filename",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 53
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Notices",
            "short": "Notices",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/Notices.php",
            "lines": 99,
            "doc": "The messages the engine itself sends, worded as the reference words them\nand built in one place, so a controller and a CLI verb that announce the\nsame thing say the same thing.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\Message"
            ],
            "usedBy": [
                "Minn\\Mail\\Mailer"
            ],
            "constructor": {
                "signature": "__construct(string $siteName, string $home)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "siteName",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "home",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 14,
                "end": 16
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "siteName",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "home",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "loginDetails",
                    "static": false,
                    "visibility": "public",
                    "signature": "loginDetails(string $login, string $email, string $resetLink): Minn\\Mail\\Message",
                    "doc": "A new account's login details, with a link to choose a password.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resetLink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "passwordReset",
                    "static": false,
                    "visibility": "public",
                    "signature": "passwordReset(string $login, string $email, string $resetLink, string $requestIp): Minn\\Mail\\Message",
                    "doc": "The password reset link, with the requester's address as the reference prints it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resetLink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "requestIp",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "moderation",
                    "static": false,
                    "visibility": "public",
                    "signature": "moderation(string $adminEmail, string $postTitle, string $author, string $comment): Minn\\Mail\\Message",
                    "doc": "A comment waiting in the queue, announced to the site's address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "adminEmail",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postTitle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "comment",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "newComment",
                    "static": false,
                    "visibility": "public",
                    "signature": "newComment(string $authorEmail, string $postTitle, string $author, string $comment, string $link): Minn\\Mail\\Message",
                    "doc": "An approved comment on a post, announced to the post's author.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "authorEmail",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postTitle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "comment",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "link",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "newNote",
                    "static": false,
                    "visibility": "public",
                    "signature": "newNote(string $authorEmail, string $postTitle, string $author, string $note, string $editLink): Minn\\Mail\\Message",
                    "doc": "A post's author told of a note on it, with where the post is edited (notes live in the editor).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "authorEmail",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postTitle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "note",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "editLink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "subject",
                    "static": false,
                    "visibility": "private",
                    "signature": "subject(string $subject): string",
                    "doc": "Every notice the reference sends carries the site's name in brackets.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "subject",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 109
                }
            ]
        },
        {
            "name": "Minn\\Mail\\PathParts",
            "short": "PathParts",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/PathParts.php",
            "lines": 22,
            "doc": "A path's parts the way a mailer names attachments, safe for multibyte\nnames: the directory ('' when there is none), the last segment, its\nextension (after the last dot, so \".hidden\" is all extension) and the\nname before it. Either slash separates; trailing ones are ignored.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $path): array",
                    "doc": "The path's four parts.",
                    "shapes": [
                        "@return array{dirname: string, basename: string, extension: string, filename: string}"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 33
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Smime",
            "short": "Smime",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/Smime.php",
            "lines": 27,
            "doc": "S/MIME signing of a composed MIME entity with a certificate and key on\ndisk: the entity goes through OpenSSL as a detached signature and comes\nback as new MIME headers (multipart/signed) and the signed body.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\Transfer"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "sign",
                    "static": true,
                    "visibility": "public",
                    "signature": "sign(string $entity, string $cert, string $key, string $passphrase, string $extraCerts): ?array",
                    "doc": "The signed entity's MIME headers and body, or null when signing fails.",
                    "shapes": [
                        "@return array{0: string, 1: string}|null"
                    ],
                    "params": [
                        {
                            "name": "entity",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "cert",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "passphrase",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extraCerts",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 37
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Smtp",
            "short": "Smtp",
            "namespace": "Minn\\Mail",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Mail/Smtp.php",
            "lines": 33,
            "doc": "Delivery over SMTP for the engine's own mail when WordPress's mail\nfunction is not loaded: the site's server, SSL or STARTTLS, a sign-in\nwhen a user name is set, one message per connection, through the same\nSmtpSession the PHPMailer SMTP class speaks with.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\MailSettings",
                "Minn\\Mail\\SmtpSession"
            ],
            "usedBy": [
                "Minn\\Mail\\Mailer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Mail\\MailSettings $settings)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "settings",
                        "type": "Minn\\Mail\\MailSettings",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 17
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "settings",
                    "type": "Minn\\Mail\\MailSettings",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "sendRaw",
                    "static": false,
                    "visibility": "public",
                    "signature": "sendRaw(string $from, array $recipients, string $data): bool",
                    "doc": "Sends one composed message (headers, a blank line, the body) to the\nenvelope recipients; false on any refusal.",
                    "shapes": [
                        "@param list<string> $recipients"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "recipients",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 44
                }
            ]
        },
        {
            "name": "Minn\\Mail\\SmtpSession",
            "short": "SmtpSession",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/SmtpSession.php",
            "lines": 461,
            "doc": "One SMTP conversation as the reference's client holds it: the socket,\nthe last reply, the server's extensions from EHLO, and the last error as\n{error, detail, smtp_code, smtp_code_ex}. Every command names itself in\nits error (\"RCPT TO command failed\"); a command sent before connecting\nfails as \"Called X without being connected\". Debug text goes to the\ngiven closure with its level: 1 client lines, 2 server replies, 3\nconnection events, 4 raw inbound lines. Credentials never reach it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\DataLines"
            ],
            "usedBy": [
                "Minn\\Mail\\DataLines",
                "Minn\\Mail\\Smtp"
            ],
            "constructor": {
                "signature": "__construct(Closure $debug)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, int): void $debug"
                ],
                "params": [
                    {
                        "name": "debug",
                        "type": "Closure",
                        "shape": "Closure(string, int): void",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 45,
                "end": 47
            },
            "cases": [],
            "constants": [
                {
                    "name": "MAX_LINE",
                    "value": "998",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "CREDENTIALS",
                    "value": "array (   0 => 'User & Password',   1 => 'Username',   2 => 'Password', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "AUTH_ORDER",
                    "value": "array (   0 => 'CRAM-MD5',   1 => 'LOGIN',   2 => 'PLAIN',   3 => 'XOAUTH2', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TRANSACTION_IDS",
                    "value": "array (   0 => '/queued as ([^\\\\s]+)/i',   1 => '/\\\\bOK id=([^\\\\s]+)/i',   2 => '/^\\\\d{3} 2\\\\.0\\\\.0 ([^\\\\s]+) Message accepted for delivery/m',   3 => '/^\\\\d{3} 2\\\\.\\\\d\\\\.0 <?([^\\\\s@>]+)@[^\\\\s]* Queued mail for delivery/m',   4 => '/Message Queued \\\\(([^)]+)\\\\)/i',   5 => '/^\\\\d{3} Ok ([^\\\\s]+)/m', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "socket",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "error",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "heloReply",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "caps",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "lastReply",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "transactionId",
                    "type": "string|false|null",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "timeout",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "timelimit",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "debug",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "limits",
                    "static": false,
                    "visibility": "public",
                    "signature": "limits(int $timeout, int $timelimit): void",
                    "doc": "How long one read may wait and how long a whole reply may take, in seconds.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "timeout",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "timelimit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "connect",
                    "static": false,
                    "visibility": "public",
                    "signature": "connect(string $host, ?int $port, int $timeout, array $options): bool",
                    "doc": "Opens the connection and reads the greeting.",
                    "shapes": [
                        "@param array<string, mixed> $options stream context options"
                    ],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "port",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "stream context options"
                        }
                    ],
                    "line": 61,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "startTls",
                    "static": false,
                    "visibility": "public",
                    "signature": "startTls(): bool",
                    "doc": "Asks for TLS and turns it on.",
                    "shapes": [],
                    "params": [],
                    "line": 83,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "authenticate",
                    "static": false,
                    "visibility": "public",
                    "signature": "authenticate(string $user, string $password, string $type, ?string $oauth): bool",
                    "doc": "Signs in with the named mechanism, or the strongest the server offers\nwhen it is empty or not offered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "oauth",
                            "type": "?string",
                            "shape": "string|null",
                            "default": null,
                            "doc": "a ready XOAUTH2 token, base64, when there is one"
                        }
                    ],
                    "line": 109,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "connected",
                    "static": false,
                    "visibility": "public",
                    "signature": "connected(): bool",
                    "doc": "Whether the connection is open; a socket closed at the far end is closed here too.",
                    "shapes": [],
                    "params": [],
                    "line": 129,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "close",
                    "static": false,
                    "visibility": "public",
                    "signature": "close(): void",
                    "doc": "Closes the socket and forgets the server's greeting and extensions; the last error stays.",
                    "shapes": [],
                    "params": [],
                    "line": 143,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "data",
                    "static": false,
                    "visibility": "public",
                    "signature": "data(string $message): bool",
                    "doc": "Sends a message: DATA, the lines (a line past 998 characters split at\nits last space, or at 997 without one; header continuations indented;\nleading dots doubled), then the closing dot.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "hello",
                    "static": false,
                    "visibility": "public",
                    "signature": "hello(string $host): bool",
                    "doc": "EHLO, falling back to HELO; the extensions come from the EHLO reply.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "mail",
                    "static": false,
                    "visibility": "public",
                    "signature": "mail(string $from, string $parameters): bool",
                    "doc": "MAIL FROM, with the given parameters (\" XVERP\", \" SMTPUTF8\") after the address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parameters",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 188,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "quit",
                    "static": false,
                    "visibility": "public",
                    "signature": "quit(string $onError = 'close'): bool",
                    "doc": "QUIT; the connection closes when it succeeds, or anyway unless told to keep it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "onError",
                            "type": "string",
                            "shape": "",
                            "default": "'close'",
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "recipient",
                    "static": false,
                    "visibility": "public",
                    "signature": "recipient(string $address, string $dsn): bool",
                    "doc": "RCPT TO, with the delivery notifications asked for (NEVER, SUCCESS, FAILURE, DELAY).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dsn",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 206,
                    "end": 214
                },
                {
                    "routes": [],
                    "name": "xclient",
                    "static": false,
                    "visibility": "public",
                    "signature": "xclient(array $vars, array $allowed): bool",
                    "doc": "XCLIENT with the named attributes that are in $allowed; others are dropped.",
                    "shapes": [
                        "@param array<string, string> $vars",
                        "@param list<string> $allowed"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 222,
                    "end": 231
                },
                {
                    "routes": [],
                    "name": "turn",
                    "static": false,
                    "visibility": "public",
                    "signature": "turn(): bool",
                    "doc": "TURN is refused here, as the reference refuses it.",
                    "shapes": [],
                    "params": [],
                    "line": 234,
                    "end": 239
                },
                {
                    "routes": [],
                    "name": "command",
                    "static": false,
                    "visibility": "public",
                    "signature": "command(string $name, string $line, array $expect): bool",
                    "doc": "Sends one command and reads the reply; a reply outside $expect fails\nwith \"{name} command failed\" and the reply's detail and codes.",
                    "shapes": [
                        "@param list<int> $expect"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "line",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expect",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 247,
                    "end": 268
                },
                {
                    "routes": [],
                    "name": "send",
                    "static": false,
                    "visibility": "public",
                    "signature": "send(string $data, string $command): int|false",
                    "doc": "Writes raw text to the server; credential commands show as hidden in the debug text.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "command",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 283
                },
                {
                    "routes": [],
                    "name": "error",
                    "static": false,
                    "visibility": "public",
                    "signature": "error(): array",
                    "doc": "The last error; every field is empty after a command that succeeded.",
                    "shapes": [
                        "@return array{error: string, detail: string, smtp_code: int|string, smtp_code_ex: string}"
                    ],
                    "params": [],
                    "line": 290,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "extensions",
                    "static": false,
                    "visibility": "public",
                    "signature": "extensions(): ?array",
                    "doc": "The extensions from the last EHLO (or the HELO greeting), null before one.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [],
                    "line": 300,
                    "end": 303
                },
                {
                    "routes": [],
                    "name": "extension",
                    "static": false,
                    "visibility": "public",
                    "signature": "extension(string $name): mixed",
                    "doc": "One extension's value: true for a bare one, a string or list for one with arguments, false when absent, null before EHLO.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 306,
                    "end": 323
                },
                {
                    "routes": [],
                    "name": "lastReply",
                    "static": false,
                    "visibility": "public",
                    "signature": "lastReply(): string",
                    "doc": "The server's last reply, every line.",
                    "shapes": [],
                    "params": [],
                    "line": 326,
                    "end": 329
                },
                {
                    "routes": [],
                    "name": "transactionId",
                    "static": false,
                    "visibility": "public",
                    "signature": "transactionId(): string|false|null",
                    "doc": "The queue id the server gave the last message: null before one was sent, false when none was recognised.",
                    "shapes": [],
                    "params": [],
                    "line": 332,
                    "end": 335
                },
                {
                    "routes": [],
                    "name": "parseReply",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseReply(string $reply): array",
                    "doc": "The reply's code, enhanced code (when present) and the text after them.",
                    "shapes": [
                        "@return array{0: int, 1: string, 2: string}"
                    ],
                    "params": [
                        {
                            "name": "reply",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 342,
                    "end": 349
                },
                {
                    "routes": [],
                    "name": "greet",
                    "static": false,
                    "visibility": "private",
                    "signature": "greet(string $verb, string $host): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "verb",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 351,
                    "end": 357
                },
                {
                    "routes": [],
                    "name": "extensionsFrom",
                    "static": true,
                    "visibility": "private",
                    "signature": "extensionsFrom(string $verb, string $reply): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "verb",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reply",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 360,
                    "end": 380
                },
                {
                    "routes": [],
                    "name": "mechanism",
                    "static": false,
                    "visibility": "private",
                    "signature": "mechanism(string $type, ?string $oauth): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "oauth",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 382,
                    "end": 403
                },
                {
                    "routes": [],
                    "name": "unsupported",
                    "static": false,
                    "visibility": "private",
                    "signature": "unsupported(string $type): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 405,
                    "end": 409
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": false,
                    "visibility": "private",
                    "signature": "open(string $host, int $port, int $timeout, array $options)",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $options"
                    ],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "port",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "timeout",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 415,
                    "end": 431
                },
                {
                    "routes": [],
                    "name": "lines",
                    "static": false,
                    "visibility": "private",
                    "signature": "lines(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 433,
                    "end": 461
                },
                {
                    "routes": [],
                    "name": "failed",
                    "static": false,
                    "visibility": "private",
                    "signature": "failed(int $no, string $text, string $file, int $line): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "no",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "line",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 463,
                    "end": 467
                },
                {
                    "routes": [],
                    "name": "setError",
                    "static": false,
                    "visibility": "private",
                    "signature": "setError(string $message, string $detail = '', string|int $code = '', string $codeEx = ''): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "detail",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "code",
                            "type": "string|int",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "codeEx",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 469,
                    "end": 472
                },
                {
                    "routes": [],
                    "name": "say",
                    "static": false,
                    "visibility": "private",
                    "signature": "say(string $text, int $level): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 474,
                    "end": 477
                }
            ]
        },
        {
            "name": "Minn\\Mail\\TextWrap",
            "short": "TextWrap",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/TextWrap.php",
            "lines": 118,
            "doc": "Word wrapping for mail text. Lines break at spaces once they would pass\nthe length; existing line breaks stay; a word longer than the line stays\nwhole in plain text, and in quoted-printable text is cut into pieces\nending in a soft break (\"=\"), never inside an =XX escape or (for UTF-8)\ninside an encoded character. A line broken at a space keeps the space\nand, in quoted-printable text, a soft break after it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Mail\\Transfer"
            ],
            "usedBy": [
                "Minn\\Mail\\HeaderWords"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "plain",
                    "static": true,
                    "visibility": "public",
                    "signature": "plain(string $text, int $length, string $eol): string",
                    "doc": "Plain text wrapped to the length, every line ending in $eol.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 21
                },
                {
                    "routes": [],
                    "name": "quotedPrintable",
                    "static": true,
                    "visibility": "public",
                    "signature": "quotedPrintable(string $text, int $length, string $charset, string $eol): string",
                    "doc": "Quoted-printable text wrapped to the length with soft breaks, every line ending in $eol.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "utf8Boundary",
                    "static": true,
                    "visibility": "public",
                    "signature": "utf8Boundary(string $encoded, int $max): int",
                    "doc": "Where to cut quoted-printable UTF-8 text at or before $max without\nsplitting an encoded character.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "encoded",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "max",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "wrapWith",
                    "static": true,
                    "visibility": "private",
                    "signature": "wrapWith(string $text, int $length, string $softBreak, string $charset, string $eol): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "softBreak",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "line",
                    "static": true,
                    "visibility": "private",
                    "signature": "line(string $line, int $length, string $softBreak, string $charset, string $eol): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "line",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "softBreak",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "closeLine",
                    "static": true,
                    "visibility": "private",
                    "signature": "closeLine(string $word, string $out, string $buffer, int $length, string $softBreak, string $charset, string $eol): array",
                    "doc": "Ends the line before a long word: with as much of the word as fits\nwhen more than twenty characters are left, else with a soft break.",
                    "shapes": [
                        "@return array{0: string, 1: string} the output and what is left of the word"
                    ],
                    "params": [
                        {
                            "name": "word",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "out",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "buffer",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "softBreak",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "pieces",
                    "static": true,
                    "visibility": "private",
                    "signature": "pieces(string $word, string $out, int $length, string $charset, string $eol): array",
                    "doc": "A long word in line-length pieces, each but the last ending in a soft break.",
                    "shapes": [
                        "@return array{0: string, 1: string} the output and the last piece, which starts the next line"
                    ],
                    "params": [
                        {
                            "name": "word",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "out",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "length",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "cut",
                    "static": true,
                    "visibility": "private",
                    "signature": "cut(string $word, int $max, string $charset): int",
                    "doc": "How much of the word to take: at most $max, never inside an escape.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "word",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "max",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 131
                }
            ]
        },
        {
            "name": "Minn\\Mail\\Transfer",
            "short": "Transfer",
            "namespace": "Minn\\Mail",
            "kind": "final class",
            "file": "public/minn/src/Minn/Mail/Transfer.php",
            "lines": 61,
            "doc": "Body text in a content transfer encoding, and the line-ending helpers\nmail composition leans on.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Mail\\AddressRules",
                "Minn\\Mail\\Composer",
                "Minn\\Mail\\Dkim",
                "Minn\\Mail\\HeaderWords",
                "Minn\\Mail\\Smime",
                "Minn\\Mail\\TextWrap"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAX_LINE",
                    "value": "998",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "public",
                    "signature": "encode(string $text, string $encoding, string $eol): string",
                    "doc": "The text in an encoding: 7bit, 8bit and binary keep the text (the first\ntwo with normalized line breaks and a final one), base64 in 76-column\nlines, quoted-printable by PHP's encoder.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "encoding",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "quotedPrintable",
                    "static": true,
                    "visibility": "public",
                    "signature": "quotedPrintable(string $text, string $eol): string",
                    "doc": "Quoted-printable text with the encoder's line breaks normalized.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "normalizeBreaks",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalizeBreaks(string $text, string $eol = '\r '): string",
                    "doc": "Every CRLF, CR or LF as $eol.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "eol",
                            "type": "string",
                            "shape": "",
                            "default": "'\r '",
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "stripTrailingSpace",
                    "static": true,
                    "visibility": "public",
                    "signature": "stripTrailingSpace(string $text): string",
                    "doc": "The text without trailing spaces, tabs and line breaks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "stripTrailingBreaks",
                    "static": true,
                    "visibility": "public",
                    "signature": "stripTrailingBreaks(string $text): string",
                    "doc": "The text without trailing line breaks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "has8bit",
                    "static": true,
                    "visibility": "public",
                    "signature": "has8bit(string $text): bool",
                    "doc": "Whether any byte is outside 7-bit ASCII.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "hasLongLine",
                    "static": true,
                    "visibility": "public",
                    "signature": "hasLongLine(string $text): bool",
                    "doc": "Whether any line runs past the 998 characters SMTP allows.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 72
                }
            ]
        },
        {
            "name": "Minn\\Media\\AvifInfo",
            "short": "AvifInfo",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/AvifInfo.php",
            "lines": 142,
            "doc": "An AVIF file's primary image as wp_get_avif_info reports it (probe\nmedia-tags): width and height from its spatial-extent property, bit depth\nand channel count from its pixel-information property. The file is an\nISO base media file: an ftyp box naming the avif or avis brand, then a meta\nbox whose primary item (pitm) is tied to its properties (ipco) by the\nassociation table (ipma). Anything else, or a file it cannot follow, is\nunknown in every field.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "UNKNOWN",
                    "value": "array (   'width' => false,   'height' => false,   'bit_depth' => false,   'num_channels' => false, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $bytes): array",
                    "doc": "The primary image's size, bit depth and channels from a file's first bytes.",
                    "shapes": [
                        "@return array{width: int|false, height: int|false, bit_depth: int|false, num_channels: int|false}"
                    ],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "isAvif",
                    "static": true,
                    "visibility": "private",
                    "signature": "isAvif(string $bytes, array $ftyp): bool",
                    "doc": "Whether the ftyp box names the avif or avis brand, as its major brand or a compatible one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ftyp",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "primaryItem",
                    "static": true,
                    "visibility": "private",
                    "signature": "primaryItem(string $bytes, array $pitm): ?int",
                    "doc": "The primary item's id from a pitm box: 16 bits in version 0, 32 after.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "pitm",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "associations",
                    "static": true,
                    "visibility": "private",
                    "signature": "associations(string $bytes, array $ipma, int $item): array",
                    "doc": "The 1-based property indices the ipma box ties to one item.",
                    "shapes": [
                        "@param array{0: int, 1: int} $ipma the box's content span",
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ipma",
                            "type": "array",
                            "shape": "array{0: int, 1: int}",
                            "default": null,
                            "doc": "the box's content span"
                        },
                        {
                            "name": "item",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "boxes",
                    "static": true,
                    "visibility": "private",
                    "signature": "boxes(string $bytes, int $from, int $to): array",
                    "doc": "The boxes between two offsets by type, each as its content span (after\nthe header). A box of size 1 carries a 64-bit size; size 0 runs to the end.",
                    "shapes": [
                        "@return array<string, list<array{0: int, 1: int}>>"
                    ],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 121,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "ordered",
                    "static": true,
                    "visibility": "private",
                    "signature": "ordered(string $bytes, int $from, int $to): array",
                    "doc": "The boxes between two offsets in file order: type, content start, end.",
                    "shapes": [
                        "@return list<array{0: string, 1: int, 2: int}>"
                    ],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 156
                }
            ]
        },
        {
            "name": "Minn\\Media\\Canvas",
            "short": "Canvas",
            "namespace": "Minn\\Media",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Media/Canvas.php",
            "lines": 168,
            "doc": "One GD bitmap and the operations the media layer needs on it. Every\noperation returns a new canvas; alpha is preserved throughout, which is\nwhat makes PNG and WebP sub-sizes match the reference's.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(GdImage $image, int $width, int $height)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "image",
                        "type": "GdImage",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "width",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "height",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "image",
                    "type": "GdImage",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "width",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "height",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(GdImage $image): self",
                    "doc": "A canvas over a GD image already in hand (what WP_Image_Editor_GD::_save is given).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "image",
                            "type": "GdImage",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "image",
                    "static": false,
                    "visibility": "public",
                    "signature": "image(): GdImage",
                    "doc": "The GD image behind the canvas (what WP_Image_Editor_GD::_resize hands back).",
                    "shapes": [],
                    "params": [],
                    "line": 27,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": true,
                    "visibility": "public",
                    "signature": "open(string $path): ?self",
                    "doc": "A canvas from an image file, or null when it cannot be decoded or\nwould not fit in memory. The header names the dimensions before a\npixel is decoded, so a small file that claims a huge canvas is\nrefused instead of taking the request down.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "resample",
                    "static": false,
                    "visibility": "public",
                    "signature": "resample(array $box): self",
                    "doc": "Resamples a source box onto a destination box.",
                    "shapes": [
                        "@param array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int} $box dst x, dst y, src x, src y, dst w, dst h, src w, src h (the GD argument order)"
                    ],
                    "params": [
                        {
                            "name": "box",
                            "type": "array",
                            "shape": "array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int}",
                            "default": null,
                            "doc": "dst x, dst y, src x, src y, dst w, dst h, src w, src h (the GD argument order)"
                        }
                    ],
                    "line": 93,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "crop",
                    "static": false,
                    "visibility": "public",
                    "signature": "crop(int $x, int $y, int $width, int $height, ?int $targetWidth = NULL, ?int $targetHeight = NULL): self",
                    "doc": "A canvas cut to a rectangle, resized to a target when given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "x",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "y",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "targetWidth",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "targetHeight",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "rotate",
                    "static": false,
                    "visibility": "public",
                    "signature": "rotate(float $angle): ?self",
                    "doc": "A canvas turned by an angle, or null when GD refuses.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "angle",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "flipVertical",
                    "static": false,
                    "visibility": "public",
                    "signature": "flipVertical(): self",
                    "doc": "A canvas mirrored on either axis.",
                    "shapes": [],
                    "params": [],
                    "line": 117,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "flipHorizontal",
                    "static": false,
                    "visibility": "public",
                    "signature": "flipHorizontal(): self",
                    "doc": "A canvas mirrored left to right.",
                    "shapes": [],
                    "params": [],
                    "line": 123,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "copy",
                    "static": false,
                    "visibility": "public",
                    "signature": "copy(): self",
                    "doc": "An untouched copy of the canvas.",
                    "shapes": [],
                    "params": [],
                    "line": 129,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": false,
                    "visibility": "public",
                    "signature": "write(string $path, string $mime, int $quality): bool",
                    "doc": "Writes the bitmap in the given format; the directory is created when missing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mime",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quality",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "progressive",
                    "static": false,
                    "visibility": "public",
                    "signature": "progressive(): self",
                    "doc": "The bitmap written progressively from now on (an interlaced JPEG).",
                    "shapes": [],
                    "params": [],
                    "line": 152,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "baseline",
                    "static": false,
                    "visibility": "public",
                    "signature": "baseline(): self",
                    "doc": "The bitmap written line by line from now on, as it is by default.",
                    "shapes": [],
                    "params": [],
                    "line": 159,
                    "end": 163
                },
                {
                    "routes": [],
                    "name": "stream",
                    "static": false,
                    "visibility": "public",
                    "signature": "stream(string $mime, int $quality): bool",
                    "doc": "Writes the image to the output in a format, at a quality.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mime",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quality",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 166,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "affordable",
                    "static": true,
                    "visibility": "private",
                    "signature": "affordable(int $width, int $height): bool",
                    "doc": "Whether a bitmap of these dimensions fits the memory left to this\nrequest: five bytes a pixel for the decoded image (GD keeps four and\na little), twice over because every operation makes a second canvas,\nunder what memory_limit leaves after what is already in use.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "memoryLimit",
                    "static": true,
                    "visibility": "private",
                    "signature": "memoryLimit(): ?int",
                    "doc": "memory_limit in bytes, or null when it is unlimited.",
                    "shapes": [],
                    "params": [],
                    "line": 72,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "flipped",
                    "static": false,
                    "visibility": "private",
                    "signature": "flipped(int $mode): self",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mode",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": false,
                    "visibility": "private",
                    "signature": "encode(string $mime, ?string $path, int $quality): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mime",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quality",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 180
                }
            ]
        },
        {
            "name": "Minn\\Media\\Gallery",
            "short": "Gallery",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/Gallery.php",
            "lines": 73,
            "doc": "The classic `[gallery]` shortcode's markup. Every gallery on a page is\nnumbered from one shared per-request counter, and the wrapper names both\nthat number and the post the gallery sits in, so two galleries on one page\ncan be styled apart.\n\nThe single quotes around the wrapper attributes and the tab-indented item\nbody are the reference's, and themes have styled against them for long\nenough that they are contract rather than formatting.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(array $items, array $args, int $instance, int $postId, ?string $opening = NULL): string",
                    "doc": "The gallery shortcode's HTML for these attachments.",
                    "shapes": [
                        "@param list<array{icon: string, orientation: string, caption: string, caption_id: string}> $items",
                        "@param array{itemtag: string, icontag: string, captiontag: string, columns: int, size: string} $args"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<array{icon: string, orientation: string, caption: string, caption_id: string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array{itemtag: string, icontag: string, captiontag: string, columns: int, size: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "opening",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "opening",
                    "static": true,
                    "visibility": "public",
                    "signature": "opening(array $args, int $instance, int $postId): string",
                    "doc": "The gallery's opening element: its instance id, its post, columns and size as classes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "defaultStyle",
                    "static": true,
                    "visibility": "public",
                    "signature": "defaultStyle(int $instance, int $columns): string",
                    "doc": "The style block printed before a gallery when use_default_gallery_style\nasks for it (themes without HTML5 galleries), as the reference prints\nit (probe filter-inputs-3): the items floated in equal whole-percent\ncolumns, a border on the images, the caption flush left.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "instance",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "caption",
                    "static": true,
                    "visibility": "private",
                    "signature": "caption(array $item, string $tag): string",
                    "doc": "",
                    "shapes": [
                        "@param array{caption: string, caption_id: string} $item"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array{caption: string, caption_id: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "tag",
                    "static": true,
                    "visibility": "private",
                    "signature": "tag(string $tag, string $fallback): string",
                    "doc": "A caller's tag name, reduced to what may safely open an element.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fallback",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "token",
                    "static": true,
                    "visibility": "private",
                    "signature": "token(string $value): string",
                    "doc": "A size name reduced to a class token.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 88
                }
            ]
        },
        {
            "name": "Minn\\Media\\Icons",
            "short": "Icons",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/Icons.php",
            "lines": 68,
            "doc": "The icon a file type is shown with, as wp_mime_type_icon finds it (probe\nplugin-helpers): the icon folders (core's wp-includes/images/media, and\nany icon_dirs adds) read once a request into a name => address map, an\nicon of the asked kind (.png or .svg) preferred where both exist; then\nthe first name the type answers to: an attachment's file extension and\nthe kind of file it is, the type, its two halves, the type with an\nunderscore for the slash. Nothing answering (a post that is not there,\na type that is empty) is the default icon.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CORE",
                    "value": "array (   0 => 'archive',   1 => 'audio',   2 => 'code',   3 => 'default',   4 => 'document',   5 => 'interactive',   6 => 'spreadsheet',   7 => 'text',   8 => 'video', )",
                    "doc": "Core's icons, each kept as .png and .svg.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "forType",
                    "static": true,
                    "visibility": "public",
                    "signature": "forType(string|int $mime, string $preferred): string|false",
                    "doc": "The icon's address for a type or an attachment id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mime",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "preferred",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "map",
                    "static": true,
                    "visibility": "private",
                    "signature": "map(string $preferred): array",
                    "doc": "Every icon by name, read once a request with the first asker's preferred kind. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "preferred",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "files",
                    "static": true,
                    "visibility": "private",
                    "signature": "files(string $dir, string $coreDir, string $preferred): array",
                    "doc": "A folder's icons by name; core's are known, a plugin's folder is read. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "preferred",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 85
                }
            ]
        },
        {
            "name": "Minn\\Media\\ImageMime",
            "short": "ImageMime",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/ImageMime.php",
            "lines": 34,
            "doc": "An image file's real type from its first bytes, as the reference sniffs\nit before trusting an upload's extension (probe hook-inputs-2): PHP's own\nheader check for the classic formats (JPEG, PNG, GIF, WebP, BMP, ICO,\nTIFF, AVIF), then an ISO media file's major brand for the HEIF family\nPHP does not know. A file too short or of another kind has no image type.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\FileTypeCheck"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "BRANDS",
                    "value": "array (   'heic' => 'image/heic',   'heix' => 'image/heic',   'hevc' => 'image/heic-sequence',   'hevx' => 'image/heic-sequence',   'mif1' => 'image/heif',   'heim' => 'image/heif',   'heis' => 'image/heif',   'msf1' => 'image/heif-sequence',   'avif' => 'image/avif',   'avis' => 'image/avif', )",
                    "doc": "An ISO base media file's major brand and the image type it declares.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $file): ?string",
                    "doc": "The image type the file's header declares, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 46
                }
            ]
        },
        {
            "name": "Minn\\Media\\Kind",
            "short": "Kind",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/Kind.php",
            "lines": 79,
            "doc": "Whether an attachment is an image, audio, video, or a given extension, judged by its MIME type first and its file extension second.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "IMAGE_EXTENSIONS",
                    "value": "array (   0 => 'jpg',   1 => 'jpeg',   2 => 'jpe',   3 => 'gif',   4 => 'png',   5 => 'webp',   6 => 'avif',   7 => 'heic', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "POST_MIME_TYPES",
                    "value": "array (   'image' =>    array (     0 => 'Images',     1 => 'Manage Images',     2 => 'Image <span class=\"count\">(%s)</span>',     3 => 'Images <span class=\"count\">(%s)</span>',   ),   'audio' =>    array (     0 => 'Audio',     1 => 'Manage Audio',     2 => 'Audio <span class=\"count\">(%s)</span>',     3 => 'Audio <span class=\"count\">(%s)</span>',   ),   'video' =>    array (     0 => 'Video',     1 => 'Manage Video',     2 => 'Video <span class=\"count\">(%s)</span>',     3 => 'Video <span class=\"count\">(%s)</span>',   ),   'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-word.document.macroEnabled.12,application/vnd.ms-word.template.macroEnabled.12,application/vnd.oasis.opendocument.text,application/vnd.apple.pages,application/pdf,application/vnd.ms-xpsdocument,application/oxps,application/rtf,application/wordperfect,application/octet-stream' =>    array (     0 => 'Documents',     1 => 'Manage Documents',     2 => 'Document <span class=\"count\">(%s)</span>',     3 => 'Documents <span class=\"count\">(%s)</span>',   ),   'application/vnd.apple.numbers,application/vnd.oasis.opendocument.spreadsheet,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel.sheet.macroEnabled.12,application/vnd.ms-excel.sheet.binary.macroEnabled.12' =>    array (     0 => 'Spreadsheets',     1 => 'Manage Spreadsheets',     2 => 'Spreadsheet <span class=\"count\">(%s)</span>',     3 => 'Spreadsheets <span class=\"count\">(%s)</span>',   ),   'application/x-gzip,application/rar,application/x-tar,application/zip,application/x-7z-compressed' =>    array (     0 => 'Archives',     1 => 'Manage Archives',     2 => 'Archive <span class=\"count\">(%s)</span>',     3 => 'Archives <span class=\"count\">(%s)</span>',   ), )",
                    "doc": "The media library's filter groups: a MIME pattern (a top-level type, or\na comma list of full types) => its plural label, its manage label, and\nthe singular and plural count labels.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "matchWildcards",
                    "static": true,
                    "visibility": "public",
                    "signature": "matchWildcards(array $patterns, array $reals): array",
                    "doc": "Real mime types grouped under the wildcard patterns that match them\n(image, audio/*, image/jpeg, *), the last pattern first; a pattern with\nno matches is omitted (probe post-remaining).",
                    "shapes": [
                        "@param list<string> $patterns",
                        "@param list<string> $reals",
                        "@return array<string, list<string>>"
                    ],
                    "params": [
                        {
                            "name": "patterns",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reals",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "matches",
                    "static": true,
                    "visibility": "public",
                    "signature": "matches(string $type, string $mime, string $extension, array $audioExtensions, array $videoExtensions): bool",
                    "doc": "Whether a file is of a media type, by mime prefix or by extension list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mime",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extension",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "audioExtensions",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "videoExtensions",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 85
                }
            ]
        },
        {
            "name": "Minn\\Media\\Metadata",
            "short": "Metadata",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/Metadata.php",
            "lines": 112,
            "doc": "The _wp_attachment_metadata blob: parsed by scanning for the shapes it\nholds (top-level dims and file, the sizes map, the image_meta scalars)\nand written back in the reference's stored form: a:6 at the top,\nimage_meta as a:13 with alt last.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\SiteController",
                "Minn\\Blocks\\ImageTags",
                "Minn\\Content\\SiteIcon",
                "Minn\\Media\\PhotoMeta"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "IMAGE_META_KEYS",
                    "value": "array (   0 => 'aperture',   1 => 'credit',   2 => 'camera',   3 => 'caption',   4 => 'created_timestamp',   5 => 'copyright',   6 => 'focal_length',   7 => 'iso',   8 => 'shutter_speed',   9 => 'title',   10 => 'orientation', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "namesFile",
                    "static": true,
                    "visibility": "public",
                    "signature": "namesFile(string $location, array $meta): bool",
                    "doc": "Whether an image location names the attachment's file, one of its\nsizes, or its original (probe media-tags): the location, its query\ndropped, must end with the stored path, or with the stored folder and\na size's or the original's file name. A bare file name with no folder\nmatches nothing.",
                    "shapes": [
                        "@param array<string, mixed> $meta the attachment metadata as stored"
                    ],
                    "params": [
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the attachment metadata as stored"
                        }
                    ],
                    "line": 29,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(?string $blob): array",
                    "doc": "The attachment metadata blob as an array, tolerant of anything missing.",
                    "shapes": [
                        "@return array{width: int, height: int, file: string, filesize: int, sizes: array<string, array>, image_meta: ?array}"
                    ],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "blankImageMeta",
                    "static": true,
                    "visibility": "public",
                    "signature": "blankImageMeta(): array",
                    "doc": "The image_meta block a fresh upload carries.",
                    "shapes": [],
                    "params": [],
                    "line": 106,
                    "end": 123
                }
            ]
        },
        {
            "name": "Minn\\Media\\PhotoMeta",
            "short": "PhotoMeta",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/PhotoMeta.php",
            "lines": 165,
            "doc": "A photo's own description, read as the reference's wp_read_image_metadata\nreads it (probe image-meta): IPTC first (headline or object name for the\ntitle, caption, credit or byline, copyright, keywords, the date and time\nit was made), then EXIF for what IPTC left empty (a short description as\nthe title, the user comment or description as the caption, the artist,\ncopyright, model, the digitized time, aperture, focal length, ISO,\nexposure, orientation). Text that is not UTF-8 is read as Latin-1, and\nevery value is cleaned (the reference runs wp_kses_post) and made a\nstring; a short caption doubles as the title.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Media\\Metadata"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "EXIF_TYPES",
                    "value": "array (   0 => 2,   1 => 7,   2 => 8, )",
                    "doc": "EXIF is read for these image types only: JPEG and TIFF, both byte orders.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $file, array $exifTypes, Closure $clean): ?array",
                    "doc": "The metadata, the image type, the IPTC and EXIF it came from; null\nwhen there is no such file.",
                    "shapes": [
                        "@param list<int> $exifTypes",
                        "@param Closure(string): string $clean",
                        "@return array{meta: array<string, mixed>, type: int|null, iptc: array<string, mixed>, exif: array<string, mixed>}|null"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "exifTypes",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clean",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "fromIptc",
                    "static": true,
                    "visibility": "private",
                    "signature": "fromIptc(array $meta, array $iptc): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $meta",
                        "@param array<string, mixed> $iptc",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "iptc",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "fromExif",
                    "static": true,
                    "visibility": "private",
                    "signature": "fromExif(array $meta, array $exif): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $meta",
                        "@param array<string, mixed> $exif",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "exif",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "described",
                    "static": true,
                    "visibility": "private",
                    "signature": "described(array $meta, string $description, string $comment, string $comments): array",
                    "doc": "The title and caption EXIF gives when IPTC left them empty: a short\ndescription is the title, and the user comment (else the description)\nthe caption; a description that is not the title runs on into the\ncomment; a comment alone is the caption; a short caption doubles as the\ntitle.",
                    "shapes": [
                        "@param array<string, mixed> $meta",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "comment",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "comments",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "fraction",
                    "static": true,
                    "visibility": "private",
                    "signature": "fraction(mixed $value): float",
                    "doc": "\"28/10\" as 2.8; a zero denominator reads 0.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "exifTime",
                    "static": true,
                    "visibility": "private",
                    "signature": "exifTime(string $time): string",
                    "doc": "An EXIF time (\"2024:05:06 07:08:09\") as a Unix time read as UTC.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "time",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 167
                },
                {
                    "routes": [],
                    "name": "cleaned",
                    "static": true,
                    "visibility": "private",
                    "signature": "cleaned(array $meta, Closure $clean): array",
                    "doc": "Text made UTF-8 (Latin-1 read as such) and cleaned, every value a string.",
                    "shapes": [
                        "@param array<string, mixed> $meta",
                        "@param Closure(string): string $clean",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clean",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 183
                }
            ]
        },
        {
            "name": "Minn\\Media\\Sizing",
            "short": "Sizing",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/Sizing.php",
            "lines": 263,
            "doc": "The image size arithmetic the media functions share: the crop or scale a\nresize needs, the registered size a requested box picks, and the srcset\ncandidates an image's sizes yield. Behaviour pinned by contracts/fixtures/api/media.json.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "constrain",
                    "static": true,
                    "visibility": "public",
                    "signature": "constrain(int $width, int $height, int $maxWidth, int $maxHeight): array",
                    "doc": "The largest box inside the limits that keeps the ratio: only sides over\ntheir limit shrink, the smaller ratio wins, and a result one pixel short\nof a limit it was constrained by snaps to that limit.",
                    "shapes": [
                        "@return array{0: int, 1: int}"
                    ],
                    "params": [
                        {
                            "name": "width",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "height",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxWidth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxHeight",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "resize",
                    "static": true,
                    "visibility": "public",
                    "signature": "resize(int $origW, int $origH, int $destW, int $destH, bool $crop, Closure $constrain): ?array",
                    "doc": "The GD-style resize box (dst x, dst y, src x, src y, dst w, dst h, src w, src h),\nor null when every asked dimension is larger than the image (nothing to make).",
                    "shapes": [
                        "@param Closure(int, int, int, int): array{0: int, 1: int} $constrain scales a box into a maximum",
                        "@return array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int}|null"
                    ],
                    "params": [
                        {
                            "name": "origW",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origH",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "destW",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "destH",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "crop",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "constrain",
                            "type": "Closure",
                            "shape": "Closure(int, int, int, int): array{0: int, 1: int}",
                            "default": null,
                            "doc": "scales a box into a maximum"
                        }
                    ],
                    "line": 49,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "sameSize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sameSize(array $box, int $origW, int $origH): bool",
                    "doc": "Whether a resize box makes the image's own size again, a pixel either\nway counting as rounding.",
                    "shapes": [
                        "@param array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int} $box"
                    ],
                    "params": [
                        {
                            "name": "box",
                            "type": "array",
                            "shape": "array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origW",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origH",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "intermediate",
                    "static": true,
                    "visibility": "public",
                    "signature": "intermediate(array $meta, array|string $size, ?string $fileUrl, Closure $editorConstrain, Closure $matchesRatio): ?array",
                    "doc": "The registered size that serves a request: by name, or for a\nrequested box the size of exactly that box, else the smallest larger\none in its proportion (the full size never counts), else the\nthumbnail when it is wide enough; with its path and URL beside the\nfile's.",
                    "shapes": [
                        "@param array<string, mixed> $meta attachment metadata",
                        "@param string|array{0: int, 1: int} $size",
                        "@param Closure(int, int, array): array{0: int, 1: int} $editorConstrain",
                        "@param Closure(int, int, int, int): bool $matchesRatio",
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "attachment metadata"
                        },
                        {
                            "name": "size",
                            "type": "array|string",
                            "shape": "string|array{0: int, 1: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fileUrl",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "editorConstrain",
                            "type": "Closure",
                            "shape": "Closure(int, int, array): array{0: int, 1: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "matchesRatio",
                            "type": "Closure",
                            "shape": "Closure(int, int, int, int): bool",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "sources",
                    "static": true,
                    "visibility": "public",
                    "signature": "sources(array $sizeArray, string $src, array $meta, Closure $matchesRatio, string $uploadsUrl, Closure $maxWidth): array",
                    "doc": "The srcset candidates by width: every size on the image's ratio (and\nthe same edit, when the file was edited) no wider than the cap, the\nsource itself winning a width clash and passing the cap.",
                    "shapes": [
                        "@param array{0: int, 1: int} $sizeArray",
                        "@param Closure(int, int, int, int): bool $matchesRatio",
                        "@param Closure(array{0: int, 1: int}): int $maxWidth the widest candidate (max_srcset_image_width; 0 for no cap), asked before the folder is checked",
                        "@return array<int, array{url: string, descriptor: string, value: int}>"
                    ],
                    "params": [
                        {
                            "name": "sizeArray",
                            "type": "array",
                            "shape": "array{0: int, 1: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "src",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "matchesRatio",
                            "type": "Closure",
                            "shape": "Closure(int, int, int, int): bool",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uploadsUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxWidth",
                            "type": "Closure",
                            "shape": "Closure(array{0: int, 1: int}): int",
                            "default": null,
                            "doc": "the widest candidate (max_srcset_image_width; 0 for no cap), asked before the folder is checked"
                        }
                    ],
                    "line": 172,
                    "end": 217
                },
                {
                    "routes": [],
                    "name": "srcset",
                    "static": true,
                    "visibility": "public",
                    "signature": "srcset(array $sources): ?string",
                    "doc": "The srcset attribute for at least two sources; null for fewer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sources",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 220,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "editorSizes",
                    "static": true,
                    "visibility": "public",
                    "signature": "editorSizes(array $meta, string $baseUrl, string $fullUrl, array $names, Closure $downsize): array",
                    "doc": "The image sizes an attachment offers the editor, each with orientation. @param Closure(string): (array|false) $downsize",
                    "shapes": [
                        "@param Closure(string): (array|false) $downsize"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "baseUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fullUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "downsize",
                            "type": "Closure",
                            "shape": "Closure(string): (array|false)",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "oldThumbnail",
                    "static": true,
                    "visibility": "public",
                    "signature": "oldThumbnail(string $imagefile, string $thumb): ?array",
                    "doc": "The old thumbnail an image's metadata names (its `thumb`), as a file\nbeside the image with its size, while it is still there (probe\nimage-downsize).",
                    "shapes": [
                        "@return array{0: string, 1: int, 2: int}|null the file's name, width and height"
                    ],
                    "params": [
                        {
                            "name": "imagefile",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "thumb",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 267,
                    "end": 275
                },
                {
                    "routes": [],
                    "name": "cropBox",
                    "static": true,
                    "visibility": "private",
                    "signature": "cropBox(int $origW, int $origH, int $destW, int $destH): array",
                    "doc": "A cropped size's box: each side at most the original's, and a side asked as 0 drawn from the\nother in the original's proportion.",
                    "shapes": [
                        "@return array{0: int, 1: int}"
                    ],
                    "params": [
                        {
                            "name": "origW",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origH",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "destW",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "destH",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "join",
                    "static": true,
                    "visibility": "private",
                    "signature": "join(string $base, string $path): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 255,
                    "end": 258
                }
            ]
        },
        {
            "name": "Minn\\Media\\Upload",
            "short": "Upload",
            "namespace": "Minn\\Media",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Media/Upload.php",
            "lines": 89,
            "doc": "One file arriving for the library, on either transport: a multipart\nfield named \"file\" (a temporary upload to move) or a raw body whose\nContent-Disposition names the file. The parent is read from the same\nrequest, wherever the client put it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Request",
                "Minn\\Media\\Uploads",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Rest\\MediaController"
            ],
            "constructor": {
                "signature": "__construct(string $filename, ?string $movedFrom, ?string $raw, int $parent = 0)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "filename",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "movedFrom",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "raw",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parent",
                        "type": "int",
                        "shape": "",
                        "default": "0",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "filename",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "movedFrom",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "raw",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "parent",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromRequest",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromRequest(Minn\\Http\\Request $request): ?self",
                    "doc": "Null when the request carries no file.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "filenameFrom",
                    "static": true,
                    "visibility": "public",
                    "signature": "filenameFrom(array $headers): ?string",
                    "doc": "The file a Content-Disposition names, as the reference reads one\n(probe rest-attachments-controller): the parameters after the\ndisposition type, split on semicolons as written; the last non-empty\nfilename= of all the headers, unquoted when double\nquotes wrap it. \"filename\" is matched as written, and filename* is\nnot read. Null when none names one.",
                    "shapes": [
                        "@param list<string> $headers"
                    ],
                    "params": [
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "public",
                    "signature": "refusal(string $data, array $headers): ?Minn\\RestError",
                    "doc": "Why a raw body cannot be taken, in the reference's order: no data, no\nContent-Type, no Content-Disposition, one naming no file, a\nContent-MD5 the data does not match. Null when it can. The headers are\nthe REST request's, keyed by lower-case names with underscores.",
                    "shapes": [
                        "@param array<string, list<string>> $headers"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "array<string, list<string>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "mime",
                    "static": false,
                    "visibility": "public",
                    "signature": "mime(): ?string",
                    "doc": "The mime type the extension maps to, or null for one the library refuses.",
                    "shapes": [],
                    "params": [],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "parentOf",
                    "static": true,
                    "visibility": "public",
                    "signature": "parentOf(Minn\\Http\\Request $request): int",
                    "doc": "The post the client wants the file attached to: form field, query, or JSON body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 103
                }
            ]
        },
        {
            "name": "Minn\\Media\\Uploads",
            "short": "Uploads",
            "namespace": "Minn\\Media",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Media/Uploads.php",
            "lines": 135,
            "doc": "The uploads directory: paths, URLs, the allowed types, and landing a file.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\Permalinks"
            ],
            "usedBy": [
                "Minn\\Blocks\\ImageTags",
                "Minn\\Blocks\\Renderer",
                "Minn\\Media\\Upload",
                "Minn\\Media\\Writer",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Front\\Permalinks $permalinks, string $baseDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "baseDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 30
            },
            "cases": [],
            "constants": [
                {
                    "name": "MIMES",
                    "value": "array (   'png' => 'image/png',   'jpg' => 'image/jpeg',   'jpeg' => 'image/jpeg',   'gif' => 'image/gif',   'webp' => 'image/webp',   'pdf' => 'application/pdf',   'txt' => 'text/plain',   'mp4' => 'video/mp4',   'mp3' => 'audio/mpeg',   'zip' => 'application/zip', )",
                    "doc": "extension => canonical mime",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "baseDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "baseDir",
                    "static": false,
                    "visibility": "public",
                    "signature": "baseDir(): string",
                    "doc": "The uploads directory on disk.",
                    "shapes": [],
                    "params": [],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "baseUrl",
                    "static": false,
                    "visibility": "public",
                    "signature": "baseUrl(): string",
                    "doc": "The uploads directory's URL.",
                    "shapes": [],
                    "params": [],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "urlFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "urlFor(string $relativePath): string",
                    "doc": "The URL of a file by its relative path.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relativePath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "pathFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "pathFor(string $relativePath): string",
                    "doc": "The path of a file by its relative path.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relativePath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "sanitizeName",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitizeName(string $filename): string",
                    "doc": "A safe file name: one extension. Every dot-separated part between the\nbase and the last extension that is not itself an allowed extension\nis joined with an underscore, so \"shell.php.png\" lands as\n\"shell_php.png\" and no handler can be talked into running it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filename",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "relativeOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "relativeOf(string $absolutePath): ?string",
                    "doc": "A stored file's path relative to the uploads folder, or null for a file outside it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "absolutePath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "attachmentFiles",
                    "static": true,
                    "visibility": "public",
                    "signature": "attachmentFiles(string $file, array $meta, ?array $backupSizes): array",
                    "doc": "Every file an attachment owns, in deletion order: the legacy thumb, each\nsub-size, the original image, the backup sizes, then the file itself.",
                    "shapes": [
                        "@param array<string, mixed> $meta the attachment metadata",
                        "@param array<string, array<string, mixed>>|null $backupSizes",
                        "@return list<string> absolute paths, unique, only the main file checked for existence"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the attachment metadata"
                        },
                        {
                            "name": "backupSizes",
                            "type": "?array",
                            "shape": "array<string, array<string, mixed>>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "layout",
                    "static": true,
                    "visibility": "public",
                    "signature": "layout(string $uploadPath, string $uploadUrlPath, string $siteUrl, string $contentDir, string $contentUrl, string $abspath, bool $yearMonth, string $time): array",
                    "doc": "Where uploads live, from the site's options: the default folder under\nwp-content, a relative upload_path under ABSPATH, or an absolute one;\nthe URL likewise, with year/month subfolders when the site asks.",
                    "shapes": [
                        "@return array{path: string, url: string, subdir: string, basedir: string, baseurl: string, error: false}"
                    ],
                    "params": [
                        {
                            "name": "uploadPath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uploadUrlPath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "siteUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "abspath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "yearMonth",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "time",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 143
                }
            ]
        },
        {
            "name": "Minn\\Media\\WebpInfo",
            "short": "WebpInfo",
            "namespace": "Minn\\Media",
            "kind": "final class",
            "file": "public/minn/src/Minn/Media/WebpInfo.php",
            "lines": 24,
            "doc": "A WebP file's size and kind from its first 40 bytes, as wp_get_webp_info\nreads them (probe plugin-queue8): a simple lossy frame (VP8), a lossless\none (VP8L), or the extended form (VP8X), which the reference names\nanimated-alpha whatever its flags say. Anything shorter or of another\nchunk is unknown.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $head): array",
                    "doc": "The width, height and kind a file's first bytes declare. @return array{width: int|false, height: int|false, type: string|false}",
                    "shapes": [
                        "@return array{width: int|false, height: int|false, type: string|false}"
                    ],
                    "params": [
                        {
                            "name": "head",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 36
                }
            ]
        },
        {
            "name": "Minn\\Media\\Writer",
            "short": "Writer",
            "namespace": "Minn\\Media",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Media/Writer.php",
            "lines": 24,
            "doc": "Where the media library's files live, as a REST upload names them: a\nstored file's address, its path on disk, and its path relative to the\nuploads folder. The attachment itself is written through the runtime\n(wp_handle_upload, wp_insert_attachment, wp_generate_attachment_metadata),\nas the reference writes it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Media\\Uploads"
            ],
            "usedBy": [
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Media\\Uploads $uploads)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "uploads",
                        "type": "Minn\\Media\\Uploads",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "uploads",
                    "type": "Minn\\Media\\Uploads",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "urlOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "urlOf(string $relative): string",
                    "doc": "A stored file's address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "pathOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "pathOf(string $relative): string",
                    "doc": "A stored file's path on disk.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "relativeOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "relativeOf(string $absolutePath): ?string",
                    "doc": "A stored file's path relative to the uploads folder, or null for one outside it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "absolutePath",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Archive",
            "short": "Archive",
            "namespace": "Minn\\Ops",
            "kind": "final class",
            "file": "public/minn/src/Minn/Ops/Archive.php",
            "lines": 105,
            "doc": "A zip unpacked the safe way, for the plugin and theme installer and for\nthe engine's own update alike: every entry stays inside its folder (no\nabsolute path, no \"..\", no backslash, no NUL), none is a symbolic link,\nthere are no more than 20,000 of them, they unpack to no more than\n512 MB, and they all sit in exactly one top folder (macOS's __MACOSX\nnoise aside). Nothing is written until every entry has passed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\UpgraderRun"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAX_BYTES",
                    "value": "536870912",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "MAX_ENTRIES",
                    "value": "20000",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "unpackFolder",
                    "static": true,
                    "visibility": "public",
                    "signature": "unpackFolder(string $file, string $stage): string",
                    "doc": "Unpacks a zip file into a new folder $stage; the path of the one folder the archive held.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stage",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "inspect",
                    "static": true,
                    "visibility": "public",
                    "signature": "inspect(string $file): string",
                    "doc": "Checks every entry of a zip file without writing anything; the one folder it holds.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "holds",
                    "static": true,
                    "visibility": "public",
                    "signature": "holds(string $file, string $entry): bool",
                    "doc": "Whether a zip file holds an entry by that name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "entry",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "isFolderName",
                    "static": true,
                    "visibility": "public",
                    "signature": "isFolderName(string $name): bool",
                    "doc": "A plain folder name: no separators, never \".\" or \"..\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "isSymlinkEntry",
                    "static": true,
                    "visibility": "private",
                    "signature": "isSymlinkEntry(ZipArchive $archive, int $index): bool",
                    "doc": "Whether a zip entry is recorded as a symbolic link (a Unix entry whose mode says so).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "archive",
                            "type": "ZipArchive",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "index",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\Ops\\AutoUpdates",
            "short": "AutoUpdates",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/AutoUpdates.php",
            "lines": 29,
            "doc": "Whether per-item auto-updates apply to plugins or themes, as the\nreference decides it (contracts/rest/minn-admin-v1.md \"Auto-updates\"):\nnever when file mods are off (DISALLOW_FILE_MODS through file_mod_allowed,\ncontext automatic_updater), never when the updater is disabled\n(AUTOMATIC_UPDATER_DISABLED through automatic_updater_disabled, which a\nplugin may turn back), and then the type's own filter has the last word.\nOnly plugins and themes can be on.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Cron\\Cron",
                "Minn\\Ops\\Updates"
            ],
            "constructor": {
                "signature": "__construct(Closure $filter)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, mixed, mixed...): mixed $filter applies a filter, as apply_filters does"
                ],
                "params": [
                    {
                        "name": "filter",
                        "type": "Closure",
                        "shape": "Closure(string, mixed, mixed...): mixed",
                        "default": null,
                        "doc": "applies a filter, as apply_filters does"
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 23
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "filter",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forSite",
                    "static": true,
                    "visibility": "public",
                    "signature": "forSite(): self",
                    "doc": "The gate as the site's plugins see it: through their filters once the runtime's hooks exist, as configured otherwise.",
                    "shapes": [],
                    "params": [],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "enabledFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "enabledFor(string $type): bool",
                    "doc": "Whether per-item auto-updates apply to a type (\"plugin\" or \"theme\"; anything else is never on).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "updaterOff",
                    "static": false,
                    "visibility": "private",
                    "signature": "updaterOff(): bool",
                    "doc": "Whether the automatic updater is off for the whole site: file mods refused, or the updater disabled.",
                    "shapes": [],
                    "params": [],
                    "line": 41,
                    "end": 45
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Changelog",
            "short": "Changelog",
            "namespace": "Minn\\Ops",
            "kind": "final class",
            "file": "public/minn/src/Minn/Ops/Changelog.php",
            "lines": 68,
            "doc": "A changelog read from its repository rather than shipped: a Minn release\ncarries no notes, its own or Minn Admin's, for anyone to find on the\nsites that run it. The update service reads changelog.md from the\nrepository's default branch on GitHub; the engine asks the service at most\nonce a day and keeps the copy in an option (JSON) with the time it came;\nsections still marked Unreleased are left out, so a site only reads about\nreleases that exist. A fetch GitHub does not answer keeps the last copy; a\n404 (no such file, or a private repository) keeps nothing.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Http",
                "Minn\\Json",
                "Minn\\Ops\\Directory"
            ],
            "usedBy": [
                "Minn\\Admin\\BundleController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Closure $load, Closure $save, string $source, Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [
                    "@param Closure(): ?string $load the stored copy, as JSON",
                    "@param Closure(string): void $save keeps the copy, as JSON"
                ],
                "params": [
                    {
                        "name": "load",
                        "type": "Closure",
                        "shape": "Closure(): ?string",
                        "default": null,
                        "doc": "the stored copy, as JSON"
                    },
                    {
                        "name": "save",
                        "type": "Closure",
                        "shape": "Closure(string): void",
                        "default": null,
                        "doc": "keeps the copy, as JSON"
                    },
                    {
                        "name": "source",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 32,
                "end": 38
            },
            "cases": [],
            "constants": [
                {
                    "name": "TTL",
                    "value": "86400",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ENGINE_SOURCE",
                    "value": "'https://updates.minn.run/v1/minn/changelog'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "ADMIN_SOURCE",
                    "value": "'https://updates.minn.run/v1/minn-admin/changelog'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "load",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "save",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "source",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "engine",
                    "static": true,
                    "visibility": "public",
                    "signature": "engine(Minn\\Content\\Site $site): self",
                    "doc": "Minn's changelog for a site, kept in its minn_changelog option.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "admin",
                    "static": true,
                    "visibility": "public",
                    "signature": "admin(Minn\\Content\\Site $site): self",
                    "doc": "Minn Admin's changelog for a site running Minn, kept in its minn_admin_changelog option.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "markdown",
                    "static": false,
                    "visibility": "public",
                    "signature": "markdown(): string",
                    "doc": "The released sections as Markdown, fetched first when the copy is a day old; '' when there is none.",
                    "shapes": [],
                    "params": [],
                    "line": 64,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "released",
                    "static": true,
                    "visibility": "public",
                    "signature": "released(string $markdown): string",
                    "doc": "The changelog without its Unreleased sections.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markdown",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "kept",
                    "static": true,
                    "visibility": "private",
                    "signature": "kept(Minn\\Content\\Site $site, string $option, string $source): self",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 61
                }
            ]
        },
        {
            "name": "Minn\\Ops\\CoreStatus",
            "short": "CoreStatus",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/CoreStatus.php",
            "lines": 48,
            "doc": "The core the app's update banner and chip speak of, which on Minn is\nMinn: the running engine's version, a newer release on offer\n(Ops\\Releases, asked of the update service once a day), and installing it\n(Ops\\EngineUpdate). WordPress's own offer (the update_core transient a\nparked copy may write) is not Minn's to act on and is not shown.\ndbUpgrade is false: the database is WordPress's, and a Minn release\nnever migrates it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Releases",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Ops\\Releases $releases, Minn\\Ops\\EngineUpdate $engine, string $version)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "releases",
                        "type": "Minn\\Ops\\Releases",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engine",
                        "type": "Minn\\Ops\\EngineUpdate",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "version",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "releases",
                    "type": "Minn\\Ops\\Releases",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "engine",
                    "type": "Minn\\Ops\\EngineUpdate",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "version",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "data",
                    "static": false,
                    "visibility": "public",
                    "signature": "data(): array",
                    "doc": "Minn's version, any offer, and when the update service was last asked.",
                    "shapes": [],
                    "params": [],
                    "line": 29,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "due",
                    "static": false,
                    "visibility": "public",
                    "signature": "due(): bool",
                    "doc": "Whether the update service was last asked a day ago or more.",
                    "shapes": [],
                    "params": [],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "refresh",
                    "static": false,
                    "visibility": "public",
                    "signature": "refresh(): void",
                    "doc": "Asks the update service now.",
                    "shapes": [],
                    "params": [],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(): string",
                    "doc": "Installs the release on offer; the version now in place.",
                    "shapes": [],
                    "params": [],
                    "line": 54,
                    "end": 65
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Diagnostics",
            "short": "Diagnostics",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/Diagnostics.php",
            "lines": 408,
            "doc": "The System view's facts about this install: the engine, PHP, the\ndatabase, and the server, with the health checks a site owner acts on.\nEvery number is read live; nothing is cached or fetched from outside.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Request",
                "Minn\\Mail\\MailSettings",
                "Minn\\Ops\\InstalledSoftware",
                "Minn\\Ops\\Logs",
                "Minn\\Runtime\\CronTable"
            ],
            "usedBy": [
                "Minn\\Admin\\SystemController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Ops\\InstalledSoftware $software, Minn\\Ops\\Logs $logs, string $engineVersion, string $webroot)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "software",
                        "type": "Minn\\Ops\\InstalledSoftware",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "logs",
                        "type": "Minn\\Ops\\Logs",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engineVersion",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "webroot",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 32
            },
            "cases": [],
            "constants": [
                {
                    "name": "AUTOLOAD_VALUES",
                    "value": "array (   0 => 'yes',   1 => 'on',   2 => 'auto',   3 => 'auto-on', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "software",
                    "type": "Minn\\Ops\\InstalledSoftware",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "logs",
                    "type": "Minn\\Ops\\Logs",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "engineVersion",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "webroot",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "payload",
                    "static": false,
                    "visibility": "public",
                    "signature": "payload(Minn\\Http\\Request $request): array",
                    "doc": "The System view: checks, config, logs, and the four info groups.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "config",
                    "static": false,
                    "visibility": "public",
                    "signature": "config(): array",
                    "doc": "The wp-config debug constants as they stand; the engine never rewrites the file.",
                    "shapes": [],
                    "params": [],
                    "line": 171,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "cron",
                    "static": false,
                    "visibility": "public",
                    "signature": "cron(): array",
                    "doc": "The scheduled events: the cron option's hooks and the engine's own scheduled posts, soonest first.",
                    "shapes": [],
                    "params": [],
                    "line": 207,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "autoload",
                    "static": false,
                    "visibility": "public",
                    "signature": "autoload(): array",
                    "doc": "The autoloaded options: the summary and the largest rows.",
                    "shapes": [],
                    "params": [],
                    "line": 274,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "checks",
                    "static": false,
                    "visibility": "private",
                    "signature": "checks(Minn\\Http\\Request $request, array $autoload, array $cron, Minn\\Mail\\MailSettings $mail): array",
                    "doc": "The pass / warn / fail rows the System view leads with.",
                    "shapes": [
                        "@param array<string, mixed> $autoload",
                        "@param array<string, mixed> $cron",
                        "@return list<array<string, string>>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "autoload",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "cron",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mail",
                            "type": "Minn\\Mail\\MailSettings",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "engineGroup",
                    "static": false,
                    "visibility": "private",
                    "signature": "engineGroup(array $cron, Minn\\Mail\\MailSettings $mail): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $cron @return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "cron",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, string>"
                        },
                        {
                            "name": "mail",
                            "type": "Minn\\Mail\\MailSettings",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "phpGroup",
                    "static": true,
                    "visibility": "private",
                    "signature": "phpGroup(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 123,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "serverGroup",
                    "static": false,
                    "visibility": "private",
                    "signature": "serverGroup(Minn\\Http\\Request $request): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "opcacheOn",
                    "static": true,
                    "visibility": "private",
                    "signature": "opcacheOn(): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 164,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "cronOptionEvents",
                    "static": false,
                    "visibility": "private",
                    "signature": "cronOptionEvents(): array",
                    "doc": "The cron option's events as rows, a recurring event's interval read\nas its recurrence and a single event marked one-off.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 232,
                    "end": 252
                },
                {
                    "routes": [],
                    "name": "humanInterval",
                    "static": true,
                    "visibility": "private",
                    "signature": "humanInterval(int $seconds): string",
                    "doc": "A recurrence interval as its two largest whole units.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "seconds",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 255,
                    "end": 271
                },
                {
                    "routes": [],
                    "name": "autoloadSummary",
                    "static": false,
                    "visibility": "private",
                    "signature": "autoloadSummary(): array",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 295,
                    "end": 307
                },
                {
                    "routes": [],
                    "name": "cronSummary",
                    "static": false,
                    "visibility": "private",
                    "signature": "cronSummary(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{events: int, overdue: int, next: ?int}"
                    ],
                    "params": [],
                    "line": 310,
                    "end": 325
                },
                {
                    "routes": [],
                    "name": "futurePosts",
                    "static": false,
                    "visibility": "private",
                    "signature": "futurePosts(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 328,
                    "end": 333
                },
                {
                    "routes": [],
                    "name": "databaseGroup",
                    "static": false,
                    "visibility": "private",
                    "signature": "databaseGroup(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: array<string, string>, 1: list<array>}"
                    ],
                    "params": [],
                    "line": 336,
                    "end": 372
                },
                {
                    "routes": [],
                    "name": "check",
                    "static": true,
                    "visibility": "private",
                    "signature": "check(string $key, string $label, string $status, string $detail): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "detail",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 374,
                    "end": 377
                },
                {
                    "routes": [],
                    "name": "rows",
                    "static": true,
                    "visibility": "private",
                    "signature": "rows(array $pairs): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array{key: string, value: string}>"
                    ],
                    "params": [
                        {
                            "name": "pairs",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 380,
                    "end": 387
                },
                {
                    "routes": [],
                    "name": "bytes",
                    "static": true,
                    "visibility": "private",
                    "signature": "bytes(string $value): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 389,
                    "end": 402
                },
                {
                    "routes": [],
                    "name": "offsetLabel",
                    "static": true,
                    "visibility": "private",
                    "signature": "offsetLabel(float $offset): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "offset",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 404,
                    "end": 410
                },
                {
                    "routes": [],
                    "name": "relative",
                    "static": true,
                    "visibility": "private",
                    "signature": "relative(int $at): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 412,
                    "end": 425
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Directory",
            "short": "Directory",
            "namespace": "Minn\\Ops",
            "kind": "final class",
            "file": "public/minn/src/Minn/Ops/Directory.php",
            "lines": 35,
            "doc": "The Minn update service, https://updates.minn.run: the one place the\nengine asks about anything it does not have yet, so a site running Minn\ntalks to Minn and never to wordpress.org. The service speaks\nwordpress.org's own endpoints under /v1/ (plugin and theme update checks,\ndirectory search and information, translations) with every address a site\nwould fetch pointed back at itself: packages under /v1/download/, icons,\nscreenshots and emoji under /v1/assets/. It also serves Minn's own\nreleases and changelogs. Every request names the engine and the WordPress\nversion it is compatible with (which judges a plugin's \"Requires at\nleast\"), never the site's address.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Engine",
                "Minn\\Http",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Cli\\PackageInstaller",
                "Minn\\Ops\\Changelog",
                "Minn\\Ops\\EngineChecksums",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Release",
                "Minn\\Ops\\Releases",
                "Minn\\Ops\\Updates",
                "Minn\\Ops\\UpgraderRun"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ORIGIN",
                    "value": "'https://updates.minn.run/'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "BASE",
                    "value": "'https://updates.minn.run/v1/'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "PACKAGES",
                    "value": "'https://updates.minn.run/v1/download/'",
                    "doc": "Where plugin, theme and translation packages download from.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "url",
                    "static": true,
                    "visibility": "public",
                    "signature": "url(string $path): string",
                    "doc": "An address on the service: a path under /v1/, such as \"plugins/info/1.2/\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "userAgent",
                    "static": true,
                    "visibility": "public",
                    "signature": "userAgent(): string",
                    "doc": "How the engine introduces itself: its version, and nothing about the site.",
                    "shapes": [],
                    "params": [],
                    "line": 38,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "post",
                    "static": true,
                    "visibility": "public",
                    "signature": "post(Minn\\Http $http, string $path, array $form): array",
                    "doc": "A form POST to the service (the update checks) over the caller's client, its answer decoded.",
                    "shapes": [
                        "@param array<string, string> $form",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "http",
                            "type": "Minn\\Http",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "form",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 56
                }
            ]
        },
        {
            "name": "Minn\\Ops\\DirectoryApi",
            "short": "DirectoryApi",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/DirectoryApi.php",
            "lines": 56,
            "doc": "plugins_api() and themes_api() as plugins call them and answer them\n(probes plugins-api, themes-api), one class for both ($kind 'plugins' or\n'themes'): the arguments as an object with the reader's locale and the\nmajor.minor version beside them, through <kind>_api_args; then whatever a\nplugin answers through <kind>_api (a seller's own information, or an\nerror) stands, and only when nobody answers is the directory asked,\nthrough Ops\\Packages (behind the Minn update service);\n<kind>_api_result is handed what came back either way. A refusal is\n<kind>_api_failed in the directory's own words.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Ops\\Packages"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $kind, Closure $filter, Minn\\Ops\\Packages $packages, string $locale, string $version)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, mixed...): mixed $filter applies a filter, as apply_filters does"
                ],
                "params": [
                    {
                        "name": "kind",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "filter",
                        "type": "Closure",
                        "shape": "Closure(string, mixed...): mixed",
                        "default": null,
                        "doc": "applies a filter, as apply_filters does"
                    },
                    {
                        "name": "packages",
                        "type": "Minn\\Ops\\Packages",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "locale",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "version",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "kind",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "filter",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "packages",
                    "type": "Minn\\Ops\\Packages",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "locale",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "version",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "ask",
                    "static": false,
                    "visibility": "public",
                    "signature": "ask(string $action, object|array $args): mixed",
                    "doc": "The answer for an action (plugin_information, query_themes, ...): an object, a WP_Error, or what a plugin returned.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "object|array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "directory",
                    "static": false,
                    "visibility": "private",
                    "signature": "directory(string $action, array $request): object",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $request"
                    ],
                    "params": [
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "unexpected",
                    "static": false,
                    "visibility": "private",
                    "signature": "unexpected(string $body): WP_Error",
                    "doc": "An answer that is not JSON. wordpress.org words an unknown theme\naction as JSON to WordPress but as a paragraph to anyone else (the\nupdate service), so the paragraph is read as the refusal WordPress\nwould have been given; anything else is the reference's own message\nfor an answer it cannot read, the body kept as its data.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 74
                }
            ]
        },
        {
            "name": "Minn\\Ops\\EngineChecksums",
            "short": "EngineChecksums",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/EngineChecksums.php",
            "lines": 157,
            "doc": "Checks a Minn install's files against the release they claim to be, the\nway `wp core verify-checksums` checks WordPress's against wordpress.org:\nthe update service describes the running version's release, its minn.zip\nis downloaded from the service alone and must match its published sha256\nand carry a signature from a key this engine trusts (EngineUpdate), and\nthen every file of the engine is compared with the archive's, as are the\nshape files at the webroot with the archive's layout templates. A file\nthat differs, one the archive has and the install lacks, and one the\ninstall has beyond the archive are all named. The install record\n(.install.json) is the site's own and is not compared.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Download",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Release",
                "Minn\\Support\\Files"
            ],
            "usedBy": [
                "Minn\\Cli\\CoreCommand"
            ],
            "constructor": {
                "signature": "__construct(string $engineDir, array $keys = Minn\\Ops\\EngineUpdate::KEYS, Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [
                    "@param list<string> $keys the release keys to trust (tests pass their own)"
                ],
                "params": [
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "keys",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "Minn\\Ops\\EngineUpdate::KEYS",
                        "doc": "the release keys to trust (tests pass their own)"
                    },
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 37,
                "end": 39
            },
            "cases": [],
            "constants": [
                {
                    "name": "SOURCE",
                    "value": "'https://updates.minn.run/v1/minn/releases/'",
                    "doc": "Where a version's release record is asked for.",
                    "visibility": "public"
                },
                {
                    "name": "MAX_DOWNLOAD",
                    "value": "67108864",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "OWN",
                    "value": "array (   0 => '.install.json', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "keys",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "check",
                    "static": false,
                    "visibility": "public",
                    "signature": "check(string $webroot): array",
                    "doc": "The comparison: the version checked, and the paths (under minn/, or at\nthe webroot for shape files) that differ, are missing, or are extra.",
                    "shapes": [
                        "@return array{version: string, changed: list<string>, missing: list<string>, extra: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "webroot",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "release",
                    "static": false,
                    "visibility": "private",
                    "signature": "release(string $version): Minn\\Ops\\Release",
                    "doc": "The release the service describes for a version; it must be one Minn offers, of that version.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "archiveHashes",
                    "static": true,
                    "visibility": "private",
                    "signature": "archiveHashes(string $zip): array",
                    "doc": "The sha256 of every file in the archive's engine folder, by its path inside that folder.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "treeHashes",
                    "static": true,
                    "visibility": "private",
                    "signature": "treeHashes(string $dir): array",
                    "doc": "The sha256 of every file under the engine folder, by its path inside it; the install record left out.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "layoutOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "layoutOf(array $released): array",
                    "doc": "The archive's layout templates by the webroot path each shapes.",
                    "shapes": [
                        "@param array<string, string> $released",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "released",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "shapeHashes",
                    "static": true,
                    "visibility": "private",
                    "signature": "shapeHashes(string $webroot, array $paths): array",
                    "doc": "The sha256 of the webroot's shape files that exist.",
                    "shapes": [
                        "@param list<string> $paths",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "webroot",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paths",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "compare",
                    "static": true,
                    "visibility": "private",
                    "signature": "compare(array $expected, array $found, string $prefix): array",
                    "doc": "Expected against found: the paths that differ, are missing, and are extra, prefixed.",
                    "shapes": [
                        "@param array<string, string> $expected",
                        "@param array<string, string> $found",
                        "@return array{changed: list<string>, missing: list<string>, extra: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "expected",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "found",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 182
                }
            ]
        },
        {
            "name": "Minn\\Ops\\EngineUpdate",
            "short": "EngineUpdate",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/EngineUpdate.php",
            "lines": 150,
            "doc": "Replaces the running engine with a published release. The release's\nminn.zip comes from the Minn update service and nowhere else (every\nredirect hop is judged), must match the sha256 its release records, and\nmust carry an Ed25519 signature made with a key this engine was built to\ntrust (KEYS; the secret half never leaves the release maintainer's\nmachine, so neither GitHub nor the service can stand in a build of their\nown). It is unpacked beside the engine into a folder of its own, where it\nis checked again: its bootstrap names the version on offer and bin/minn is\nthere. Then the swap, two renames in the folder the engine lives in: the\nrunning engine moves aside, the new one moves in, and the old copy is\nremoved; when the second rename fails the first is undone. The webroot's\nshape files are laid again from the new engine (ShapeFiles::refresh): one\nstill as the old engine wrote it, a stock empty placeholder above all, is\nreplaced, and one the site changed is left alone. The legacy\ninstall record (.install.json, from installs that kept it inside the\nengine) comes along. One update runs at a time. A development checkout (a\nsymbolic link, or a folder under git) is refused: git owns those. The\nsite keeps answering throughout.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http",
                "Minn\\Http\\Download",
                "Minn\\Ops\\Archive",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\Release",
                "Minn\\Ops\\ShapeFiles",
                "Minn\\Support\\Files"
            ],
            "usedBy": [
                "Minn\\Cli\\Installer",
                "Minn\\Ops\\CoreStatus",
                "Minn\\Ops\\EngineChecksums",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(string $engineDir, array $keys = self::KEYS, Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [
                    "@param list<string> $keys the release keys to trust (tests pass their own)"
                ],
                "params": [
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "keys",
                        "type": "array",
                        "shape": "list<string>",
                        "default": "self::KEYS",
                        "doc": "the release keys to trust (tests pass their own)"
                    },
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 44,
                "end": 46
            },
            "cases": [],
            "constants": [
                {
                    "name": "KEYS",
                    "value": "array (   0 => '+Usjnr1ZTudBbWToqYLkZ1Oy2yKN07d9+u62AIJ2FG8=', )",
                    "doc": "The public halves of the keys that sign Minn releases (base64 Ed25519;\nscripts/release-key.php). A new key ships here in a release signed by\nan old one before it signs anything.",
                    "visibility": "public"
                },
                {
                    "name": "MAX_DOWNLOAD",
                    "value": "67108864",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "keys",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": false,
                    "visibility": "public",
                    "signature": "apply(Minn\\Ops\\Release $release): string",
                    "doc": "Downloads, checks and installs a release; the version now in place.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "release",
                            "type": "Minn\\Ops\\Release",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(string $zip, string $sha256, string $signature, string $version): string",
                    "doc": "Installs an archive in hand once it matches its checksum and signature,\nholds the version named, and that version is newer than the running\none: an older release signed in its day is still signed, and putting\nit back would bring back what it was replaced for. The version now in\nplace.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sha256",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "signature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "verify",
                    "static": false,
                    "visibility": "public",
                    "signature": "verify(string $zip, string $sha256, string $signature, string $version, string $use = 'used'): void",
                    "doc": "Throws unless an archive matches the checksum its release publishes and carries a signature from a trusted key; $use says what would not happen.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sha256",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "signature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "use",
                            "type": "string",
                            "shape": "",
                            "default": "'used'",
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "versionOf",
                    "static": true,
                    "visibility": "public",
                    "signature": "versionOf(string $engineDir): string",
                    "doc": "The version a bootstrap.php names; \"0.0.0\" when it names none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "swap",
                    "static": false,
                    "visibility": "private",
                    "signature": "swap(string $zip, string $version, string $parent): string",
                    "doc": "Unpacks, checks and swaps in the archive, one update at a time (install() holds the lock).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "signed",
                    "static": false,
                    "visibility": "private",
                    "signature": "signed(string $zip, string $signature): bool",
                    "doc": "Whether one of the trusted keys made this signature over the archive.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "signature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "refuseCheckout",
                    "static": false,
                    "visibility": "private",
                    "signature": "refuseCheckout(): void",
                    "doc": "A link, or a folder inside a git working copy at any depth (the engine's own repository keeps it two levels down).",
                    "shapes": [],
                    "params": [],
                    "line": 171,
                    "end": 180
                }
            ]
        },
        {
            "name": "Minn\\Ops\\InstalledSoftware",
            "short": "InstalledSoftware",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/InstalledSoftware.php",
            "lines": 59,
            "doc": "What is installed, as the System view lists it: every extension and\nWordPress plugin with whether it runs, the mu-plugins, the themes with\ntheir parents, and the active theme's label.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Site",
                "Minn\\Extension\\Loader",
                "Minn\\Support\\FileHeaders"
            ],
            "usedBy": [
                "Minn\\Ops\\Diagnostics",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Content\\Inventory $inventory, Minn\\Extension\\Loader $extensions, string $webroot)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "inventory",
                        "type": "Minn\\Content\\Inventory",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "extensions",
                        "type": "Minn\\Extension\\Loader",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "webroot",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "inventory",
                    "type": "Minn\\Content\\Inventory",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "extensions",
                    "type": "Minn\\Extension\\Loader",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "webroot",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "activeExtensionCount",
                    "static": false,
                    "visibility": "public",
                    "signature": "activeExtensionCount(): int",
                    "doc": "How many Minn extensions are active.",
                    "shapes": [],
                    "params": [],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "manifest",
                    "static": false,
                    "visibility": "public",
                    "signature": "manifest(): array",
                    "doc": "Plugins, mu-plugins, and themes with their versions and whether each is active.",
                    "shapes": [],
                    "params": [],
                    "line": 34,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "activeThemeLabel",
                    "static": false,
                    "visibility": "public",
                    "signature": "activeThemeLabel(): string",
                    "doc": "The active theme's name and version, naming the parent of a child theme; the slug when the headers are missing.",
                    "shapes": [],
                    "params": [],
                    "line": 61,
                    "end": 74
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Logs",
            "short": "Logs",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/Logs.php",
            "lines": 150,
            "doc": "The log files the System view can read and clear: the debug log the\nengine's failure handler writes, and PHP's own error log when it is a\nseparate file inside the site. Anything outside the site is named but\nnever read; it may be another tenant's.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Admin\\SystemController",
                "Minn\\Ops\\Diagnostics",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(string $webroot)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "webroot",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 21
            },
            "cases": [],
            "constants": [
                {
                    "name": "TAIL_BYTES",
                    "value": "262144",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "webroot",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "sources",
                    "static": false,
                    "visibility": "public",
                    "signature": "sources(): array",
                    "doc": "Every log the engine knows about, with its path and group.",
                    "shapes": [
                        "@return array<string, array{label: string, group: string, path: string}>"
                    ],
                    "params": [],
                    "line": 28,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "listPayload",
                    "static": false,
                    "visibility": "public",
                    "signature": "listPayload(): array",
                    "doc": "The logs list as the System view shows it.",
                    "shapes": [
                        "@return list<array> the sources that exist, debug first"
                    ],
                    "params": [],
                    "line": 43,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": false,
                    "visibility": "public",
                    "signature": "read(string $id): array",
                    "doc": "One log's tail, by id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": false,
                    "visibility": "public",
                    "signature": "clear(string $id): void",
                    "doc": "Empties one log.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "debugLogPath",
                    "static": false,
                    "visibility": "public",
                    "signature": "debugLogPath(): string",
                    "doc": "Where debug.log lives, from WP_DEBUG_LOG or the default.",
                    "shapes": [],
                    "params": [],
                    "line": 99,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "tail",
                    "static": false,
                    "visibility": "public",
                    "signature": "tail(string $path): array",
                    "doc": "The last TAIL_BYTES of a file, the partial first line dropped.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "owned",
                    "static": false,
                    "visibility": "public",
                    "signature": "owned(string $path): bool",
                    "doc": "True when the path resolves inside the webroot.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "human",
                    "static": true,
                    "visibility": "public",
                    "signature": "human(int $bytes): string",
                    "doc": "A byte count in KB, MB, or GB.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 163
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Packages",
            "short": "Packages",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/Packages.php",
            "lines": 481,
            "doc": "Putting plugins, themes and extensions on disk. Plugins and themes come\nfrom the directory (wordpress.org's, asked through the Minn update\nservice, Ops\\Directory) or an uploaded zip, and are installed through\nWordPress's upgraders (UpgraderRun), so plugins hear every upgrader hook;\na Minn extension (a folder with a minn.json) is placed by the engine.\nEvery archive passes Archive's checks first: exactly one top-level\nfolder that is a plain name (never \".\" or \"..\"), no absolute or dotted\npaths, no symbolic links, bounded entry count and size. Removal proves\nthe folder is a direct child of its kind's directory before anything is\ndeleted.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Site",
                "Minn\\Extension\\Manifest",
                "Minn\\Http",
                "Minn\\Http\\Download",
                "Minn\\Json",
                "Minn\\Ops\\Archive",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\UpgraderRun",
                "Minn\\RestError",
                "Minn\\Support\\FileHeaders",
                "Minn\\Support\\Files"
            ],
            "usedBy": [
                "Minn\\Admin\\PackagesController",
                "Minn\\Cli\\DirectorySearch",
                "Minn\\Cli\\PackageInstaller",
                "Minn\\Cli\\PluginCommand",
                "Minn\\Cli\\ThemeCommand",
                "Minn\\Ops\\DirectoryApi",
                "Minn\\Ops\\Updates",
                "Minn\\Ops\\UpgraderRun",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, string $contentDir, Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 38,
                "end": 40
            },
            "cases": [],
            "constants": [
                {
                    "name": "THEMES_INFO",
                    "value": "'https://updates.minn.run/v1/themes/info/1.2/'",
                    "doc": "The largest archive fetched or unpacked, in bytes.",
                    "visibility": "private"
                },
                {
                    "name": "PLUGINS_INFO",
                    "value": "'https://updates.minn.run/v1/plugins/info/1.2/'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "INFO_OPTION",
                    "value": "'minn_plugin_info'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "INFO_TTL",
                    "value": "43200",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "contentDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "searchThemes",
                    "static": false,
                    "visibility": "public",
                    "signature": "searchThemes(string $query): array",
                    "doc": "Directory theme search, or the popular list for an empty query. @return list<array>",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "searchPlugins",
                    "static": false,
                    "visibility": "public",
                    "signature": "searchPlugins(string $query, int $page): array",
                    "doc": "Directory plugin search: twelve per page with icons, short\ndescriptions, install counts, and ratings, plus which results are\nalready installed (by folder). @return array{plugins: list<array>, page: int, pages: int, total: int}",
                    "shapes": [
                        "@return array{plugins: list<array>, page: int, pages: int, total: int}"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "pluginInfo",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginInfo(string $slug): array",
                    "doc": "The slim card for one directory plugin, cached twelve hours per slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "installPlugin",
                    "static": false,
                    "visibility": "public",
                    "signature": "installPlugin(string $slug, string $version = ''): string",
                    "doc": "Installs a directory plugin by slug, through the upgrader; returns its folder.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "replacePlugin",
                    "static": false,
                    "visibility": "public",
                    "signature": "replacePlugin(string $slug, string $version = ''): string",
                    "doc": "Installs a directory plugin over the folder already there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "directoryPlugin",
                    "static": false,
                    "visibility": "public",
                    "signature": "directoryPlugin(string $slug): ?array",
                    "doc": "One directory plugin record, or null when the slug is unknown.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 187,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "infoAction",
                    "static": false,
                    "visibility": "public",
                    "signature": "infoAction(string $kind, string $action, array $request): ?array",
                    "doc": "The directory's answer to a plugins_api() or themes_api() action\n($kind 'plugins' or 'themes'), its request passed as given\n(Ops\\DirectoryApi), read whatever the status: a refusal is the\ndirectory's own words ({\"error\": ...}); an answer that is not JSON\ncomes back as {\"unexpected\": body}. Null when the service did not\nanswer.",
                    "shapes": [
                        "@param array<string, mixed> $request",
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 211,
                    "end": 220
                },
                {
                    "routes": [],
                    "name": "queryThemes",
                    "static": false,
                    "visibility": "public",
                    "signature": "queryThemes(string $search, int $page, int $perPage): array",
                    "doc": "A page of directory themes for `wp theme search`.",
                    "shapes": [
                        "@return array{items: list<array<string, mixed>>, total: int}"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perPage",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "queryPlugins",
                    "static": false,
                    "visibility": "public",
                    "signature": "queryPlugins(string $search, int $page, int $perPage): array",
                    "doc": "A page of directory plugins for `wp plugin search`.",
                    "shapes": [
                        "@return array{items: list<array<string, mixed>>, total: int}"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perPage",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 264,
                    "end": 288
                },
                {
                    "routes": [],
                    "name": "directoryTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "directoryTheme(string $slug): ?array",
                    "doc": "One directory theme record, or null when the slug is unknown.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 295,
                    "end": 302
                },
                {
                    "routes": [],
                    "name": "installTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "installTheme(string $slug, string $version = ''): string",
                    "doc": "Installs a directory theme by slug, through the upgrader; returns its stylesheet folder.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 305,
                    "end": 308
                },
                {
                    "routes": [],
                    "name": "replaceTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "replaceTheme(string $slug, string $version = ''): string",
                    "doc": "Installs a directory theme over the folder already there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 311,
                    "end": 314
                },
                {
                    "routes": [],
                    "name": "unpack",
                    "static": false,
                    "visibility": "public",
                    "signature": "unpack(string $zip, string $kind): array",
                    "doc": "Unpacks an uploaded or downloaded archive into wp-content/themes or\nwp-content/plugins: a theme or a WordPress plugin through the upgrader,\na Minn extension (minn.json) placed by the engine; refused when its\nfolder is taken. @return array{folder: string, name: string, version: string, kind: string}",
                    "shapes": [
                        "@return array{folder: string, name: string, version: string, kind: string}"
                    ],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 342,
                    "end": 354
                },
                {
                    "routes": [],
                    "name": "unpackReplacing",
                    "static": false,
                    "visibility": "public",
                    "signature": "unpackReplacing(string $zip, string $kind): array",
                    "doc": "Unpacks a zip over a folder already there, replacing it whole.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 357,
                    "end": 360
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": false,
                    "visibility": "public",
                    "signature": "remove(string $kind, string $folder): void",
                    "doc": "Removes a theme or plugin folder that is not in use.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 419,
                    "end": 437
                },
                {
                    "routes": [],
                    "name": "identity",
                    "static": false,
                    "visibility": "public",
                    "signature": "identity(string $dir, string $kind): array",
                    "doc": "What a folder holds by its headers; kind \"unknown\" when nothing identifies it. @return array{name: string, version: string, kind: string}",
                    "shapes": [
                        "@return array{name: string, version: string, kind: string}"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 469,
                    "end": 486
                },
                {
                    "routes": [],
                    "name": "fetch",
                    "static": false,
                    "visibility": "public",
                    "signature": "fetch(string $url, string ...$hostPrefixes): string",
                    "doc": "A package over https, every redirect hop included, refusing anything\nelse; when host prefixes are given, every hop must start with one.\nThe request names the engine, never the site's address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hostPrefixes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 499,
                    "end": 509
                },
                {
                    "routes": [],
                    "name": "pluginPackage",
                    "static": false,
                    "visibility": "private",
                    "signature": "pluginPackage(string $slug, string $version): string",
                    "doc": "The download link of a directory plugin (on the update service), at a version when one is asked for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": true,
                    "visibility": "private",
                    "signature": "plain(string $value): string",
                    "doc": "Directory text as the app shows it: tags stripped, entities decoded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 223,
                    "end": 226
                },
                {
                    "routes": [],
                    "name": "themePackage",
                    "static": false,
                    "visibility": "private",
                    "signature": "themePackage(string $slug, string $version): string",
                    "doc": "The download link of a directory theme (on the update service), at a version when one is asked for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 317,
                    "end": 334
                },
                {
                    "routes": [],
                    "name": "upload",
                    "static": false,
                    "visibility": "private",
                    "signature": "upload(string $zip, string $kind, array $args): ?array",
                    "doc": "An archive checked by Archive and installed through the upgrader, as\nMinn Admin's uploads are on WordPress; null for a Minn extension,\nwhich the engine places itself.",
                    "shapes": [
                        "@param array<string, mixed> $args the upgrader's install arguments",
                        "@return array{folder: string, name: string, version: string, kind: string}|null"
                    ],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the upgrader's install arguments"
                        }
                    ],
                    "line": 370,
                    "end": 385
                },
                {
                    "routes": [],
                    "name": "place",
                    "static": false,
                    "visibility": "private",
                    "signature": "place(string $zip, string $kind, Closure $onExisting): array",
                    "doc": "Unpacks a zip into wp-content; $onExisting decides what happens to a\nfolder already at the destination (refuse, or clear it).",
                    "shapes": [
                        "@param Closure(string, string, array): mixed $onExisting"
                    ],
                    "params": [
                        {
                            "name": "zip",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "onExisting",
                            "type": "Closure",
                            "shape": "Closure(string, string, array): mixed",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 393,
                    "end": 416
                },
                {
                    "routes": [],
                    "name": "contained",
                    "static": false,
                    "visibility": "private",
                    "signature": "contained(string $kind, string $folder): string",
                    "doc": "The path a folder of this kind lives at, proven to be a direct child of the kind's directory.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 440,
                    "end": 448
                },
                {
                    "routes": [],
                    "name": "identify",
                    "static": false,
                    "visibility": "private",
                    "signature": "identify(string $dir, string $kind): array",
                    "doc": "What a folder is: a theme (style.css with a Theme Name), a Minn\nextension (minn.json), or a WordPress plugin, which is named so the\nrefusal can say what was uploaded. @return array{name: string, version: string, kind: string}",
                    "shapes": [
                        "@return array{name: string, version: string, kind: string}"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 455,
                    "end": 466
                },
                {
                    "routes": [],
                    "name": "ask",
                    "static": false,
                    "visibility": "private",
                    "signature": "ask(string $url): string",
                    "doc": "A directory answer from the Minn update service, every redirect hop staying on it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 489,
                    "end": 492
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Release",
            "short": "Release",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/Release.php",
            "lines": 58,
            "doc": "One published Minn release as the update service describes it (and as\nthe minn_release option keeps it, the same shape): the version, its notes\nand page, when it went out, and its minn.zip with that file's sha256 and\nits Ed25519 signature. Anything else is not a release Minn offers: a\nversion that is not major.minor.patch, a package anywhere but Minn's own\ndownloads, a missing checksum, or a missing signature.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Ops\\Directory"
            ],
            "usedBy": [
                "Minn\\Ops\\EngineChecksums",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Releases"
            ],
            "constructor": {
                "signature": "__construct(string $version, string $url, string $published, string $notes, string $package, string $sha256, string $signature)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "version",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "published",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "notes",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "package",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "sha256",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "signature",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 32
            },
            "cases": [],
            "constants": [
                {
                    "name": "ASSET",
                    "value": "'minn.zip'",
                    "doc": "The archive every release ships: the public/minn/ tree with Minn Admin bundled at minn/admin.",
                    "visibility": "public"
                },
                {
                    "name": "DOWNLOADS",
                    "value": "'https://updates.minn.run/v1/minn/download/'",
                    "doc": "Where release packages download from; EngineUpdate fetches nothing else.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "version",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "published",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "notes",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "package",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "sha256",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "signature",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromArray",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromArray(array $row): ?self",
                    "doc": "A release from the service's answer or the stored option; null when it is not one Minn offers.",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "toArray(): array",
                    "doc": "The release as it is kept in the minn_release option.",
                    "shapes": [
                        "@return array{version: string, url: string, published: string, notes: string, package: string, sha256: string, signature: string}"
                    ],
                    "params": [],
                    "line": 62,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "newerThan",
                    "static": false,
                    "visibility": "public",
                    "signature": "newerThan(string $installed): bool",
                    "doc": "Whether this release is newer than a version that is installed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "installed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 71
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Releases",
            "short": "Releases",
            "namespace": "Minn\\Ops",
            "kind": "final class",
            "file": "public/minn/src/Minn/Ops/Releases.php",
            "lines": 87,
            "doc": "Whether a newer Minn is out, asked of the Minn update service at most\nonce a day: its latest installable release (published on GitHub, read\nby the service), kept in the minn_release option (JSON) with the time it\nwas asked. A check the service does not answer (offline, GitHub rate\nlimiting it) keeps the last answer and waits a day like any other; no\ninstallable release (a 404) offers nothing. This is Minn asking Minn,\nnever wordpress.org, and never GitHub directly.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Http",
                "Minn\\Json",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\Release"
            ],
            "usedBy": [
                "Minn\\Admin\\Notifications",
                "Minn\\Cli\\Installer",
                "Minn\\Ops\\CoreStatus",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Closure $load, Closure $save, string $installed, string $source = self::SOURCE, Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [
                    "@param Closure(): ?string $load the stored answer, as JSON",
                    "@param Closure(string): void $save keeps the answer, as JSON"
                ],
                "params": [
                    {
                        "name": "load",
                        "type": "Closure",
                        "shape": "Closure(): ?string",
                        "default": null,
                        "doc": "the stored answer, as JSON"
                    },
                    {
                        "name": "save",
                        "type": "Closure",
                        "shape": "Closure(string): void",
                        "default": null,
                        "doc": "keeps the answer, as JSON"
                    },
                    {
                        "name": "installed",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "source",
                        "type": "string",
                        "shape": "",
                        "default": "self::SOURCE",
                        "doc": ""
                    },
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 31,
                "end": 38
            },
            "cases": [],
            "constants": [
                {
                    "name": "OPTION",
                    "value": "'minn_release'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "TTL",
                    "value": "86400",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SOURCE",
                    "value": "'https://updates.minn.run/v1/minn/releases/latest'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "load",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "save",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "installed",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "source",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forSite",
                    "static": true,
                    "visibility": "public",
                    "signature": "forSite(Minn\\Content\\Site $site, string $installed): self",
                    "doc": "The check for a site, its answer kept in the site's minn_release option.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "installed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "stored",
                    "static": false,
                    "visibility": "public",
                    "signature": "stored(): array",
                    "doc": "The stored answer: when GitHub was last asked and the latest release then.",
                    "shapes": [
                        "@return array{checked: int, latest: ?array<string, string>}"
                    ],
                    "params": [],
                    "line": 57,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "due",
                    "static": false,
                    "visibility": "public",
                    "signature": "due(): bool",
                    "doc": "Whether the stored answer is a day old, or there is none.",
                    "shapes": [],
                    "params": [],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "refresh",
                    "static": false,
                    "visibility": "public",
                    "signature": "refresh(): array",
                    "doc": "Asks the service now and keeps the answer; `answered` says whether it\ndid (when it did not, `latest` is the last answer kept).",
                    "shapes": [
                        "@return array{checked: int, latest: ?array<string, string>, answered: bool}"
                    ],
                    "params": [],
                    "line": 78,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "offer",
                    "static": false,
                    "visibility": "public",
                    "signature": "offer(): ?Minn\\Ops\\Release",
                    "doc": "The release on offer: the latest one, when it is newer than the running engine.",
                    "shapes": [],
                    "params": [],
                    "line": 95,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "origin",
                    "static": true,
                    "visibility": "private",
                    "signature": "origin(string $url): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 106
                }
            ]
        },
        {
            "name": "Minn\\Ops\\ShapeFiles",
            "short": "ShapeFiles",
            "namespace": "Minn\\Ops",
            "kind": "final class",
            "file": "public/minn/src/Minn/Ops/ShapeFiles.php",
            "lines": 104,
            "doc": "The files an install lays at the webroot for tooling to find: the shape\nfiles from layout/ (index.php, wp-settings.php, version.php and the rest)\nand one file for each of the reference's wp-includes and wp-admin/includes\nfiles, an empty placeholder or, where layout/ ships one, the engine's\nloader. An engine update lays them again from the new engine: a file still\nas the replaced engine wrote it is replaced, a missing one is written, and\none the site changed is left alone.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Cli\\Installer",
                "Minn\\Ops\\EngineUpdate"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "LAYOUT",
                    "value": "array (   0 => 'index.php',   1 => 'wp-login.php',   2 => 'wp-settings.php',   3 => 'wp-cli.yml',   4 => 'wp-includes/version.php',   5 => 'wp-admin/index.php', )",
                    "doc": "The shape files copied from layout/ as they are.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "lay",
                    "static": true,
                    "visibility": "public",
                    "signature": "lay(string $engineDir, string $root): array",
                    "doc": "An install: every layout file copied, and each of the reference's\nfiles the site lacks written (an empty placeholder found there becomes\nthe loader layout/ ships for it).",
                    "shapes": [
                        "@return array{layout: int, placeholders: int} how many were written"
                    ],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "refresh",
                    "static": true,
                    "visibility": "public",
                    "signature": "refresh(string $engineDir, string $root, string $previous): int",
                    "doc": "An update, once the new engine is in place: each file the new engine\nlays that is missing, or still as the replaced engine ($previous, its\nfolder) laid it, is written from the new one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "previous",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "placeholder",
                    "static": true,
                    "visibility": "public",
                    "signature": "placeholder(string $file): string",
                    "doc": "The empty placeholder for one of the reference's files.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "boots",
                    "static": true,
                    "visibility": "private",
                    "signature": "boots(string $root): bool",
                    "doc": "Whether the webroot boots the engine: its wp-settings.php requires minn/bootstrap.php.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "wanted",
                    "static": true,
                    "visibility": "private",
                    "signature": "wanted(string $engineDir): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string> every file the engine lays, by path from the webroot"
                    ],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "referenceFiles",
                    "static": true,
                    "visibility": "private",
                    "signature": "referenceFiles(string $engineDir): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string> the reference's files, each with the placeholder or loader the engine lays for it"
                    ],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "stale",
                    "static": true,
                    "visibility": "private",
                    "signature": "stale(string $path, string $want, array $earlier): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $earlier what an engine wrote there before"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "want",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "earlier",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "what an engine wrote there before"
                        }
                    ],
                    "line": 110,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "private",
                    "signature": "write(string $path, string $contents): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contents",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Unzip",
            "short": "Unzip",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/Unzip.php",
            "lines": 112,
            "doc": "An archive unpacked as unzip_file() unpacks it (probe unzip-file): into\nthe destination through the filesystem the site set up, every folder\nmade first (the destination and its missing parents included), resource-fork entries\n(__MACOSX/) and entries whose names climb out or are absolute left out;\nrefused when the disk cannot take twice the unpacked size and a little\nmore. pre_unzip_file may answer first, and unzip_file is handed the\nresult, each with the folders to make and the space needed. An archive\nthe reader cannot open is refused in the words of the library the\nreference falls back to.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(object $filesystem, Closure $filter, int $dirMode, int $fileMode)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, mixed...): mixed $filter applies a filter, as apply_filters does"
                ],
                "params": [
                    {
                        "name": "filesystem",
                        "type": "object",
                        "shape": "",
                        "default": null,
                        "doc": "the site's WP_Filesystem (mkdir, is_dir, put_contents)"
                    },
                    {
                        "name": "filter",
                        "type": "Closure",
                        "shape": "Closure(string, mixed...): mixed",
                        "default": null,
                        "doc": "applies a filter, as apply_filters does"
                    },
                    {
                        "name": "dirMode",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "fileMode",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "filesystem",
                    "type": "object",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "filter",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "dirMode",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "fileMode",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "valid",
                    "static": true,
                    "visibility": "public",
                    "signature": "valid(string $file): bool",
                    "doc": "Whether a file is a zip archive that opens and passes its consistency check (wp_zip_file_is_valid).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "into",
                    "static": false,
                    "visibility": "public",
                    "signature": "into(string $file, string $to): mixed",
                    "doc": "The archive's files under the destination: true, a refusal, or what pre_unzip_file answered instead.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "private",
                    "signature": "read(ZipArchive $archive): array",
                    "doc": "The entries to write, the folders they need (each archive folder and\nevery parent of a file), and their unpacked size.",
                    "shapes": [
                        "@return array{0: array<int, string>, 1: list<string>, 2: int} index => name, folders, bytes"
                    ],
                    "params": [
                        {
                            "name": "archive",
                            "type": "ZipArchive",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "safe",
                    "static": true,
                    "visibility": "private",
                    "signature": "safe(string $name): bool",
                    "doc": "Whether an entry's name stays inside the destination: no climbing segment, not absolute, no drive.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": false,
                    "visibility": "private",
                    "signature": "write(ZipArchive $archive, array $entries, string $to, array $needed): Minn\\Runtime\\Refusal|true",
                    "doc": "",
                    "shapes": [
                        "@param array<int, string> $entries @param list<string> $needed"
                    ],
                    "params": [
                        {
                            "name": "archive",
                            "type": "ZipArchive",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "entries",
                            "type": "array",
                            "shape": "array<int, string>",
                            "default": null,
                            "doc": "@param list<string> $needed"
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "needed",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 132
                }
            ]
        },
        {
            "name": "Minn\\Ops\\Updates",
            "short": "Updates",
            "namespace": "Minn\\Ops",
            "kind": "final class",
            "file": "public/minn/src/Minn/Ops/Updates.php",
            "lines": 456,
            "doc": "Update offers for the site's plugins and themes from the directory, asked\nthrough the Minn update service (Ops\\Directory), which answers with\nwordpress.org's own offers and serves their packages: the update-check\nendpoints asked with the installed headers (each plugin's Name, Version\nand Update URI, so a plugin that updates from elsewhere is never offered\nthe directory's plugin of the same folder name), the answer kept in the\nminn_updates option (JSON) for twelve hours, and the offers applied by\ndownloading the release archive through the one package unpacker. A\nplugin or theme the directory does not know keeps its folder untouched\nand is never offered anything. The per-item\nauto-update lists are the site's own auto_update_plugins and\nauto_update_themes options, in the shape the app already reads.\n\nThe directory is not the only source. A plugin that hosts itself answers\nfor its own version through the update transient's filter, which is where\nWordPress reads it too, so Runtime\\PluginUpdates asks the runtime the same\nquestion and its answer is merged in. Applying such an offer goes through\nthe publisher: a package outside the directory is unpacked only when\n`upgrader_pre_download` hands back a copy it verified.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Site",
                "Minn\\Http",
                "Minn\\Json",
                "Minn\\Ops\\AutoUpdates",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\UpgraderRun",
                "Minn\\RestError",
                "Minn\\Runtime\\PluginUpdates",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\FileHeaders",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Cli\\AssetUpdate",
                "Minn\\Cron\\Cron",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Content\\Inventory $inventory, Minn\\Ops\\Packages $packages, string $contentDir, Minn\\Http $http = \\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, )))",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "inventory",
                        "type": "Minn\\Content\\Inventory",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "packages",
                        "type": "Minn\\Ops\\Packages",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "http",
                        "type": "Minn\\Http",
                        "shape": "",
                        "default": "\\Minn\\Http::__set_state(array(    'within' =>    array (   ),    'fake' => NULL,    'refusal' => NULL, ))",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 46,
                "end": 53
            },
            "cases": [],
            "constants": [
                {
                    "name": "OPTION",
                    "value": "'minn_updates'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "TTL",
                    "value": "43200",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "state",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "inventory",
                    "type": "Minn\\Content\\Inventory",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "packages",
                    "type": "Minn\\Ops\\Packages",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "contentDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "http",
                    "type": "Minn\\Http",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forSite",
                    "static": true,
                    "visibility": "public",
                    "signature": "forSite(Minn\\Content\\Site $site, string $contentDir): self",
                    "doc": "The updater over a site's wp-content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "checkForWordPress",
                    "static": false,
                    "visibility": "public",
                    "signature": "checkForWordPress(string $transient, array $fresh): void",
                    "doc": "wp_update_plugins and wp_update_themes: the service asked when the\nstored answer is old (or a fresh one is wanted), and the offers left\nin the update transients when they are not there already.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "transient",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fresh",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "state",
                    "static": false,
                    "visibility": "public",
                    "signature": "state(): array",
                    "doc": "The stored answer, refreshed when older than the TTL or absent.",
                    "shapes": [],
                    "params": [],
                    "line": 97,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "refresh",
                    "static": false,
                    "visibility": "public",
                    "signature": "refresh(): array",
                    "doc": "Asks the directory now, whatever the cache says, and keeps the answer.",
                    "shapes": [],
                    "params": [],
                    "line": 116,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "check",
                    "static": false,
                    "visibility": "public",
                    "signature": "check(): array",
                    "doc": "Asks the directory now and stores the answer.",
                    "shapes": [],
                    "params": [],
                    "line": 122,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "publish",
                    "static": false,
                    "visibility": "public",
                    "signature": "publish(): void",
                    "doc": "The offers in WordPress's update transients, update_plugins and\nupdate_themes, in the shape wp_update_plugins and wp_update_themes\nleave there: where plugins, the facade's update helpers and the\nupgraders read them. Written after every check and after an update.",
                    "shapes": [],
                    "params": [],
                    "line": 179,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "pluginOffers",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginOffers(): array",
                    "doc": "Plugin file => offered version, only where the installed version is older. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 233,
                    "end": 244
                },
                {
                    "routes": [],
                    "name": "themeOffers",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeOffers(): array",
                    "doc": "Stylesheet => offered version. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 247,
                    "end": 258
                },
                {
                    "routes": [],
                    "name": "pluginMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginMeta(): array",
                    "doc": "Plugin file => slug, icon, directory URL, for every plugin the directory knows. @return array<string, array{slug: string, icon: string, url: string}>",
                    "shapes": [
                        "@return array<string, array{slug: string, icon: string, url: string}>"
                    ],
                    "params": [],
                    "line": 261,
                    "end": 279
                },
                {
                    "routes": [],
                    "name": "themeOnDirectory",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeOnDirectory(string $stylesheet): bool",
                    "doc": "Whether the directory knows this theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 282,
                    "end": 286
                },
                {
                    "routes": [],
                    "name": "updatePlugin",
                    "static": false,
                    "visibility": "public",
                    "signature": "updatePlugin(string $file): string",
                    "doc": "Applies the offer for one plugin file; returns the installed version afterwards.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 289,
                    "end": 300
                },
                {
                    "routes": [],
                    "name": "updateTheme",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateTheme(string $stylesheet): string",
                    "doc": "Updates one theme to its offer; the new version.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 303,
                    "end": 314
                },
                {
                    "routes": [],
                    "name": "auto",
                    "static": false,
                    "visibility": "public",
                    "signature": "auto(string $type): array",
                    "doc": "The auto-update list for plugins or themes, trimmed to what is installed. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 317,
                    "end": 321
                },
                {
                    "routes": [],
                    "name": "enableAuto",
                    "static": false,
                    "visibility": "public",
                    "signature": "enableAuto(string $type, string $asset): array",
                    "doc": "Turns auto-updates on or off for one plugin or theme.",
                    "shapes": [
                        "@return list<string> the list after the change"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "asset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 328,
                    "end": 331
                },
                {
                    "routes": [],
                    "name": "disableAuto",
                    "static": false,
                    "visibility": "public",
                    "signature": "disableAuto(string $type, string $asset): array",
                    "doc": "Takes one plugin or theme off the auto-update list; the list after.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "asset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 334,
                    "end": 337
                },
                {
                    "routes": [],
                    "name": "runAuto",
                    "static": false,
                    "visibility": "public",
                    "signature": "runAuto(Minn\\Ops\\AutoUpdates $gate): array",
                    "doc": "Applies every offer on the auto-update lists: what was updated, and\nwhat was refused with the reason, by plugin file or theme slug.",
                    "shapes": [
                        "@return array{done: list<string>, failed: array<string, string>}"
                    ],
                    "params": [
                        {
                            "name": "gate",
                            "type": "Minn\\Ops\\AutoUpdates",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 363,
                    "end": 386
                },
                {
                    "routes": [],
                    "name": "pluginVersions",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginVersions(): array",
                    "doc": "Plugin file => installed version. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 389,
                    "end": 396
                },
                {
                    "routes": [],
                    "name": "pluginNames",
                    "static": false,
                    "visibility": "public",
                    "signature": "pluginNames(): array",
                    "doc": "Plugin file => Plugin Name. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 414,
                    "end": 421
                },
                {
                    "routes": [],
                    "name": "themeHeaders",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeHeaders(): array",
                    "doc": "Stylesheet => style.css headers. @return array<string, array<string, string>>",
                    "shapes": [
                        "@return array<string, array<string, string>>"
                    ],
                    "params": [],
                    "line": 424,
                    "end": 438
                },
                {
                    "routes": [],
                    "name": "locales",
                    "static": false,
                    "visibility": "private",
                    "signature": "locales(string $filter): array",
                    "doc": "The locales a check asks about, as the reference asks: the languages\ninstalled (their .mo files, through get_available_languages), then\nthe check's own filter (plugins_update_check_locales,\nthemes_update_check_locales); none for an English-only site.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "filter",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "supplied",
                    "static": false,
                    "visibility": "private",
                    "signature": "supplied(array $stored): array",
                    "doc": "What the site's own plugins offer for themselves. A check that runs\nwithout a booted runtime (a cron trigger that loads no plugins) asks\nnobody, so the last answer rides across rather than the offer\nvanishing until the next request.",
                    "shapes": [
                        "@param array<string, mixed> $stored the previous state",
                        "@return array{plugins: array<string, array<string, mixed>>, no_update: array<string, array<string, mixed>>}"
                    ],
                    "params": [
                        {
                            "name": "stored",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the previous state"
                        }
                    ],
                    "line": 211,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "saveAuto",
                    "static": false,
                    "visibility": "private",
                    "signature": "saveAuto(string $type, string $asset, array $list): array",
                    "doc": "Stores an auto-update list, kept to assets that exist; the asset being\nchanged must be one of them.",
                    "shapes": [
                        "@param list<string> $list",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "asset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "list",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 346,
                    "end": 355
                },
                {
                    "routes": [],
                    "name": "pluginHeaders",
                    "static": false,
                    "visibility": "private",
                    "signature": "pluginHeaders(): array",
                    "doc": "Plugin file => the headers the update check sends, in WordPress's keys.",
                    "shapes": [
                        "@return array<string, array{Name: string, Version: string, UpdateURI: string}>"
                    ],
                    "params": [],
                    "line": 403,
                    "end": 411
                },
                {
                    "routes": [],
                    "name": "apply",
                    "static": false,
                    "visibility": "private",
                    "signature": "apply(string $kind, string $item, string $package): void",
                    "doc": "Applies one offer through the upgrader (UpgraderRun): the update\ntransients carry the offers first, as they do on WordPress when an\nupdate starts. The archive's SHA-256 is kept under \"archives\" in the\nstate when the package came from the update service, so an audit can\nask what code arrived.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "item",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "package",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 447,
                    "end": 460
                },
                {
                    "routes": [],
                    "name": "consume",
                    "static": false,
                    "visibility": "private",
                    "signature": "consume(string $from, string $to, string $key): void",
                    "doc": "An applied offer moves to the current bucket so the next read agrees\nwith the folder, and the offers left go back into the update\ntransients the upgrader cleared, as Minn Admin puts them back on\nWordPress.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 468,
                    "end": 478
                },
                {
                    "routes": [],
                    "name": "map",
                    "static": true,
                    "visibility": "private",
                    "signature": "map(mixed $bucket): array",
                    "doc": "The directory answers an empty bucket as a list; a map either way.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bucket",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 481,
                    "end": 487
                },
                {
                    "routes": [],
                    "name": "safeUrl",
                    "static": true,
                    "visibility": "private",
                    "signature": "safeUrl(string $url): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 489,
                    "end": 492
                }
            ]
        },
        {
            "name": "Minn\\Ops\\UpgraderRun",
            "short": "UpgraderRun",
            "namespace": "Minn\\Ops",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Ops/UpgraderRun.php",
            "lines": 113,
            "doc": "The engine's own installs and updates, run through the reference's\nupgraders (Plugin_Upgrader, Theme_Upgrader) so plugins hear every hook a\nWordPress install or update tells them: the REST plugin route, Minn\nAdmin's install, upload and update routes, the CLI verbs and the\nautomatic updates all come here. The Minn update service's packages are\nfetched over the engine's own client (Packages::fetch: https, the\nservice's host, a size cap) and handed to the upgrader as a file through\nupgrader_pre_download, so where Minn gets code is never the\nplugin-filterable HTTP API's to change. A package from anywhere else is\ninstalled only when its publisher answered upgrader_pre_download with a\ncopy it checked (or refused it): nobody's word, no install. A package\nfrom the service passes Archive's checks before the upgrader unpacks it;\na local file (an upload, checked by Packages) is the upgrader's to read. The upgrader's refusals come back\nas the engine's REST errors, in the words its routes already use.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Ops\\Archive",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\Packages",
                "Minn\\RestError",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Updates"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Ops\\Packages $packages)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "packages",
                        "type": "Minn\\Ops\\Packages",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "packages",
                    "type": "Minn\\Ops\\Packages",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(string $kind, string $package, array $args = array ( )): array",
                    "doc": "Installs a package (or, with overwrite_package, replaces the folder it\nlands on): its folder and the sha256 of a package fetched from the\nservice, '' otherwise.",
                    "shapes": [
                        "@param array<string, mixed> $args the upgrader's install arguments",
                        "@return array{folder: string, sha256: string}"
                    ],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "package",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": "array ( )",
                            "doc": "the upgrader's install arguments"
                        }
                    ],
                    "line": 40,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(string $kind, string $item, string $package): string",
                    "doc": "Applies the offer the update transient holds for one plugin (file) or\ntheme (folder), as Minn Admin does on WordPress: a plugin through\nbulk_upgrade, a theme through upgrade. The sha256 of the package, ''\nwhen it did not come from the service.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "item",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "package",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "guarded",
                    "static": false,
                    "visibility": "private",
                    "signature": "guarded(string $package, string $sha256, Closure $call): mixed",
                    "doc": "Runs $call with the engine's say over the download: the service's\npackage fetched here, any other remote one only on its publisher's\nanswer. $sha256 is set when the service's package was fetched.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "package",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sha256",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "call",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": false,
                    "visibility": "private",
                    "signature": "refusal(string $kind, WP_Ajax_Upgrader_Skin $skin, mixed $answer, WP_Upgrader $upgrader): Minn\\RestError",
                    "doc": "The upgrader's refusal in the engine's words: a taken folder says what is there and what came.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skin",
                            "type": "WP_Ajax_Upgrader_Skin",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "answer",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "taken",
                    "static": false,
                    "visibility": "private",
                    "signature": "taken(string $kind, string $destination, WP_Upgrader $upgrader): Minn\\RestError",
                    "doc": "The refusal for a folder already taken, naming what is there and what the package holds.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "destination",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 137
                }
            ]
        },
        {
            "name": "Minn\\Query\\AuthorPostsSql",
            "short": "AuthorPostsSql",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/AuthorPostsSql.php",
            "lines": 30,
            "doc": "get_posts_by_author_sql as the reference writes it: for each type, its\npublished posts, and its private ones the reader may see (all of them\nwith the cap to read others', their own otherwise), OR'd; an author\nnarrows it; WHERE in front when asked.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "sql",
                    "static": true,
                    "visibility": "public",
                    "signature": "sql(array $types, int $reader, string $full, ?int $author, string $publicOnly): string",
                    "doc": "The clause for the posts an author's lists count, as the reader may see them.",
                    "shapes": [
                        "@param list<array{type: string, readPrivate: bool}> $types each type that exists, and whether the reader may read its private posts"
                    ],
                    "params": [
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<array{type: string, readPrivate: bool}>",
                            "default": null,
                            "doc": "each type that exists, and whether the reader may read its private posts"
                        },
                        {
                            "name": "reader",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": "the signed-in reader's id, 0 when signed out"
                        },
                        {
                            "name": "full",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "publicOnly",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 41
                }
            ]
        },
        {
            "name": "Minn\\Query\\CommentOrder",
            "short": "CommentOrder",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/CommentOrder.php",
            "lines": 100,
            "doc": "WP_Comment_Query's ORDER BY and LIMIT as the reference writes them\n(probe wp-comment-query-sql): no orderby means comment_date_gmt in the\norder asked; a list, a string of keys or a map of keys to directions\neach become a column, a meta value or the FIELD() list comment__in\ngives; a key it does not know is dropped (none left means\ncomment_date_gmt), and unless comment_ID or comment__in is among them a\ncomment_ID tiebreak follows, in the first date clause's direction or\nDESC.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Runtime\\CommentQueryRunner"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "COLUMNS",
                    "value": "array (   0 => 'comment_agent',   1 => 'comment_approved',   2 => 'comment_author',   3 => 'comment_author_email',   4 => 'comment_author_IP',   5 => 'comment_author_url',   6 => 'comment_content',   7 => 'comment_date',   8 => 'comment_date_gmt',   9 => 'comment_ID',   10 => 'comment_karma',   11 => 'comment_parent',   12 => 'comment_post_ID',   13 => 'comment_type',   14 => 'user_id', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "IDS",
                    "value": "'comment__in'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "direction",
                    "static": true,
                    "visibility": "public",
                    "signature": "direction(mixed $order): string",
                    "doc": "ASC when asked for, DESC for anything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "order",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": true,
                    "visibility": "public",
                    "signature": "build(array $qv, string $table, string $metaTable, array $metaClauses): string",
                    "doc": "The ORDER BY body for the query's orderby and order ('' for none).",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@param array<array-key, array<string, mixed>> $metaClauses the meta query's clauses, by name"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaTable",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaClauses",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": "the meta query's clauses, by name"
                        }
                    ],
                    "line": 36,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "clause",
                    "static": true,
                    "visibility": "public",
                    "signature": "clause(string $by, array $qv, string $table, string $metaTable, array $metaClauses): string",
                    "doc": "One orderby key as SQL, or '' when the reference does not take it: a\ncolumn, the meta value (as a number when asked), a named meta\nclause's cast value, or the FIELD() list keeping comment__in's order.",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@param array<array-key, array<string, mixed>> $metaClauses"
                    ],
                    "params": [
                        {
                            "name": "by",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaTable",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaClauses",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "limits",
                    "static": true,
                    "visibility": "public",
                    "signature": "limits(array $qv): string",
                    "doc": "LIMIT from number, and the offset (or the page when no offset is given). @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "field",
                    "static": true,
                    "visibility": "private",
                    "signature": "field(mixed $given, string $table): string",
                    "doc": "The comment__in ids in the order given, or '' when none are.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "given",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "tiebreak",
                    "static": true,
                    "visibility": "private",
                    "signature": "tiebreak(array $parts): string",
                    "doc": "The tiebreak's direction: the first date clause's, else DESC. @param list<string> $parts",
                    "shapes": [
                        "@param list<string> $parts"
                    ],
                    "params": [
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 117
                }
            ]
        },
        {
            "name": "Minn\\Query\\DateSql",
            "short": "DateSql",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/DateSql.php",
            "lines": 303,
            "doc": "The WHERE fragment of a date query in the reference's shape: before and\nafter bounds as full datetimes (inclusive bounds close the day), the\ndate parts as MySQL functions compared or listed, groups joined by\ntheir relation, columns validated against the known date columns.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Query\\Sql"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(array $tables, string $defaultColumn = 'post_date', int $startOfWeek = 1)",
                "doc": "",
                "shapes": [
                    "@param array<string, string> $tables table key to prefixed table name"
                ],
                "params": [
                    {
                        "name": "tables",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": "table key to prefixed table name"
                    },
                    {
                        "name": "defaultColumn",
                        "type": "string",
                        "shape": "",
                        "default": "'post_date'",
                        "doc": ""
                    },
                    {
                        "name": "startOfWeek",
                        "type": "int",
                        "shape": "",
                        "default": "1",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 35,
                "end": 37
            },
            "cases": [],
            "constants": [
                {
                    "name": "COLUMNS",
                    "value": "array (   'posts' =>    array (     0 => 'post_date',     1 => 'post_date_gmt',     2 => 'post_modified',     3 => 'post_modified_gmt',   ),   'comments' =>    array (     0 => 'comment_date',     1 => 'comment_date_gmt',   ),   'users' =>    array (     0 => 'user_registered',   ),   'blogs' =>    array (     0 => 'registered',     1 => 'last_updated',   ), )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "PART_ORDER",
                    "value": "array (   0 => 'year',   1 => 'month',   2 => 'monthnum',   3 => 'week',   4 => 'w',   5 => 'dayofyear',   6 => 'day',   7 => 'dayofweek',   8 => 'dayofweek_iso',   9 => 'hour',   10 => 'minute',   11 => 'second', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "RANGES",
                    "value": "array (   'dayofyear' =>    array (     0 => 1,     1 => 366,   ),   'dayofweek' =>    array (     0 => 1,     1 => 7,   ),   'dayofweek_iso' =>    array (     0 => 1,     1 => 7,   ),   'month' =>    array (     0 => 1,     1 => 12,   ),   'week' =>    array (     0 => 1,     1 => 53,   ),   'day' =>    array (     0 => 1,     1 => 31,   ),   'hour' =>    array (     0 => 0,     1 => 23,   ),   'minute' =>    array (     0 => 0,     1 => 59,   ),   'second' =>    array (     0 => 0,     1 => 59,   ), )",
                    "doc": "The ranges a date part is checked against, in the order the reference reports them (week's top depends on the year).",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "validColumns",
                    "type": "?Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "tables",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "defaultColumn",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "startOfWeek",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "week",
                    "static": true,
                    "visibility": "public",
                    "signature": "week(string $column, int $startOfWeek): string",
                    "doc": "The week of a column as the reference counts it from the site's first day of the week.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "startOfWeek",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "validate",
                    "static": true,
                    "visibility": "public",
                    "signature": "validate(array $clause): bool",
                    "doc": "Whether a clause's date values are valid, with a notice for each part\nout of range (week up to the given year's ISO weeks, 53 without one)\nand for a month and day that make no date (in a leap year when no year\nis given, and only once every part is in range); before and after given\nas parts are checked too (probes\nquery-clauses, query-clause-internals). An empty clause is not valid.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": false,
                    "visibility": "public",
                    "signature": "sanitize(array $queries, array $defaults): array",
                    "doc": "Sanitises to the reference's shape: every level carries column, compare and relation.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "defaults",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "isFirstOrder",
                    "static": true,
                    "visibility": "public",
                    "signature": "isFirstOrder(array $query): bool",
                    "doc": "Whether a date query is one clause rather than a group of them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "validateColumn",
                    "static": false,
                    "visibility": "public",
                    "signature": "validateColumn(string $column): string",
                    "doc": "A column name as \"table.column\", the default for anything unknown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "checkColumnsWith",
                    "static": false,
                    "visibility": "public",
                    "signature": "checkColumnsWith(Closure $validColumns): self",
                    "doc": "Has the valid columns pass through a filter (WP_Date_Query hands it date_query_valid_columns).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "validColumns",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": false,
                    "visibility": "public",
                    "signature": "build(array $queries): string",
                    "doc": "The WHERE fragment for a date query.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "forQuery",
                    "static": false,
                    "visibility": "public",
                    "signature": "forQuery(array $queries, int $depth): array",
                    "doc": "A query or group as the reference's get_sql_for_query returns it, indented for its depth. @return array{join: string, where: string}",
                    "shapes": [
                        "@return array{join: string, where: string}"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 174
                },
                {
                    "routes": [],
                    "name": "clauseParts",
                    "static": false,
                    "visibility": "public",
                    "signature": "clauseParts(array $clause): array",
                    "doc": "One clause's pieces, before they are joined: the bounds, the date parts\nin order (a part whose value builds to nothing, or to 0, is left out),\nthen the time.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 183,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "buildValue",
                    "static": true,
                    "visibility": "public",
                    "signature": "buildValue(string $compare, mixed $value): string|int|false",
                    "doc": "A value as the comparison wants it (build_value): a list of numbers\nfor IN, exactly two for BETWEEN, one number otherwise; false when the\nvalue does not fit.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "compare",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 220
                },
                {
                    "routes": [],
                    "name": "buildTime",
                    "static": true,
                    "visibility": "public",
                    "signature": "buildTime(string $column, string $compare, mixed $hour, mixed $minute, mixed $second): string|false",
                    "doc": "The time of day (build_time_query): listed or ranged parts each on\ntheir own; a single part by its function; an hour with a second and no\nminute not at all; otherwise the parts as one decimal, DATE_FORMAT( col,\n'%H.%i%s' ). False when no part is given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "compare",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hour",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "minute",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "second",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 228,
                    "end": 251
                },
                {
                    "routes": [],
                    "name": "datetime",
                    "static": true,
                    "visibility": "public",
                    "signature": "datetime(mixed $value, bool $endOfUnit): string",
                    "doc": "A full datetime from a string or a parts array. A string as precise as\na year, a month, a day or a minute is read as those parts, so an end\nbound reaches the end of its unit; any other string is read as a time\nin the site's zone. Missing parts start (or end) the unit.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "endOfUnit",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 288,
                    "end": 310
                },
                {
                    "routes": [],
                    "name": "compare",
                    "static": true,
                    "visibility": "public",
                    "signature": "compare(string $compare): string",
                    "doc": "A comparison upper-cased, = for anything the reference does not know.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "compare",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 313,
                    "end": 317
                },
                {
                    "routes": [],
                    "name": "validDate",
                    "static": true,
                    "visibility": "private",
                    "signature": "validDate(array $clause): bool",
                    "doc": "Whether a clause's month and day make a date, in its year or a leap year; a notice names them when they do not.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "partExpressions",
                    "static": false,
                    "visibility": "private",
                    "signature": "partExpressions(string $column, array $clause): array",
                    "doc": "The date parts a clause gives, each as its SQL expression; monthnum and w stand in for month and week only when those are not given. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 254,
                    "end": 260
                },
                {
                    "routes": [],
                    "name": "group",
                    "static": false,
                    "visibility": "private",
                    "signature": "group(array $queries, int $depth): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 273
                },
                {
                    "routes": [],
                    "name": "clause",
                    "static": false,
                    "visibility": "private",
                    "signature": "clause(array $clause): string",
                    "doc": "One clause as the reference writes it: its pieces, more than one joined by AND inside parentheses.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 276,
                    "end": 280
                }
            ]
        },
        {
            "name": "Minn\\Query\\MetaSql",
            "short": "MetaSql",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/MetaSql.php",
            "lines": 291,
            "doc": "The JOIN and WHERE fragments of a meta query in the reference's shape:\none meta-table join per clause (the first under the table's own name,\nthen mt1, mt2, ...), INNER joins unless an OR relation or a NOT EXISTS\nclause needs LEFT ones, and casts by the clause's declared type. Under\nan OR relation a clause shares an equality-shaped sibling's join.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Query\\Sql"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $metaTable, string $objectColumn, string $primaryTable, string $primaryId)",
                "doc": "",
                "shapes": [
                    "@param array<string, array{0: string, 1: string}> $tables meta type to [table, object column]"
                ],
                "params": [
                    {
                        "name": "metaTable",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "objectColumn",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "primaryTable",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "primaryId",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 32,
                "end": 38
            },
            "cases": [],
            "constants": [
                {
                    "name": "COMPATIBLE",
                    "value": "array (   0 => '=',   1 => 'IN',   2 => 'BETWEEN',   3 => 'LIKE',   4 => 'REGEXP',   5 => 'RLIKE',   6 => '>',   7 => '>=',   8 => '<',   9 => '<=', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "OPERATORS",
                    "value": "array (   0 => '=',   1 => '!=',   2 => '>',   3 => '>=',   4 => '<',   5 => '<=',   6 => 'LIKE',   7 => 'NOT LIKE',   8 => 'IN',   9 => 'NOT IN',   10 => 'BETWEEN',   11 => 'NOT BETWEEN',   12 => 'EXISTS',   13 => 'NOT EXISTS',   14 => 'REGEXP',   15 => 'NOT REGEXP',   16 => 'RLIKE', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "clauses",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "aliasCount",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "aliasFilter",
                    "type": "?Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "metaTable",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "objectColumn",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "primaryTable",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "primaryId",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(array $queries): array",
                    "doc": "Normalises a raw meta_query: clauses get key/value/compare/type\ndefaults, a nested group its relation, and a \"relation\" key sits on\nevery level. Named clauses keep their names.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "isFirstOrder",
                    "static": true,
                    "visibility": "public",
                    "signature": "isFirstOrder(array $query): bool",
                    "doc": "A clause rather than a group: it names a key or a value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": false,
                    "visibility": "public",
                    "signature": "build(array $queries): array",
                    "doc": "The JOIN and WHERE fragments for a meta query.",
                    "shapes": [
                        "@return array{join: string, where: string}"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "sqlClauses",
                    "static": false,
                    "visibility": "public",
                    "signature": "sqlClauses(array $queries): array",
                    "doc": "The whole query's JOIN and WHERE (get_sql_clauses), each clause given its alias in place. @return array{join: string, where: string}",
                    "shapes": [
                        "@return array{join: string, where: string}"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "querySql",
                    "static": false,
                    "visibility": "public",
                    "signature": "querySql(array $queries, int $depth): array",
                    "doc": "A group's JOIN and WHERE (get_sql_for_query), indented for its depth;\neach clause is given its alias in place, so its siblings can share it.",
                    "shapes": [
                        "@return array{join: string, where: string}"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "clauseSql",
                    "static": false,
                    "visibility": "public",
                    "signature": "clauseSql(array $clause, array $parent, string $key): array",
                    "doc": "One clause's JOIN and WHERE pieces (get_sql_for_clause): the clause is\nsettled in place (compare, compare_key, then its alias and cast), its\nalias shared with a compatible sibling or a new join.",
                    "shapes": [
                        "@return array{where: list<string>, join: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "filterAliasesWith",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterAliasesWith(Closure $filter): self",
                    "doc": "Has every clause's shared alias (or false) pass through a filter (WP_Meta_Query hands it meta_query_find_compatible_table_alias).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filter",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "compatibleAlias",
                    "static": false,
                    "visibility": "public",
                    "signature": "compatibleAlias(array $clause, array $parent): string|false",
                    "doc": "The alias of a sibling the clause can share (find_compatible_table_alias):\nunder OR, the first sibling already given an alias whose comparison,\nlike the clause's, reads the same join; false otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 175,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "clauses",
                    "static": false,
                    "visibility": "public",
                    "signature": "clauses(): array",
                    "doc": "The clauses the last build resolved, by name.",
                    "shapes": [
                        "@return array<string, array{alias: string, cast: string}> clauses seen while building, by name or alias"
                    ],
                    "params": [],
                    "line": 193,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "hasOr",
                    "static": true,
                    "visibility": "public",
                    "signature": "hasOr(array $queries): bool",
                    "doc": "Whether any level of the query relates two or more clauses by OR.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "cast",
                    "static": true,
                    "visibility": "public",
                    "signature": "cast(string $type): string",
                    "doc": "The CAST target for a clause type; CHAR means no cast.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 294,
                    "end": 305
                },
                {
                    "routes": [],
                    "name": "normalized",
                    "static": true,
                    "visibility": "private",
                    "signature": "normalized(array $clause): array",
                    "doc": "A clause with its compare and compare_key settled: upper case, IN for a list, = for anything unknown. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "hasOrWithNotExists",
                    "static": true,
                    "visibility": "private",
                    "signature": "hasOrWithNotExists(array $queries): bool",
                    "doc": "An OR group holding a NOT EXISTS clause makes every join a LEFT one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 199,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "clause",
                    "static": false,
                    "visibility": "private",
                    "signature": "clause(array $clause): string",
                    "doc": "A settled clause's WHERE piece, read from its alias.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 248
                },
                {
                    "routes": [],
                    "name": "keyClause",
                    "static": false,
                    "visibility": "private",
                    "signature": "keyClause(string $alias, array $clause): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "alias",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 250,
                    "end": 260
                },
                {
                    "routes": [],
                    "name": "valueClause",
                    "static": true,
                    "visibility": "private",
                    "signature": "valueClause(string $compare, mixed $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "compare",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 271
                },
                {
                    "routes": [],
                    "name": "values",
                    "static": true,
                    "visibility": "private",
                    "signature": "values(mixed $value): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string> a list, or a comma-separated string split"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 274,
                    "end": 280
                },
                {
                    "routes": [],
                    "name": "newAlias",
                    "static": false,
                    "visibility": "private",
                    "signature": "newAlias(array $clause): array",
                    "doc": "A new alias for a clause, and the join that reads it: LEFT for NOT EXISTS (with the key), INNER otherwise. @return array{0: string, 1: list<string>}",
                    "shapes": [
                        "@return array{0: string, 1: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 283,
                    "end": 291
                }
            ]
        },
        {
            "name": "Minn\\Query\\MimeWhere",
            "short": "MimeWhere",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/MimeWhere.php",
            "lines": 36,
            "doc": "wp_post_mime_type_where as the reference writes it (probe wp-query-sql):\neach mime type (a list or a comma-separated string) cleaned to a pattern,\na bare group or a star widened with % into a LIKE, an exact type an\nequality, all OR'd; an empty type or a lone wildcard means no clause.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "WILDCARDS",
                    "value": "array (   0 => '',   1 => '%',   2 => '%/%', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "sql",
                    "static": true,
                    "visibility": "public",
                    "signature": "sql(array|string $types, string $alias = ''): string",
                    "doc": "The clause for some mime types, against a table's column when one is named. @param string|list<string> $types",
                    "shapes": [
                        "@param string|list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "types",
                            "type": "array|string",
                            "shape": "string|list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "alias",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "pattern",
                    "static": true,
                    "visibility": "private",
                    "signature": "pattern(string $type): string",
                    "doc": "A type cleaned to group/subgroup (an empty subgroup a star), or a bare group widened to group/*.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Query\\NetworkSql",
            "short": "NetworkSql",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/NetworkSql.php",
            "lines": 257,
            "doc": "The SQL WP_Site_Query and WP_Network_Query build from their variables\n(probe multisite-classes). A site query names only blog_id through its\ntable (blogs); every other column stands bare. A network query names each\ncolumn through its table (site). On one site both tables are unnamed, so\nthe column is written after a bare dot, as the reference writes it.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(object $wpdb)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "wpdb",
                        "type": "object",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 24
            },
            "cases": [],
            "constants": [
                {
                    "name": "SITE_ORDER",
                    "value": "array (   'domain' => 'domain',   'last_updated' => 'last_updated',   'path' => 'path',   'registered' => 'registered',   'deleted' => 'deleted',   'spam' => 'spam',   'mature' => 'mature',   'archived' => 'archived',   'public' => 'public',   'network_id' => 'site_id',   'domain_length' => 'CHAR_LENGTH(domain)',   'path_length' => 'CHAR_LENGTH(path)', )",
                    "doc": "The columns a site query orders by, as each is written; blog_id is the table's own.",
                    "visibility": "private"
                },
                {
                    "name": "SITE_FLAGS",
                    "value": "array (   'archived' => '%s',   'mature' => '%d',   'spam' => '%d',   'deleted' => '%d',   'public' => '%d',   'lang_id' => '%d', )",
                    "doc": "The site flags as they are compared: archived as text, the rest as numbers, each followed by a space.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "wpdb",
                    "type": "object",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "siteWhere",
                    "static": false,
                    "visibility": "public",
                    "signature": "siteWhere(array $qv, ?Closure $columns = NULL): array",
                    "doc": "A site query's conditions, in the reference's order: the ids, the\nnetworks, domains, paths, the flags, the languages, then the search\n(across the columns asked for, as $columns lets plugins change them).",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@param (\\Closure(list<string>): list<string>)|null $columns",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "?Closure",
                            "shape": "(\\Closure(list<string>): list<string>)|null",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "networkWhere",
                    "static": false,
                    "visibility": "public",
                    "signature": "networkWhere(array $qv): array",
                    "doc": "A network query's conditions: the ids, domains, paths, then the search.",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "siteSearch",
                    "static": false,
                    "visibility": "public",
                    "signature": "siteSearch(string $search, array $columns): string",
                    "doc": "A site query's search across columns, each a LIKE on the term\nanywhere, its stars wildcards.",
                    "shapes": [
                        "@param list<string> $columns"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "networkSearch",
                    "static": false,
                    "visibility": "public",
                    "signature": "networkSearch(string $search, array $columns): string",
                    "doc": "A network query's search: the same LIKEs, its stars kept.",
                    "shapes": [
                        "@param list<string> $columns"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "siteOrderby",
                    "static": false,
                    "visibility": "public",
                    "signature": "siteOrderby(array $qv): string",
                    "doc": "A site query's ORDER BY, or '' (an unknown column is passed over). @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "siteOrderColumn",
                    "static": false,
                    "visibility": "public",
                    "signature": "siteOrderColumn(string $by, array $qv): ?string",
                    "doc": "One column a site query orders by, as written; null for one it does not. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "by",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "networkOrderby",
                    "static": false,
                    "visibility": "public",
                    "signature": "networkOrderby(array $qv): string",
                    "doc": "A network query's ORDER BY, or ''. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "networkOrderColumn",
                    "static": false,
                    "visibility": "public",
                    "signature": "networkOrderColumn(string $by, array $qv): ?string",
                    "doc": "One column a network query orders by, as written; null for one it does not. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "by",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "direction",
                    "static": true,
                    "visibility": "public",
                    "signature": "direction(mixed $order): string",
                    "doc": "ASC when asked for, in any case; anything else is DESC.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "order",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "limits",
                    "static": true,
                    "visibility": "public",
                    "signature": "limits(array $qv): string",
                    "doc": "The LIMIT for a number and an offset; none without a number. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 167
                },
                {
                    "routes": [],
                    "name": "pieces",
                    "static": true,
                    "visibility": "public",
                    "signature": "pieces(array $clauses, string $table, string $found): array",
                    "doc": "The request from its clauses, joined as the reference joins them.",
                    "shapes": [
                        "@param array<string, string> $clauses fields, join, where, orderby, limits, groupby",
                        "@return array<string, string> the pieces kept on the query"
                    ],
                    "params": [
                        {
                            "name": "clauses",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "fields, join, where, orderby, limits, groupby"
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "found",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 175,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": false,
                    "visibility": "public",
                    "signature": "ids(string $request): array",
                    "doc": "The ids a request finds. @return list<int>",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 188,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "count",
                    "static": false,
                    "visibility": "public",
                    "signature": "count(string $request): int",
                    "doc": "The count a counting request reads.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "rowById",
                    "static": false,
                    "visibility": "public",
                    "signature": "rowById(string $table, string $column, int $id): ?object",
                    "doc": "A table's row by its id, or null when there is none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 200,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "found",
                    "static": false,
                    "visibility": "public",
                    "signature": "found(string $sql): int",
                    "doc": "The rows a counted request found.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "likeAny",
                    "static": false,
                    "visibility": "private",
                    "signature": "likeAny(string $term, array $columns): string",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $columns"
                    ],
                    "params": [
                        {
                            "name": "term",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "orderby",
                    "static": true,
                    "visibility": "private",
                    "signature": "orderby(array $qv, Closure $column, string $default): string",
                    "doc": "",
                    "shapes": [
                        "@param \\Closure(string): ?string $column @param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "column",
                            "type": "Closure",
                            "shape": "\\Closure(string): ?string",
                            "default": null,
                            "doc": "@param array<string, mixed> $qv"
                        },
                        {
                            "name": "default",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 213,
                    "end": 233
                },
                {
                    "routes": [],
                    "name": "field",
                    "static": false,
                    "visibility": "private",
                    "signature": "field(string $column, mixed $ids): string",
                    "doc": "FIELD() over a list of ids, in the order given. @param mixed $ids",
                    "shapes": [],
                    "params": [
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ids",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 236,
                    "end": 239
                },
                {
                    "routes": [],
                    "name": "ints",
                    "static": false,
                    "visibility": "private",
                    "signature": "ints(string $column, mixed $in, mixed $notIn): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "in",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "notIn",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 242,
                    "end": 251
                },
                {
                    "routes": [],
                    "name": "strings",
                    "static": false,
                    "visibility": "private",
                    "signature": "strings(string $column, mixed $in, mixed $notIn): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "column",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "in",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "notIn",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 254,
                    "end": 263
                },
                {
                    "routes": [],
                    "name": "list",
                    "static": true,
                    "visibility": "private",
                    "signature": "list(mixed $value): array",
                    "doc": "A list given as an array or a comma-separated string. @return list<mixed>",
                    "shapes": [
                        "@return list<mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 266,
                    "end": 269
                }
            ]
        },
        {
            "name": "Minn\\Query\\PostOrder",
            "short": "PostOrder",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/PostOrder.php",
            "lines": 122,
            "doc": "WP_Query's ORDER BY as the reference writes it (probe wp-query-sql): the\nkeys it takes, what each key becomes (a column, a meta value, a FIELD()\nlist, a seeded RAND()), and how a list or a map of keys joins with its\ndirections. A key it does not know is dropped; none left means post_date.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\PostQuery"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   0 => 'name',   1 => 'author',   2 => 'date',   3 => 'title',   4 => 'modified',   5 => 'parent',   6 => 'type', )",
                    "doc": "The post fields an orderby may name, bare or with their column's post_ prefix.",
                    "visibility": "private"
                },
                {
                    "name": "OTHERS",
                    "value": "array (   0 => 'ID',   1 => 'menu_order',   2 => 'comment_count',   3 => 'rand',   4 => 'post__in',   5 => 'post_parent__in',   6 => 'post_name__in', )",
                    "doc": "The other names an orderby may use.",
                    "visibility": "private"
                },
                {
                    "name": "COLUMNS",
                    "value": "array (   0 => 'post_name',   1 => 'post_author',   2 => 'post_date',   3 => 'post_title',   4 => 'post_modified',   5 => 'post_parent',   6 => 'post_type',   7 => 'ID',   8 => 'menu_order',   9 => 'comment_count', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "IN_GIVEN_ORDER",
                    "value": "array (   0 => 'post__in',   1 => 'post_name__in',   2 => 'post_parent__in', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "direction",
                    "static": true,
                    "visibility": "public",
                    "signature": "direction(mixed $order): string",
                    "doc": "ASC when asked for, DESC for anything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "order",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": true,
                    "visibility": "public",
                    "signature": "build(array $q, string $table, array $metaClauses): string",
                    "doc": "The ORDER BY body for the query's orderby and order, settling both in\n$q as the reference leaves them (a random or a given-order sort has no\ndirection; a string orderby is url-decoded and slashed).",
                    "shapes": [
                        "@param array<string, mixed> $q",
                        "@param array<array-key, array<string, mixed>> $metaClauses the meta query's clauses, by name"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaClauses",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": "the meta query's clauses, by name"
                        }
                    ],
                    "line": 40,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "clause",
                    "static": true,
                    "visibility": "public",
                    "signature": "clause(string $orderby, string $table, array $metaClauses, array $q): string|false",
                    "doc": "One orderby key as SQL, or false when the reference does not take it:\na column, RAND() (seeded when asked), the primary meta clause's value\n(cast when it has a type), a named meta clause's cast value, or the\nFIELD() list that keeps post__in, post_name__in or post_parent__in in\nthe order given.",
                    "shapes": [
                        "@param array<array-key, array<string, mixed>> $metaClauses",
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "orderby",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaClauses",
                            "type": "array",
                            "shape": "array<array-key, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "map",
                    "static": true,
                    "visibility": "private",
                    "signature": "map(array $orderby, string $table, array $metaClauses, array $q): string",
                    "doc": "",
                    "shapes": [
                        "@param array<array-key, mixed> $orderby key => direction @param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "orderby",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": "key => direction @param array<string, mixed> $q"
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaClauses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "field",
                    "static": true,
                    "visibility": "private",
                    "signature": "field(string $orderby, string $table, array $q): string",
                    "doc": "A FIELD() list in the order the variable gives, or '' when it gives none. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "orderby",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 121,
                    "end": 133
                }
            ]
        },
        {
            "name": "Minn\\Query\\PostSearch",
            "short": "PostSearch",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/PostSearch.php",
            "lines": 118,
            "doc": "WP_Query's search as the reference writes it (probe wp-query-sql): the\nsearch string split into terms (quoted phrases kept whole, single letters\nand stopwords dropped, ten or more terms or none left searched as one\nsentence), each term a group of LIKEs over the searched columns (NOT LIKE\nand AND for an excluded term), the password clause for a visitor, and the\nrelevance order: a CASE ladder for several terms, the title match first\nfor one.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Query\\Sql"
            ],
            "usedBy": [
                "Minn\\Runtime\\PostQuery"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "COLUMNS",
                    "value": "array (   0 => 'post_title',   1 => 'post_excerpt',   2 => 'post_content', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "STOPWORDS",
                    "value": "'about,an,are,as,at,be,by,com,for,from,how,in,is,it,of,on,or,that,the,this,to,was,what,when,where,who,will,with,www'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "TERM",
                    "value": "'/\".*?(\"|$)|((?<=[\\\\t \",+])|^)[^\\\\t \",+]+/'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "terms",
                    "static": true,
                    "visibility": "public",
                    "signature": "terms(string $search, callable $stopwords): array",
                    "doc": "The terms a search string becomes and how many it was split into.",
                    "shapes": [
                        "@param callable(): list<string> $stopwords asked only when the string splits",
                        "@return array{terms: list<string>, count: int}"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stopwords",
                            "type": "callable",
                            "shape": "callable(): list<string>",
                            "default": null,
                            "doc": "asked only when the string splits"
                        }
                    ],
                    "line": 28,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "checked",
                    "static": true,
                    "visibility": "public",
                    "signature": "checked(array $terms, array $stopwords): array",
                    "doc": "The terms worth searching: quotes trimmed (a quoted term keeps its\ninner spaces), and a single letter or dash, or a stopword, dropped.",
                    "shapes": [
                        "@param list<string> $terms",
                        "@param list<string> $stopwords",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stopwords",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "stopwords",
                    "static": true,
                    "visibility": "public",
                    "signature": "stopwords(string $list): array",
                    "doc": "The stopword list from its comma-separated (translated) form.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "list",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "columns",
                    "static": true,
                    "visibility": "public",
                    "signature": "columns(array $given): array",
                    "doc": "The searched columns: those given that the reference searches, or all three.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "given",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "where",
                    "static": true,
                    "visibility": "public",
                    "signature": "where(string $table, array $terms, array $columns, string $exclusionPrefix, string $wild): array",
                    "doc": "The search's WHERE fragment (no password clause; a visitor's search\nadds one) and the title matches its order ranks by. An exact search\npasses no wildcard, and asks for no title matches.",
                    "shapes": [
                        "@param list<string> $terms",
                        "@param list<string> $columns each with its table, as the clause names it",
                        "@return array{where: string, titles: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "each with its table, as the clause names it"
                        },
                        {
                            "name": "exclusionPrefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wild",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "order",
                    "static": true,
                    "visibility": "public",
                    "signature": "order(string $table, string $search, int $count, array $titles): string",
                    "doc": "The relevance order: for several terms, the whole string in the title,\nthen every term, then any term (up to six), then the whole string in the\nexcerpt and the content (no sentence match when a term is negated); for\none term, its title match.",
                    "shapes": [
                        "@param list<string> $titles"
                    ],
                    "params": [
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "titles",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 132
                }
            ]
        },
        {
            "name": "Minn\\Query\\Sql",
            "short": "Sql",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/Sql.php",
            "lines": 42,
            "doc": "Literal quoting for the SQL fragments the query classes hand to plugins,\nwhich embed them verbatim in their own statements.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Query\\DateSql",
                "Minn\\Query\\MetaSql",
                "Minn\\Query\\PostSearch",
                "Minn\\Query\\TaxSql",
                "Minn\\Runtime\\CommentQueryWhere",
                "Minn\\Runtime\\PostQueryStatus",
                "Minn\\Runtime\\PostQueryWhere",
                "Minn\\Runtime\\TermQueryRunner",
                "Minn\\Runtime\\UserQueryRunner"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "quote",
                    "static": true,
                    "visibility": "public",
                    "signature": "quote(string $value): string",
                    "doc": "A quoted string literal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 14,
                    "end": 17
                },
                {
                    "routes": [],
                    "name": "escape",
                    "static": true,
                    "visibility": "public",
                    "signature": "escape(string $value): string",
                    "doc": "The reference's escaping: backslash, quotes, NUL, newlines, and the substitute character.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "like",
                    "static": true,
                    "visibility": "public",
                    "signature": "like(string $value): string",
                    "doc": "A LIKE operand with its wildcards escaped; quote() afterwards.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "list",
                    "static": true,
                    "visibility": "public",
                    "signature": "list(array $values): string",
                    "doc": "A comma list of quoted literals.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "values",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "group",
                    "static": true,
                    "visibility": "public",
                    "signature": "group(array $chunks, string $relation, int $depth): string",
                    "doc": "Clauses joined as the reference joins them at every depth (probe\nquery-clauses): wrapped in parentheses, each clause and the relation\non its own line, indented two spaces a level.",
                    "shapes": [
                        "@param list<string> $chunks"
                    ],
                    "params": [
                        {
                            "name": "chunks",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "relation",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 51
                }
            ]
        },
        {
            "name": "Minn\\Query\\TaxSql",
            "short": "TaxSql",
            "namespace": "Minn\\Query",
            "kind": "final class",
            "file": "public/minn/src/Minn/Query/TaxSql.php",
            "lines": 197,
            "doc": "The JOIN and WHERE fragments of a taxonomy query in the reference's\nshape: IN clauses join term_relationships (the first under the table's\nown name, then tt1, tt2, ..., shared between IN siblings under OR),\nNOT IN and AND read subqueries, EXISTS checks the taxonomy, and a term\nnobody has yields \"0 = 1\".",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Query\\Sql",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $relationships, string $termTaxonomy, string $primaryTable, string $primaryId, Closure $termTaxonomyIds)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, string, list<mixed>, bool): list<int> $termTaxonomyIds taxonomy, field, terms, include children"
                ],
                "params": [
                    {
                        "name": "relationships",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "termTaxonomy",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "primaryTable",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "primaryId",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "termTaxonomyIds",
                        "type": "Closure",
                        "shape": "Closure(string, string, list<mixed>, bool): list<int>",
                        "default": null,
                        "doc": "taxonomy, field, terms, include children"
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "aliasCount",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "relationships",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "termTaxonomy",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "primaryTable",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "primaryId",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "termTaxonomyIds",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(array $queries): array",
                    "doc": "The query as the reference keeps it: each clause merged over the\ndefaults (taxonomy, terms as a list, field term_id, operator IN,\nchildren included), a nested group given relation AND when it has\nnone, an empty group dropped. The top level keeps a relation only when\none was given.",
                    "shapes": [
                        "@param array<array-key, mixed> $queries",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "isFirstOrder",
                    "static": true,
                    "visibility": "public",
                    "signature": "isFirstOrder(mixed $query): bool",
                    "doc": "Whether a query part is a clause (it names a clause key, or is empty) rather than a group.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "queried",
                    "static": true,
                    "visibility": "public",
                    "signature": "queried(array $queries, array $queried = array ( )): array",
                    "doc": "The terms a sanitized query asks for, by taxonomy: the first terms and\nthe first field each taxonomy's clauses give, NOT IN clauses aside.",
                    "shapes": [
                        "@param array<array-key, mixed> $queries",
                        "@return array<string, array{terms?: list<mixed>, field?: string}>"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "queried",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": false,
                    "visibility": "public",
                    "signature": "build(array $queries): array",
                    "doc": "The JOIN and WHERE fragments for a taxonomy query.",
                    "shapes": [
                        "@return array{join: string, where: string}"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "sqlClauses",
                    "static": false,
                    "visibility": "public",
                    "signature": "sqlClauses(array $queries): array",
                    "doc": "The whole query's JOIN and WHERE (get_sql_clauses), each clause settled in place. @return array{join: string, where: string}",
                    "shapes": [
                        "@return array{join: string, where: string}"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "querySql",
                    "static": false,
                    "visibility": "public",
                    "signature": "querySql(array $queries, int $depth): array",
                    "doc": "A group's JOIN and WHERE (get_sql_for_query), indented for its depth. @return array{join: string, where: string}",
                    "shapes": [
                        "@return array{join: string, where: string}"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "clauseSql",
                    "static": false,
                    "visibility": "public",
                    "signature": "clauseSql(array $clause, array $parent): array",
                    "doc": "One clause's JOIN and WHERE pieces (get_sql_for_clause). Its terms are\nturned into term_taxonomy_ids in place; an IN clause reads\nterm_relationships under an alias it shares with a compatible sibling\nor joins anew, and keeps that alias. A term nobody has yields \"0 = 1\"\n(nothing at all for NOT IN).",
                    "shapes": [
                        "@return array{where: list<string>, join: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "compatibleAlias",
                    "static": false,
                    "visibility": "public",
                    "signature": "compatibleAlias(array $clause, array $parent): string|false",
                    "doc": "The alias of an IN sibling the clause can share under OR (find_compatible_table_alias), or false.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 181,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "operator",
                    "static": true,
                    "visibility": "private",
                    "signature": "operator(array $clause): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "inClause",
                    "static": false,
                    "visibility": "private",
                    "signature": "inClause(array $clause, array $parent, string $list): array",
                    "doc": "",
                    "shapes": [
                        "@return array{where: list<string>, join: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "clause",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "list",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 201,
                    "end": 213
                }
            ]
        },
        {
            "name": "Minn\\RestError",
            "short": "RestError",
            "namespace": "Minn",
            "kind": "final class",
            "file": "public/minn/src/Minn/RestError.php",
            "lines": 60,
            "doc": "A WordPress-shaped error, thrown from anywhere and rendered once by the\nkernel: {\"code\": ..., \"message\": ..., \"data\": {\"status\": ...}}.",
            "implements": [
                "Stringable",
                "Throwable"
            ],
            "extends": "RuntimeException",
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\Translations",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Cli\\AssetUpdate",
                "Minn\\Cli\\DirectorySearch",
                "Minn\\Cli\\PackageInstaller",
                "Minn\\Engine",
                "Minn\\Http\\Envelope",
                "Minn\\Http\\Kernel",
                "Minn\\Http\\Router",
                "Minn\\Media\\Upload",
                "Minn\\Ops\\Archive",
                "Minn\\Ops\\CoreStatus",
                "Minn\\Ops\\Directory",
                "Minn\\Ops\\Logs",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Updates",
                "Minn\\Ops\\UpgraderRun",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\ExistingPost",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\LiveSettings",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Runtime\\MenuEvents",
                "Minn\\Runtime\\PostSave",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Runtime\\UserEvents"
            ],
            "constructor": {
                "signature": "__construct(string $errorCode, string $message, int $status, array $extra = array ( ), array $topLevel = array ( ), bool $bare = false)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed> $extra keys added beside status inside data (the whole of data when it names status)",
                    "@param array<string, mixed> $topLevel keys added beside code/message/data"
                ],
                "params": [
                    {
                        "name": "errorCode",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "message",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "status",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "extra",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": "array ( )",
                        "doc": "keys added beside status inside data (the whole of data when it names status)"
                    },
                    {
                        "name": "topLevel",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": "array ( )",
                        "doc": "keys added beside code/message/data"
                    },
                    {
                        "name": "bare",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "errorCode",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "status",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "extra",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "topLevel",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "bare",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "noRoute",
                    "static": true,
                    "visibility": "public",
                    "signature": "noRoute(): self",
                    "doc": "The reference's 404 for a route nothing answers.",
                    "shapes": [],
                    "params": [],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "missingParams",
                    "static": true,
                    "visibility": "public",
                    "signature": "missingParams(array $params): self",
                    "doc": "The reference's 400 for required parameters that did not arrive.",
                    "shapes": [
                        "@param list<string> $params"
                    ],
                    "params": [
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "invalidParam",
                    "static": true,
                    "visibility": "public",
                    "signature": "invalidParam(string $param, string $message, string $code = 'rest_not_in_enum', mixed $data = NULL): self",
                    "doc": "The reference's 400 for one parameter its schema refuses: the message\nunder params, and under details with the refusal's code and data, as\nWP_REST_Request::has_valid_params reports it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": "'rest_not_in_enum'",
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "mixed",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "bare",
                    "static": true,
                    "visibility": "public",
                    "signature": "bare(string $code, string $message): self",
                    "doc": "A statusless core error as REST serves it: HTTP 500 with data null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "payload",
                    "static": false,
                    "visibility": "public",
                    "signature": "payload(): array",
                    "doc": "The error as the reference's JSON body: code, message, data.",
                    "shapes": [],
                    "params": [],
                    "line": 63,
                    "end": 71
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Api",
            "short": "Api",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/Api.php",
            "lines": 454,
            "doc": "The REST API: wires the controllers for one request and dispatches a\nroute. Errors thrown anywhere underneath become the reference's error\npayload under the reference's headers.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\AdminTypes",
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Auth\\Authenticated",
                "Minn\\Content\\PostRecord",
                "Minn\\Db",
                "Minn\\Http\\Method",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Router",
                "Minn\\RestError",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\EngineRoutes",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\Links",
                "Minn\\Rest\\LiveSettings",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenuItemObject",
                "Minn\\Rest\\MenuObject",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\RouteCatalogue",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\Settings",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\Types",
                "Minn\\Rest\\UserObject",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetObject",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\TemplateRecord"
            ],
            "usedBy": [
                "Minn\\Engine"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Request $request, Minn\\Http\\Router $router, Minn\\Rest\\Services $services, Minn\\Rest\\Embed $embed)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "request",
                        "type": "Minn\\Http\\Request",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "router",
                        "type": "Minn\\Http\\Router",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "services",
                        "type": "Minn\\Rest\\Services",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "embed",
                        "type": "Minn\\Rest\\Embed",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 38,
                "end": 44
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "request",
                    "type": "Minn\\Http\\Request",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "router",
                    "type": "Minn\\Http\\Router",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "services",
                    "type": "Minn\\Rest\\Services",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "embed",
                    "type": "Minn\\Rest\\Embed",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "routes",
                    "static": false,
                    "visibility": "public",
                    "signature": "routes(): array",
                    "doc": "The engine's routes in the reference's index form.",
                    "shapes": [
                        "@return array<string, list<string>> the engine's routes in the reference's form, route => methods"
                    ],
                    "params": [],
                    "line": 51,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "forRequest",
                    "static": true,
                    "visibility": "public",
                    "signature": "forRequest(Minn\\Db $db, Minn\\Http\\Request $request): self",
                    "doc": "The API for one request: the shared services and the route table.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "caller",
                    "static": false,
                    "visibility": "public",
                    "signature": "caller(): Minn\\Rest\\Caller",
                    "doc": "Who is making this request.",
                    "shapes": [],
                    "params": [],
                    "line": 130,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "listPosts",
                    "static": false,
                    "visibility": "public",
                    "signature": "listPosts(string $route, string $type, Closure $shape, ?WP_REST_Request $as = NULL): Minn\\Http\\Response",
                    "doc": "A post type's list as its route serves it (the caller, the statuses,\nthe parameters, the query, the totals and page links), each post given\nthe shape asked for: the facade's controller class shapes them itself.",
                    "shapes": [
                        "@param \\Closure(\\Minn\\Content\\PostRecord, Context): array<string, mixed> $shape"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "shape",
                            "type": "Closure",
                            "shape": "\\Closure(\\Minn\\Content\\PostRecord, Context): array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "?WP_REST_Request",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "revisionObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisionObject(array $row, Minn\\Rest\\Context $context): array",
                    "doc": "A revision (or autosave) row as wp/v2 shapes it, in the view or edit context. @param array<string, mixed> $row",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "saveAutosave",
                    "static": false,
                    "visibility": "public",
                    "signature": "saveAutosave(int $parentId, int $userId, string $title, string $content, string $excerpt): int",
                    "doc": "Saves a user's autosave of a post in its one slot per author; the revision's id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "excerpt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 167
                },
                {
                    "routes": [],
                    "name": "postObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "postObject(): Minn\\Rest\\PostObject",
                    "doc": "The wp/v2 post shape.",
                    "shapes": [],
                    "params": [],
                    "line": 170,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "termObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "termObject(): Minn\\Rest\\TermObject",
                    "doc": "The wp/v2 term shape.",
                    "shapes": [],
                    "params": [],
                    "line": 176,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "commentObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "commentObject(): Minn\\Rest\\CommentObject",
                    "doc": "The wp/v2 comment shape.",
                    "shapes": [],
                    "params": [],
                    "line": 182,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "menuObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "menuObject(): Minn\\Rest\\MenuObject",
                    "doc": "The wp/v2 menu shape.",
                    "shapes": [],
                    "params": [],
                    "line": 188,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "menuItemView",
                    "static": false,
                    "visibility": "public",
                    "signature": "menuItemView(int $id, string $context): array",
                    "doc": "One menu item as wp/v2 shapes it in a context (view, edit or embed); empty when there is none. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "mediaView",
                    "static": false,
                    "visibility": "public",
                    "signature": "mediaView(int $id, string $context): array",
                    "doc": "One attachment as wp/v2 shapes it in a context (view, edit or embed), links included; empty when there is none. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 203,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "mediaLinks",
                    "static": false,
                    "visibility": "public",
                    "signature": "mediaLinks(int $id, string $context): array",
                    "doc": "One attachment's wp/v2 links in a context, without rendering the rest of it; empty when there is none. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 214
                },
                {
                    "routes": [],
                    "name": "templateView",
                    "static": false,
                    "visibility": "public",
                    "signature": "templateView(Minn\\Theme\\TemplateRecord $record, string $context, string $as): array",
                    "doc": "A template as wp/v2 shapes it in a context, for the route's own type (templates or template parts). @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 217,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "themeFields",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeFields(WP_Theme $theme, WP_REST_Request $request): array",
                    "doc": "A theme in the wp/v2 shape, links included, before rest_prepare_theme. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "theme",
                            "type": "WP_Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 225,
                    "end": 228
                },
                {
                    "routes": [],
                    "name": "embedLinks",
                    "static": false,
                    "visibility": "public",
                    "signature": "embedLinks(array $data, array $rels): array",
                    "doc": "A response's data with its embeddable links answered in-process as this caller; every rel when none is named. @param list<string> $rels @return array<string, mixed>",
                    "shapes": [
                        "@param list<string> $rels @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rels",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 231,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "userObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "userObject(): Minn\\Rest\\UserObject",
                    "doc": "The wp/v2 user shape.",
                    "shapes": [],
                    "params": [],
                    "line": 237,
                    "end": 240
                },
                {
                    "routes": [],
                    "name": "types",
                    "static": false,
                    "visibility": "public",
                    "signature": "types(): Minn\\Rest\\Types",
                    "doc": "The post types the surface knows.",
                    "shapes": [],
                    "params": [],
                    "line": 243,
                    "end": 246
                },
                {
                    "routes": [],
                    "name": "actingAs",
                    "static": false,
                    "visibility": "public",
                    "signature": "actingAs(int $userId, string $token): self",
                    "doc": "Runs the request as a user already proven by the outer request, for\nthe in-process calls plugin code makes, or as the user plugin code\nsettled (determine_current_user; 0 for nobody); a user who no longer\nexists leaves the caller as the request itself resolves it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 254,
                    "end": 263
                },
                {
                    "routes": [],
                    "name": "handle",
                    "static": false,
                    "visibility": "public",
                    "signature": "handle(string $route): Minn\\Http\\Response",
                    "doc": "Resolves a REST route (from the path or from ?rest_route=) to a response.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 266,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "withServerHeaders",
                    "static": false,
                    "visibility": "public",
                    "signature": "withServerHeaders(Minn\\Http\\Response $response, string $route): Minn\\Http\\Response",
                    "doc": "The headers the reference's server adds to every REST answer over\nHTTP (probe rest-server-headers): X-Robots-Tag noindex always; and,\nwhile rest_send_cors_headers stays hooked, for a request from an\nOrigin the CORS headers echoing it with Vary: Origin, otherwise Vary:\nOrigin for a GET from someone not signed in. A signed-in caller's\nanswer also carries the no-cache headers (rest_send_nocache_headers,\nnocache_headers). The CORS header lists go through\nrest_exposed_cors_headers and rest_allowed_cors_headers, handed the\nroute's request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 306,
                    "end": 331
                },
                {
                    "routes": [],
                    "name": "withDiscovery",
                    "static": false,
                    "visibility": "public",
                    "signature": "withDiscovery(Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "A REST answer as it leaves over HTTP: pointing at the API's root, unless it carries a Link header of its own (a batch's parts do not).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 334,
                    "end": 338
                },
                {
                    "routes": [],
                    "name": "writePost",
                    "static": false,
                    "visibility": "public",
                    "signature": "writePost(string $verb, string $route, string $type, string $base, string $id = '', ?WP_REST_Request $as = NULL): Minn\\Http\\Response",
                    "doc": "A post of a REST type the engine has no route for (one under a\nnamespace of its own, probe namespaced-type) created, updated or\ndeleted by the engine's own writer, for the type's controller, whose\npermission checks have already run.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "verb",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "?WP_REST_Request",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 346,
                    "end": 363
                },
                {
                    "routes": [],
                    "name": "handleEngineOnly",
                    "static": false,
                    "visibility": "public",
                    "signature": "handleEngineOnly(string $route, ?WP_REST_Request $as = NULL): ?Minn\\Http\\Response",
                    "doc": "The engine's own answer to a route, or null when no engine route\ntakes it; the runtime's table is never consulted. This is what the\nruntime's server calls for a core route, so a route the engine\ndeclines cannot bounce between the two. $as is the caller's own\nrequest object, which the route's parameters are set on.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "?WP_REST_Request",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 372,
                    "end": 384
                },
                {
                    "routes": [],
                    "name": "allowedOn",
                    "static": false,
                    "visibility": "public",
                    "signature": "allowedOn(string $route, ?WP_REST_Request $as = NULL): array",
                    "doc": "The methods this caller may use on one of the engine's routes, as\nits Allow header lists them (rest_send_allow_header asks).",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "?WP_REST_Request",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 392,
                    "end": 399
                },
                {
                    "routes": [],
                    "name": "controllers",
                    "static": true,
                    "visibility": "private",
                    "signature": "controllers(Minn\\Rest\\Services $s, Minn\\Http\\Router $router): array",
                    "doc": "The route table: every controller, built from the shared services.\nTemplates join only under a block theme.",
                    "shapes": [
                        "@return list<object>"
                    ],
                    "params": [
                        {
                            "name": "s",
                            "type": "Minn\\Rest\\Services",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "router",
                            "type": "Minn\\Http\\Router",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "engineResponse",
                    "static": false,
                    "visibility": "private",
                    "signature": "engineResponse(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 401,
                    "end": 408
                },
                {
                    "routes": [],
                    "name": "withPageLinks",
                    "static": false,
                    "visibility": "private",
                    "signature": "withPageLinks(Minn\\Http\\Request $request, Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "A collection's Link header as the reference sends it: the previous page\n(no further than the last) and the next, each the collection's URL\nwith the request's own parameters and the page swapped in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 415,
                    "end": 437
                },
                {
                    "routes": [],
                    "name": "options",
                    "static": false,
                    "visibility": "private",
                    "signature": "options(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "An OPTIONS request as the reference answers it: the description of\nthe first route whose pattern takes the path, whoever asks (the Allow\nheader says what the caller may do); null when no engine route takes\nit, or when a plugin removed rest_handle_options_request (which is\nwhat answers OPTIONS on the reference).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 446,
                    "end": 453
                },
                {
                    "routes": [],
                    "name": "withSchema",
                    "static": false,
                    "visibility": "private",
                    "signature": "withSchema(array $entry, string $path): array",
                    "doc": "A route's description as the reference's OPTIONS answer gives it: the\nschema its controller describes it by, and for a route with no\nparameters a self link.",
                    "shapes": [
                        "@param array<string, mixed> $entry",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "entry",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 463,
                    "end": 478
                },
                {
                    "routes": [],
                    "name": "withAllow",
                    "static": false,
                    "visibility": "private",
                    "signature": "withAllow(Minn\\Http\\Request $request, Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "The Allow header as the reference sends it: the methods the caller\nmay use on the matched path, and no header when there are none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 484,
                    "end": 488
                }
            ]
        },
        {
            "name": "Minn\\Rest\\ApplicationPasswordsController",
            "short": "ApplicationPasswordsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/ApplicationPasswordsController.php",
            "lines": 177,
            "doc": "wp/v2/users/{id}/application-passwords: list, create, rename, delete,\nand introspect the password that authenticated the call. Refusals and\nshapes follow the reference: 501 when passwords are unavailable (no\nHTTPS), 401 anonymous, 404 for an unknown user or password, arguments\nchecked before permissions.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\Authenticator",
                "Minn\\Content\\Site",
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Schema",
                "Minn\\Runtime\\ApplicationPasswordEvents"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Users $users, Minn\\Content\\Site $site, Minn\\Auth\\ApplicationPasswords $passwords, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller, Minn\\Rest\\Schema $schema)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "passwords",
                        "type": "Minn\\Auth\\ApplicationPasswords",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "schema",
                        "type": "Minn\\Rest\\Schema",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 35,
                "end": 43
            },
            "cases": [],
            "constants": [
                {
                    "name": "NAME_SCHEMA",
                    "value": "array (   'type' => 'string',   'minLength' => 1,   'pattern' => '.*\\\\S.*', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "APP_ID_SCHEMA",
                    "value": "array (   'type' => 'string',   'oneOf' =>    array (     0 =>      array (       'type' => 'string',       'format' => 'uuid',     ),     1 =>      array (       'type' => 'string',       'enum' =>        array (         0 => '',       ),     ),   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "passwords",
                    "type": "Minn\\Auth\\ApplicationPasswords",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "schema",
                    "type": "Minn\\Rest\\Schema",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords (cap edit_user on {user_id}; user {user_id} must exist)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request, string $userId): Minn\\Http\\Response",
                    "doc": "The user's application passwords.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 52
                },
                {
                    "routes": [
                        "POST /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords (cap edit_user on {user_id}; user {user_id} must exist)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request, string $userId): Minn\\Http\\Response",
                    "doc": "Mints one; the plain password is in this answer only.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 73
                },
                {
                    "routes": [
                        "DELETE /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords (cap edit_user on {user_id}; user {user_id} must exist)"
                    ],
                    "name": "deleteAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteAll(Minn\\Http\\Request $request, string $userId): Minn\\Http\\Response",
                    "doc": "Removes every one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 82
                },
                {
                    "routes": [
                        "GET /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords/introspect (cap edit_user on {user_id}; user {user_id} must exist)"
                    ],
                    "name": "introspect",
                    "static": false,
                    "visibility": "public",
                    "signature": "introspect(Minn\\Http\\Request $request, string $userId): Minn\\Http\\Response",
                    "doc": "The password the current Basic auth session used.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 95
                },
                {
                    "routes": [
                        "GET /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords/{uuid:[\\w\\-]+} (cap edit_user on {user_id}; user {user_id} must exist)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $userId, string $uuid): Minn\\Http\\Response",
                    "doc": "One password by uuid.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 103
                },
                {
                    "routes": [
                        "POST /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords/{uuid:[\\w\\-]+} (cap edit_user on {user_id}; user {user_id} must exist)",
                        "PUT /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords/{uuid:[\\w\\-]+} (cap edit_user on {user_id}; user {user_id} must exist)",
                        "PATCH /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords/{uuid:[\\w\\-]+} (cap edit_user on {user_id}; user {user_id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $userId, string $uuid): Minn\\Http\\Response",
                    "doc": "Renames one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 122
                },
                {
                    "routes": [
                        "DELETE /wp/v2/users/{user_id:(?:[\\d]+|me)}/application-passwords/{uuid:[\\w\\-]+} (cap edit_user on {user_id}; user {user_id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $userId, string $uuid): Minn\\Http\\Response",
                    "doc": "Removes one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "subject",
                    "static": false,
                    "visibility": "private",
                    "signature": "subject(Minn\\Http\\Request $request, string $id, string $code, string $message): Minn\\Content\\UserRecord",
                    "doc": "The user the route names, after the availability, identity, and permission checks the reference makes. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 138,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "existing",
                    "static": false,
                    "visibility": "private",
                    "signature": "existing(Minn\\Content\\UserRecord $user, string $uuid): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $user @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "validate",
                    "static": false,
                    "visibility": "private",
                    "signature": "validate(string $name, mixed $value, array $schema): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "private",
                    "signature": "item(Minn\\Content\\UserRecord $user, array $record, ?string $plain = NULL): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $user @param array<string, mixed> $record @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "user",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param array<string, mixed> $record @return array<string, mixed>"
                        },
                        {
                            "name": "record",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plain",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 181,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "when",
                    "static": false,
                    "visibility": "private",
                    "signature": "when(mixed $unix): ?string",
                    "doc": "A stored unix time as the site-local ISO stamp the reference prints, without an offset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "unix",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 205
                }
            ]
        },
        {
            "name": "Minn\\Rest\\ArgCheck",
            "short": "ArgCheck",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/ArgCheck.php",
            "lines": 85,
            "doc": "Judges a route's declared arguments against the request before the\npolicy is judged, the way the reference does: a required parameter that\ndid not arrive is rest_missing_callback_param; the shared collection\nparameters (context, page, per_page, search) are judged first and a\nrefusal among them is answered alone; then every other invalid one is\nlisted in rest_invalid_param, in the order the route declares them, with\nthe schema's own refusal under details. The query is read against the\nroute's args, the JSON body against its body set, and a JSON body that\ndoes not parse is refused on every route first. An argument its handler\njudges (Args::HANDLER_VALIDATES) is left to the handler.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Request",
                "Minn\\Http\\Route",
                "Minn\\Json",
                "Minn\\RestError",
                "Minn\\Rest\\Schema",
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\BatchController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Schema $schema)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "schema",
                        "type": "Minn\\Rest\\Schema",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 31,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "schema",
                    "type": "Minn\\Rest\\Schema",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "closure",
                    "static": false,
                    "visibility": "public",
                    "signature": "closure(): Closure",
                    "doc": "The check as the router takes it.",
                    "shapes": [],
                    "params": [],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "check",
                    "static": false,
                    "visibility": "public",
                    "signature": "check(Minn\\Http\\Route $route, Minn\\Http\\Request $request, array $captures = array ( )): void",
                    "doc": "Throws the refusal the declared arguments earn, or returns. @param array<string, string> $captures what the path named, for a route whose parameters depend on it",
                    "shapes": [
                        "@param array<string, string> $captures what the path named, for a route whose parameters depend on it"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "Minn\\Http\\Route",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": "array ( )",
                            "doc": "what the path named, for a route whose parameters depend on it"
                        }
                    ],
                    "line": 42,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "json",
                    "static": false,
                    "visibility": "private",
                    "signature": "json(Minn\\Http\\Request $request): void",
                    "doc": "A JSON body that does not parse is refused on every route, before its arguments are read; an empty one is not a body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "missing",
                    "static": false,
                    "visibility": "private",
                    "signature": "missing(array $args, array $values): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, array<string, mixed>> $args",
                        "@param array<string, mixed> $values"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "values",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "round",
                    "static": false,
                    "visibility": "private",
                    "signature": "round(array $sources): void",
                    "doc": "",
                    "shapes": [
                        "@param list<array{0: array<string, array<string, mixed>>, 1: array<string, mixed>}> $sources"
                    ],
                    "params": [
                        {
                            "name": "sources",
                            "type": "array",
                            "shape": "list<array{0: array<string, array<string, mixed>>, 1: array<string, mixed>}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 112
                }
            ]
        },
        {
            "name": "Minn\\Rest\\BatchController",
            "short": "BatchController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/BatchController.php",
            "lines": 159,
            "doc": "batch/v1 as the reference answers it (probe rest-batch): up to 25\nwrites (POST, PUT, PATCH, DELETE) in one request, each answered in turn\nas {body, status, headers}, the whole as 207. Only routes that take part\nin batches may be asked: posts, pages and the other post types shown in\nREST (not media, templates, global styles or fonts), the taxonomies,\nusers, widgets, and a plugin's routes that opt in with allow_batch. Any\nother route answers rest_batch_not_allowed with its Allow header, a path\nwith no route rest_no_route. With require-all-validate, every request's\narguments are judged first and one failure answers the whole batch with\nthe failures alone (null for the rest), nothing written.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Router",
                "Minn\\Json",
                "Minn\\RestError",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Types",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Router $router, Closure $dispatch, Minn\\Rest\\ArgCheck $args, Minn\\Rest\\Types $types)",
                "doc": "",
                "shapes": [
                    "@param Closure(Request): Response $dispatch answers one request as the REST API would on its own"
                ],
                "params": [
                    {
                        "name": "router",
                        "type": "Minn\\Http\\Router",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "dispatch",
                        "type": "Closure",
                        "shape": "Closure(Request): Response",
                        "default": null,
                        "doc": "answers one request as the REST API would on its own"
                    },
                    {
                        "name": "args",
                        "type": "Minn\\Rest\\ArgCheck",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 55,
                "end": 57
            },
            "cases": [],
            "constants": [
                {
                    "name": "BODY",
                    "value": "array (   'validation' =>    array (     'type' => 'string',     'enum' =>      array (       0 => 'require-all-validate',       1 => 'normal',     ),     'default' => 'normal',     'required' => false,   ),   'requests' =>    array (     'required' => true,     'type' => 'array',     'maxItems' => 25,     'items' =>      array (       'type' => 'object',       'properties' =>        array (         'method' =>          array (           'type' => 'string',           'enum' =>            array (             0 => 'POST',             1 => 'PUT',             2 => 'PATCH',             3 => 'DELETE',           ),           'default' => 'POST',         ),         'path' =>          array (           'type' => 'string',           'required' => true,         ),         'body' =>          array (           'type' => 'object',           'properties' =>            array (           ),           'additionalProperties' => true,         ),         'headers' =>          array (           'type' => 'object',           'properties' =>            array (           ),           'additionalProperties' =>            array (             'type' =>              array (               0 => 'string',               1 => 'array',             ),             'items' =>              array (               'type' => 'string',             ),           ),         ),       ),     ),   ), )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "NOT_BATCHED",
                    "value": "array (   0 => 'attachment',   1 => 'wp_template',   2 => 'wp_template_part',   3 => 'wp_global_styles',   4 => 'wp_font_family',   5 => 'wp_font_face', )",
                    "doc": "Post types served by controllers that do not take part in batches.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "router",
                    "type": "Minn\\Http\\Router",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "dispatch",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "args",
                    "type": "Minn\\Rest\\ArgCheck",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "POST /batch/v1 (public)"
                    ],
                    "name": "batch",
                    "static": false,
                    "visibility": "public",
                    "signature": "batch(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The requests answered in turn.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": false,
                    "visibility": "private",
                    "signature": "refusal(Minn\\Http\\Request $sub): ?array",
                    "doc": "A request a batch may not carry, as its envelope: no route, or a route that does not take part. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "sub",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 102
                },
                {
                    "routes": [],
                    "name": "invalid",
                    "static": false,
                    "visibility": "private",
                    "signature": "invalid(Minn\\Http\\Request $sub): ?array",
                    "doc": "A request whose arguments do not validate, as its envelope (no headers); null when they do. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "sub",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "claims",
                    "static": false,
                    "visibility": "private",
                    "signature": "claims(Minn\\Http\\Route $route, array $captures): bool",
                    "doc": "A {base} route answers only for a type an extension declared, as the gate's Access::Type has it. @param array<string, string> $captures",
                    "shapes": [
                        "@param array<string, string> $captures"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "Minn\\Http\\Route",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "batchablePath",
                    "static": false,
                    "visibility": "private",
                    "signature": "batchablePath(string $path): bool",
                    "doc": "Whether an engine path belongs to a route that takes part in batches.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "subRequest",
                    "static": true,
                    "visibility": "private",
                    "signature": "subRequest(Minn\\Http\\Request $parent, array $entry): Minn\\Http\\Request",
                    "doc": "One entry of the batch as a request of its own: its method, path and query, its body as JSON, the caller's session. @param array<string, mixed> $entry",
                    "shapes": [
                        "@param array<string, mixed> $entry"
                    ],
                    "params": [
                        {
                            "name": "parent",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "entry",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 160,
                    "end": 175
                },
                {
                    "routes": [],
                    "name": "error",
                    "static": true,
                    "visibility": "private",
                    "signature": "error(Minn\\RestError $error, array $allow): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $allow @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "error",
                            "type": "Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allow",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 178,
                    "end": 181
                },
                {
                    "routes": [],
                    "name": "envelope",
                    "static": true,
                    "visibility": "private",
                    "signature": "envelope(Minn\\Http\\Response $response): array",
                    "doc": "A sub-request's answer as {body, status, headers}: the headers its route set, not the server's own. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 184,
                    "end": 188
                }
            ]
        },
        {
            "name": "Minn\\Rest\\BatchRequest",
            "short": "BatchRequest",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/BatchRequest.php",
            "lines": 32,
            "doc": "The requests a batch payload names, normalised into descriptors the\ncaller turns into real request objects. A path's query string is split\noff here so each sub-request carries its own query parameters, which is\nwhat lets one round trip stand in for several.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "describe",
                    "static": true,
                    "visibility": "public",
                    "signature": "describe(mixed $requests): array",
                    "doc": "The batch body's requests in the reference's normalised form.",
                    "shapes": [
                        "@return list<array{method: string, path: string, query: array<string, mixed>, body: ?array, headers: ?array}>"
                    ],
                    "params": [
                        {
                            "name": "requests",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": "the batch payload's `requests` member"
                        }
                    ],
                    "line": 21,
                    "end": 43
                }
            ]
        },
        {
            "name": "Minn\\Rest\\BlockRendererController",
            "short": "BlockRendererController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/BlockRendererController.php",
            "lines": 89,
            "doc": "wp/v2/block-renderer as the reference answers it (probe\nrest-block-renderer), the route the editor's ServerSideRender asks: a\ndynamic block rendered from the attributes sent (query or body), checked\nagainst the block's own attributes and filled in with their defaults,\ninside the post named by post_id when there is one (it becomes the\nglobal post, and the block's postId and postType context). Only the edit\ncontext is accepted, and asking for none is asking for the view context,\nwhich is refused, as on the reference. Arguments are judged before the\ncaller: someone who can edit posts may render, or edit the post named.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\Schema",
                "Minn\\Runtime\\Refusal",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Schema $schema, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "schema",
                        "type": "Minn\\Rest\\Schema",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 37,
                "end": 39
            },
            "cases": [],
            "constants": [
                {
                    "name": "ARGS",
                    "value": "array (   'context' =>    array (     'description' => 'Scope under which the request is made; determines fields present in response.',     'type' => 'string',     'enum' =>      array (       0 => 'edit',     ),     'default' => 'view',     'required' => false,     'handler_validates' => true,   ),   'attributes' =>    array (     'description' => 'Attributes for the block.',     'type' => 'object',     'default' =>      array (     ),     'required' => false,     'handler_validates' => true,   ),   'post_id' =>    array (     'description' => 'ID of the post context.',     'type' => 'integer',     'required' => false,   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "schema",
                    "type": "Minn\\Rest\\Schema",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/block-renderer/{name:[a-z0-9-]+/[a-z0-9-]+} (public)",
                        "POST /wp/v2/block-renderer/{name:[a-z0-9-]+/[a-z0-9-]+} (public)"
                    ],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Http\\Request $request, string $name): Minn\\Http\\Response",
                    "doc": "The block's markup, as {\"rendered\": \"...\"}.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "refuseInvalid",
                    "static": false,
                    "visibility": "private",
                    "signature": "refuseInvalid(array $args): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, array{0: mixed, 1: array<string, mixed>}> $args value and schema by name"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, array{0: mixed, 1: array<string, mixed>}>",
                            "default": null,
                            "doc": "value and schema by name"
                        }
                    ],
                    "line": 64,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "permit",
                    "static": false,
                    "visibility": "private",
                    "signature": "permit(int $postId): void",
                    "doc": "Someone who can edit posts may render; with a post named, someone who can edit that post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "rendered",
                    "static": true,
                    "visibility": "private",
                    "signature": "rendered(WP_Block_Type $type, array $attributes, int $postId): string",
                    "doc": "The block rendered on its own, inside the post when one is named (the global post put back after). @param array<string, mixed> $attributes",
                    "shapes": [
                        "@param array<string, mixed> $attributes"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "WP_Block_Type",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 116
                }
            ]
        },
        {
            "name": "Minn\\Rest\\BlockTypesController",
            "short": "BlockTypesController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/BlockTypesController.php",
            "lines": 133,
            "doc": "wp/v2/block-types as the reference answers it (probe rest-block-types):\nevery registered block type, core's and a plugin's, in registration\norder, or a namespace's share, for anyone who can edit a type shown in\nREST. Each carries its registration (attributes, supports, selectors,\ncontexts, asset handles and the first of each as the old single field)\nwith its styles (its own, then those registered for it) and its\nvariations as built when asked; a dynamic block links to its renderer.\nServed with plugins loaded, since a plugin's blocks come from its code.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 31,
                "end": 33
            },
            "cases": [],
            "constants": [
                {
                    "name": "NAMESPACE",
                    "value": "array (   'namespace' =>    array (     'type' => 'string',     'description' => 'Block namespace.',     'required' => false,   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/block-types (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Every block type, or those of one namespace (?namespace=).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [
                        "GET /wp/v2/block-types/{namespace:[a-zA-Z0-9_-]+} (public)"
                    ],
                    "name": "inNamespace",
                    "static": false,
                    "visibility": "public",
                    "signature": "inNamespace(Minn\\Http\\Request $request, string $namespace): Minn\\Http\\Response",
                    "doc": "One namespace's block types.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [
                        "GET /wp/v2/block-types/{namespace:[a-zA-Z0-9_-]+}/{name:[a-zA-Z0-9_-]+} (public)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $namespace, string $name): Minn\\Http\\Response",
                    "doc": "One block type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "fields",
                    "static": true,
                    "visibility": "public",
                    "signature": "fields(WP_Block_Type $type): array",
                    "doc": "A block type's fields in the reference's order, as the route and\nWP_REST_Block_Types_Controller show them: its registration (supports\n{} when it has none), its styles (its own, then those registered for\nit), its variations as built when asked, and the first handle of each\nasset kind as the old single field (probe rest-block-controllers).",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "WP_Block_Type",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "items",
                    "static": false,
                    "visibility": "private",
                    "signature": "items(Minn\\Http\\Request $request, string $namespace): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "private",
                    "signature": "item(WP_Block_Type $type): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "WP_Block_Type",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "private",
                    "signature": "links(WP_Block_Type $type): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, list<array<string, mixed>>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "WP_Block_Type",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "requireViewer",
                    "static": false,
                    "visibility": "private",
                    "signature": "requireViewer(): void",
                    "doc": "Only someone who edits a type shown in REST may read block types; the runtime holds them.",
                    "shapes": [],
                    "params": [],
                    "line": 150,
                    "end": 158
                }
            ]
        },
        {
            "name": "Minn\\Rest\\BlocksController",
            "short": "BlocksController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/BlocksController.php",
            "lines": 69,
            "doc": "wp/v2/blocks: synced patterns and reusable blocks, stored as wp_block\nposts. The reading and writing is the posts machinery with the post\ntype's own capabilities; what is this type's alone is the reading gate:\nwithout edit_posts the list is empty and a single block is refused,\npublished or not.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\ExistingPost",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Reply"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\PostsController $reads, Minn\\Rest\\PostsWriteController $writes, Minn\\Content\\Posts $posts, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "reads",
                        "type": "Minn\\Rest\\PostsController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writes",
                        "type": "Minn\\Rest\\PostsWriteController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 29,
                "end": 35
            },
            "cases": [],
            "constants": [
                {
                    "name": "TYPE",
                    "value": "'wp_block'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BASE",
                    "value": "'blocks'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "reads",
                    "type": "Minn\\Rest\\PostsController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writes",
                    "type": "Minn\\Rest\\PostsWriteController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/blocks (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The blocks the caller may edit; an empty list for anyone else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 45
                },
                {
                    "routes": [
                        "GET /wp/v2/blocks/{id:[\\d]+} (public; block {id} must exist)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One block. Editing context is the posts machinery's own gate\n(rest_forbidden_context); a view is refused to anyone who cannot edit\nposts, and a trashed or unknown block is not found rather than refused.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 68
                },
                {
                    "routes": [
                        "POST /wp/v2/blocks (cap publish_posts)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Creates a block: a pattern's create_posts is publish_posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 75
                },
                {
                    "routes": [
                        "POST /wp/v2/blocks/{id:[\\d]+} (cap edit_post on {id}; block {id} must exist)",
                        "PUT /wp/v2/blocks/{id:[\\d]+} (cap edit_post on {id}; block {id} must exist)",
                        "PATCH /wp/v2/blocks/{id:[\\d]+} (cap edit_post on {id}; block {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Updates a block.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 84
                },
                {
                    "routes": [
                        "DELETE /wp/v2/blocks/{id:[\\d]+} (cap delete_post on {id}; block {id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Trashes or deletes a block.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 91
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Caller",
            "short": "Caller",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Caller.php",
            "lines": 149,
            "doc": "Who is making this REST call. Resolved once from the cookie and nonce;\nan anonymous or failed caller has id 0 and every capability check fails.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\AuthFailure",
                "Minn\\Auth\\Authenticated",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Capabilities",
                "Minn\\Http\\Request",
                "Minn\\RestError",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\MenuItemObject",
                "Minn\\Rest\\MenuObject",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UserObject",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Request $request, Minn\\Auth\\Authenticator $authenticator, Minn\\Auth\\Capabilities $capabilities)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "request",
                        "type": "Minn\\Http\\Request",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "authenticator",
                        "type": "Minn\\Auth\\Authenticator",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "capabilities",
                        "type": "Minn\\Auth\\Capabilities",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "resolved",
                    "type": "Minn\\Auth\\Authenticated|Minn\\Auth\\AuthFailure|null",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "request",
                    "type": "Minn\\Http\\Request",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "authenticator",
                    "type": "Minn\\Auth\\Authenticator",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "resolveAs",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolveAs(Minn\\Auth\\Authenticated $session): void",
                    "doc": "Settles the caller as a session already proven elsewhere: an\nin-process request a plugin makes through rest_do_request() carries\nno nonce, so it runs as whoever the outer request resolved.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "session",
                            "type": "Minn\\Auth\\Authenticated",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "resolveAnonymous",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolveAnonymous(): void",
                    "doc": "Settles the caller as nobody: plugin code (determine_current_user) signed the request out.",
                    "shapes": [],
                    "params": [],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "cookieBound",
                    "static": false,
                    "visibility": "public",
                    "signature": "cookieBound(): bool",
                    "doc": "Whether a sign-in cookie vouches for this caller (or failed to, for\nwant of its nonce): a cookie's nonce vouches for its own user only.",
                    "shapes": [],
                    "params": [],
                    "line": 50,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "recheck",
                    "static": false,
                    "visibility": "public",
                    "signature": "recheck(): void",
                    "doc": "Has the cookie and nonce checked again on the next question: a plugin's nonce lifetime (nonce_life) is heard only once plugins load.",
                    "shapes": [],
                    "params": [],
                    "line": 57,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "resolveInvalidNonce",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolveInvalidNonce(): void",
                    "doc": "Settles the caller as one whose cookie's nonce does not vouch for the user plugin code named.",
                    "shapes": [],
                    "params": [],
                    "line": 63,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "session",
                    "static": false,
                    "visibility": "public",
                    "signature": "session(): ?Minn\\Auth\\Authenticated",
                    "doc": "The session, or null for an anonymous or refused caller.",
                    "shapes": [],
                    "params": [],
                    "line": 69,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "id",
                    "static": false,
                    "visibility": "public",
                    "signature": "id(): int",
                    "doc": "The caller's user id, 0 when anonymous.",
                    "shapes": [],
                    "params": [],
                    "line": 76,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "can",
                    "static": false,
                    "visibility": "public",
                    "signature": "can(string $capability, ?int $postId = NULL): bool",
                    "doc": "Whether the caller holds a capability, on a post when given. With\nplugins loaded the answer is WordPress's: the same mapping, then\nmap_meta_cap and user_has_cap, where role editors and lock plugins\nhave their say.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "editsAnyRestType",
                    "static": false,
                    "visibility": "public",
                    "signature": "editsAnyRestType(): bool",
                    "doc": "Whether the caller can edit posts of some type shown in REST: what\nthe reference asks before showing statuses, block types and the\nactive theme. A plugin's types count once plugins are loaded.",
                    "shapes": [],
                    "params": [],
                    "line": 100,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "capabilities",
                    "static": false,
                    "visibility": "public",
                    "signature": "capabilities(): Minn\\Auth\\Capabilities",
                    "doc": "The capability engine.",
                    "shapes": [],
                    "params": [],
                    "line": 114,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "require",
                    "static": false,
                    "visibility": "public",
                    "signature": "require(string $code = 'rest_not_logged_in', string $message = 'You are not currently logged in.', int $status = 401): Minn\\Auth\\Authenticated",
                    "doc": "The session, or the reference's refusal: a bad nonce is always 403\nrest_cookie_invalid_nonce; no identity is the caller-supplied error.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": "'rest_not_logged_in'",
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": "'You are not currently logged in.'",
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "401",
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "requireFloor",
                    "static": false,
                    "visibility": "public",
                    "signature": "requireFloor(string ...$capabilities): int",
                    "doc": "The floor every Minn Admin route shares: a signed-in caller who can\nedit posts, plus any further capability named, all refused with the\nsame rest_forbidden the reference uses. Returns the caller's id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "capabilities",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 140,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "requireCap",
                    "static": false,
                    "visibility": "public",
                    "signature": "requireCap(string ...$capabilities): void",
                    "doc": "403 rest_forbidden unless the caller holds every capability named.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "capabilities",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "refuse",
                    "static": false,
                    "visibility": "public",
                    "signature": "refuse(string $code, string $message): Minn\\RestError",
                    "doc": "401 for an anonymous caller, 403 for one who is signed in but refused.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 158,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "resolve",
                    "static": false,
                    "visibility": "private",
                    "signature": "resolve(): Minn\\Auth\\Authenticated|Minn\\Auth\\AuthFailure",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 163,
                    "end": 166
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Catalogue",
            "short": "Catalogue",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Catalogue.php",
            "lines": 70,
            "doc": "The route table read from the classes alone: every #[Route] under\nsrc/Minn, as rows, with no request, database, or site behind it. This is\nwhat contracts/api/routes.json is written from, so an agent can read\nwhich routes exist, who may call them, and what they take, without\nbooting the engine. The per-request router builds the same rows for the\nhandlers it actually registered, which is what the live index serves.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Route",
                "Minn\\Http\\RouteRow"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "scan",
                    "static": true,
                    "visibility": "public",
                    "signature": "scan(string $sourceDir): array",
                    "doc": "Every route declared by a class under the source directory, in file\norder, then declaration order.",
                    "shapes": [
                        "@return list<RouteRow>"
                    ],
                    "params": [
                        {
                            "name": "sourceDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "document",
                    "static": true,
                    "visibility": "public",
                    "signature": "document(array $rows, string $engineVersion): array",
                    "doc": "The rows as the JSON catalogue: a version line and one entry per route.",
                    "shapes": [
                        "@param list<RouteRow> $rows",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<RouteRow>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "engineVersion",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "classes",
                    "static": true,
                    "visibility": "private",
                    "signature": "classes(string $sourceDir): array",
                    "doc": "The fully qualified names of the classes under the directory, from\ntheir paths (PSR-4: Minn\\A\\B is A/B.php), sorted.",
                    "shapes": [
                        "@return list<class-string>"
                    ],
                    "params": [
                        {
                            "name": "sourceDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 88
                }
            ]
        },
        {
            "name": "Minn\\Rest\\ClientSchema",
            "short": "ClientSchema",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/ClientSchema.php",
            "lines": 81,
            "doc": "A JSON schema trimmed for a client (probe json-schema): only the keywords\na profile allows, in the order given, at every level a sub-schema sits.\n\nA property's boolean required becomes its object's required list (names\nwhose required is true), kept where the object's own required is not a\nlist, appended last otherwise, even where the profile drops required\nitself; an object's own list wins. A boolean required is always dropped.\nSub-schemas are trimmed where they are objects: a keyword's value, a\nlist's members, a map's entries; anything else stays as given.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Rest\\Schema"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DRAFT_04_FIRST",
                    "value": "array (   0 => '$schema',   1 => 'id',   2 => '$ref', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "DRAFT_04_LAST",
                    "value": "array (   0 => 'required',   1 => 'allOf',   2 => 'not',   3 => 'definitions',   4 => 'dependencies',   5 => 'additionalItems', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "MAPS",
                    "value": "array (   0 => 'properties',   1 => 'patternProperties',   2 => 'definitions',   3 => 'dependencies', )",
                    "doc": "Keywords whose value maps names to sub-schemas.",
                    "visibility": "private"
                },
                {
                    "name": "SCHEMAS",
                    "value": "array (   0 => 'items',   1 => 'additionalProperties',   2 => 'additionalItems',   3 => 'not',   4 => 'anyOf',   5 => 'oneOf',   6 => 'allOf', )",
                    "doc": "Keywords whose value is a sub-schema or a list of them.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "keywords",
                    "static": true,
                    "visibility": "public",
                    "signature": "keywords(string $profile): array",
                    "doc": "The keywords a profile keeps: draft-04's whole set, the REST API's for\nany other profile.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "profile",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "trim",
                    "static": true,
                    "visibility": "public",
                    "signature": "trim(array $schema, array $allowed): array",
                    "doc": "A schema with only the allowed keywords, keyed by keyword (the values\ndo not matter), trimmed all the way down.",
                    "shapes": [
                        "@param array<array-key, mixed> $schema",
                        "@param array<array-key, mixed> $allowed",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "position",
                    "static": true,
                    "visibility": "private",
                    "signature": "position(mixed $value, array $allowed): mixed",
                    "doc": "A sub-schema's place: an object trimmed, a list's object members trimmed, anything else as given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "member",
                    "static": true,
                    "visibility": "private",
                    "signature": "member(mixed $value, array $allowed): mixed",
                    "doc": "A list member or map entry: trimmed when it is an object schema.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "requiredNames",
                    "static": true,
                    "visibility": "private",
                    "signature": "requiredNames(array $schema): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string> the properties whose required is true"
                    ],
                    "params": [
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 97
                }
            ]
        },
        {
            "name": "Minn\\Rest\\CommentListArgs",
            "short": "CommentListArgs",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/CommentListArgs.php",
            "lines": 34,
            "doc": "The WP_Comment_Query arguments a comment list request makes, as the\nreference makes them before rest_comment_query (probe\nrest-comment-lists): each declared parameter the request carries under\nits query name, an empty email and search when none is given, the\norderby name mapped to the query's, the found rows counted, the posts\nloaded, the date bounds as one clause, the offset the page makes when\nnone is given, and ids alone for a HEAD request.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\CommentsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAPPINGS",
                    "value": "array (   'author' => 'author__in',   'author_email' => 'author_email',   'author_exclude' => 'author__not_in',   'exclude' => 'comment__not_in',   'include' => 'comment__in',   'offset' => 'offset',   'order' => 'order',   'parent' => 'parent__in',   'parent_exclude' => 'parent__not_in',   'per_page' => 'number',   'post' => 'post__in',   'search' => 'search',   'status' => 'status',   'type' => 'type', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ORDERBY",
                    "value": "array (   'date' => 'comment_date',   'date_gmt' => 'comment_date_gmt',   'id' => 'comment_ID',   'include' => 'comment__in',   'post' => 'comment_post_ID',   'parent' => 'comment_parent',   'type' => 'comment_type', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(WP_REST_Request $wp, array $registered, string $method): array",
                    "doc": "The arguments before plugins see them: a parameter maps when the\ncollection (as rest_comment_collection_params left it) still has it.",
                    "shapes": [
                        "@param array<string, mixed> $registered",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "wp",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "method",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 48
                }
            ]
        },
        {
            "name": "Minn\\Rest\\CommentObject",
            "short": "CommentObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/CommentObject.php",
            "lines": 87,
            "doc": "The wp/v2 comment object; edit context adds the moderation-desk fields.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\CommentRecord",
                "Minn\\Content\\Comments",
                "Minn\\Content\\Posts",
                "Minn\\Front\\Permalinks",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\UserObject"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Comments $comments, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "comments",
                        "type": "Minn\\Content\\Comments",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 22
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "comments",
                    "type": "Minn\\Content\\Comments",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "build",
                    "static": false,
                    "visibility": "public",
                    "signature": "build(Minn\\Content\\CommentRecord $c, Minn\\Rest\\Context $context): array",
                    "doc": "A comment in the context asked for, through rest_prepare_comment when a plugin hooks it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "c",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": false,
                    "visibility": "public",
                    "signature": "url(): Minn\\Rest\\RestUrl",
                    "doc": "The REST URL builder.",
                    "shapes": [],
                    "params": [],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "buildFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "buildFields(Minn\\Content\\CommentRecord $c, Minn\\Rest\\Context $context): array",
                    "doc": "The wp/v2 comment shape, with the edit-context fields when asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "c",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 98
                }
            ]
        },
        {
            "name": "Minn\\Rest\\CommentsController",
            "short": "CommentsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/CommentsController.php",
            "lines": 294,
            "doc": "wp/v2/comments: the status tabs with pagination headers, single,\nsigned-in replies, moderation updates, trash, and force delete.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\CommentRecord",
                "Minn\\Content\\Comments",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\CommentListArgs",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Support\\Email"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Comments $comments, Minn\\Content\\Posts $posts, Minn\\Rest\\CommentObject $object, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "comments",
                        "type": "Minn\\Content\\Comments",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\CommentObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 29,
                "end": 35
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "comments",
                    "type": "Minn\\Content\\Comments",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\CommentObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/comments (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The comments list as the reference serves it: the request's\nWP_Comment_Query through rest_comment_query, its totals (counted again\nwhen a page comes back empty), and the comments the caller may read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 64
                },
                {
                    "routes": [
                        "GET /wp/v2/comments/{id:[\\d]+} (public; comment {id} must exist)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One comment, if the caller may read it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 103
                },
                {
                    "routes": [
                        "POST /wp/v2/comments (signed in)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "A signed-in reply; the author fields come from the user.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 147
                },
                {
                    "routes": [
                        "POST /wp/v2/comments/{id:[\\d]+} (cap moderate_comments; comment {id} must exist)",
                        "PUT /wp/v2/comments/{id:[\\d]+} (cap moderate_comments; comment {id} must exist)",
                        "PATCH /wp/v2/comments/{id:[\\d]+} (cap moderate_comments; comment {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Status flips and content or author edits, for moderators.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 177
                },
                {
                    "routes": [
                        "DELETE /wp/v2/comments/{id:[\\d]+} (cap moderate_comments; comment {id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Trash remembers where the comment came from; force removes it outright.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 181,
                    "end": 209
                },
                {
                    "routes": [],
                    "name": "totals",
                    "static": true,
                    "visibility": "private",
                    "signature": "totals(WP_Comment_Query $query, array $args, int $perPage): array",
                    "doc": "The total and the page count: the query's own, or, when it found\nnothing (a page past the end), a count without the page.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array{0: int, 1: int}"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Comment_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perPage",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "events",
                    "static": false,
                    "visibility": "private",
                    "signature": "events(): Minn\\Runtime\\CommentEvents",
                    "doc": "Tells plugins about the writes, through the runtime's comment functions.",
                    "shapes": [],
                    "params": [],
                    "line": 150,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "allowed",
                    "static": false,
                    "visibility": "private",
                    "signature": "allowed(WP_REST_Request $wp, Minn\\Rest\\Context $context, string $email): void",
                    "doc": "What this caller may ask the list for: the edit context and other\nstatuses are for moderators and editors; comments without a post\nbelong to moderators, an unreadable post's to those who may read it\n(or who give its password); type, author, author_exclude and\nauthor_email to anyone who can edit posts (the email judged as sent,\nbefore sanitizing empties a bad one).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "wp",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 219,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "readablePost",
                    "static": false,
                    "visibility": "private",
                    "signature": "readablePost(Minn\\Content\\PostRecord $post, string $password): bool",
                    "doc": "A post whose comments this caller may read: a protected one only with\nits password or for someone who may edit it, as the reference reads\nit; otherwise one it may read, or any published one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 260,
                    "end": 266
                },
                {
                    "routes": [],
                    "name": "readable",
                    "static": false,
                    "visibility": "private",
                    "signature": "readable(WP_Comment $comment, string $password): bool",
                    "doc": "A listed comment this caller may read: a moderator any, its author their own, anyone an approved one on a post they may read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "comment",
                            "type": "WP_Comment",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 269,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "plainComment",
                    "static": false,
                    "visibility": "private",
                    "signature": "plainComment(int $id): Minn\\Content\\CommentRecord",
                    "doc": "A comment row of the plain kind, or the reference's invalid-id error.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 279,
                    "end": 286
                },
                {
                    "routes": [],
                    "name": "prepared",
                    "static": false,
                    "visibility": "private",
                    "signature": "prepared(array $body, Minn\\Http\\Request $request): array",
                    "doc": "The fields a request sends, as the reference's controller prepares\nthem for the runtime: the content, the author fields, the address (a\nmoderator may name one) and the browser.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 301,
                    "end": 319
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Context",
            "short": "Context",
            "namespace": "Minn\\Rest",
            "kind": "enum",
            "file": "public/minn/src/Minn/Rest/Context.php",
            "lines": 18,
            "doc": "The view a REST caller asked for. View is the public shape, edit adds the\nraw halves and the caller's own action links, embed is the reduced shape\na linked resource carries when it rides inside another response.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Request"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\MenuItemObject",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetObject",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": null,
            "cases": [
                {
                    "name": "View",
                    "value": "view",
                    "doc": ""
                },
                {
                    "name": "Edit",
                    "value": "edit",
                    "doc": ""
                },
                {
                    "name": "Embed",
                    "value": "embed",
                    "doc": ""
                }
            ],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(Minn\\Http\\Request $request): self",
                    "doc": "The context a request names, view when it names none or names one the route does not serve.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "isEdit",
                    "static": false,
                    "visibility": "public",
                    "signature": "isEdit(): bool",
                    "doc": "Whether this is the edit context.",
                    "shapes": [],
                    "params": [],
                    "line": 27,
                    "end": 30
                }
            ]
        },
        {
            "name": "Minn\\Rest\\DeclaredPostsController",
            "short": "DeclaredPostsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/DeclaredPostsController.php",
            "lines": 56,
            "doc": "wp/v2/{rest_base} for extra post types declared by an active extension.\nRegistered last so core collections (users, comments, menus, ...) match\nfirst; an unknown base is declined, so a plugin's own route under wp/v2\n(answered by the runtime after the engine's routes) is not shadowed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\RouteMiss",
                "Minn\\Rest\\ExistingPost",
                "Minn\\Rest\\PostCollectionParams",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Types"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Types $types, Minn\\Rest\\PostsController $reads, Minn\\Rest\\PostsWriteController $writes)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "reads",
                        "type": "Minn\\Rest\\PostsController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writes",
                        "type": "Minn\\Rest\\PostsWriteController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "reads",
                    "type": "Minn\\Rest\\PostsController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writes",
                    "type": "Minn\\Rest\\PostsWriteController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/{base:[a-z0-9_-]+} (declared type {base})"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "A declared type's list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [
                        "GET /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (declared type {base})"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "A declared type's single post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:[a-z0-9_-]+} (declared type {base})"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "Creates a post of a declared type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 50
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (declared type {base})",
                        "PUT /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (declared type {base})",
                        "PATCH /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (declared type {base})"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "Updates a post of a declared type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 59
                },
                {
                    "routes": [
                        "DELETE /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (declared type {base})"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "Trashes or deletes a post of a declared type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "slug",
                    "static": false,
                    "visibility": "private",
                    "signature": "slug(string $base): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 75
                }
            ]
        },
        {
            "name": "Minn\\Rest\\DeclaredTermsController",
            "short": "DeclaredTermsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/DeclaredTermsController.php",
            "lines": 43,
            "doc": "wp/v2/{rest_base} for the taxonomies plugin code registers to show in\nREST (probe rest-plugin-types), answered as the core taxonomies are.\nRegistered after the declared post types; a base no such taxonomy names\ndeclines, so a plugin's own route under wp/v2 is not shadowed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Rest\\TermCollectionParams",
                "Minn\\Rest\\TermsController"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\TermsController $terms)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "terms",
                        "type": "Minn\\Rest\\TermsController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "terms",
                    "type": "Minn\\Rest\\TermsController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/{base:[a-z0-9_-]+} (registered taxonomy {base})"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "A registered taxonomy's terms.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [
                        "GET /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (registered taxonomy {base})"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "One term of a registered taxonomy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:[a-z0-9_-]+} (registered taxonomy {base})"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "Creates a term in a registered taxonomy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (registered taxonomy {base})",
                        "PUT /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (registered taxonomy {base})",
                        "PATCH /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (registered taxonomy {base})"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "Updates a term of a registered taxonomy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 54
                },
                {
                    "routes": [
                        "DELETE /wp/v2/{base:[a-z0-9_-]+}/{id:[\\d]+} (registered taxonomy {base})"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "Deletes a term of a registered taxonomy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 61
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Embed",
            "short": "Embed",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Embed.php",
            "lines": 219,
            "doc": "The _embed decoration and the embed context. Every embeddable link in an\nobject's _links is answered in-process as the same caller with\ncontext=embed and placed under _embedded[rel], an error as the error\nitself; a rel whose every embed came back empty is left out, while an\nempty list beside a full one stays (wp:term keeps its empty tags list\nnext to the categories).\nLists have _fields applied per item before the links are read, so a\n_fields value without _links embeds nothing there; a single object embeds\nfirst and is filtered afterwards. The embed context is the view object\ncut to the reference's key set for that kind of item.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Method",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Router",
                "Minn\\Json",
                "Minn\\RestError",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Taxonomies",
                "Minn\\Rest\\Types",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\RegisteredFields"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Router $router, Minn\\Rest\\Types $types, Minn\\Rest\\Taxonomies $taxonomies)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "router",
                        "type": "Minn\\Http\\Router",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "taxonomies",
                        "type": "Minn\\Rest\\Taxonomies",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 40,
                "end": 45
            },
            "cases": [],
            "constants": [
                {
                    "name": "KEYS",
                    "value": "array (   'post' =>    array (     0 => 'id',     1 => 'date',     2 => 'slug',     3 => 'type',     4 => 'link',     5 => 'title',     6 => 'excerpt',     7 => 'author',     8 => 'featured_media',     9 => '_links',   ),   'media' =>    array (     0 => 'id',     1 => 'date',     2 => 'slug',     3 => 'type',     4 => 'link',     5 => 'title',     6 => 'author',     7 => 'featured_media',     8 => 'caption',     9 => 'alt_text',     10 => 'media_type',     11 => 'mime_type',     12 => 'media_details',     13 => 'source_url',     14 => '_links',   ),   'user' =>    array (     0 => 'id',     1 => 'name',     2 => 'url',     3 => 'description',     4 => 'link',     5 => 'slug',     6 => 'avatar_urls',     7 => '_links',   ),   'term' =>    array (     0 => 'id',     1 => 'link',     2 => 'name',     3 => 'slug',     4 => 'taxonomy',     5 => '_links',   ),   'comment' =>    array (     0 => 'id',     1 => 'parent',     2 => 'author',     3 => 'author_name',     4 => 'author_url',     5 => 'date',     6 => 'content',     7 => 'link',     8 => 'type',     9 => 'author_avatar_urls',     10 => '_links',   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "cache",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "router",
                    "type": "Minn\\Http\\Router",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "taxonomies",
                    "type": "Minn\\Rest\\Taxonomies",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "requested",
                    "static": true,
                    "visibility": "public",
                    "signature": "requested(array $query): ?array",
                    "doc": "Null when _embed is absent; [] for every rel; otherwise the rels asked for. @return ?list<string>",
                    "shapes": [
                        "@return ?list<string>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "decorate",
                    "static": false,
                    "visibility": "public",
                    "signature": "decorate(Minn\\Http\\Request $request, Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "Decorates a finished response: the embed context, then _embedded, then the deferred _fields.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "embedded",
                    "static": false,
                    "visibility": "public",
                    "signature": "embedded(Minn\\Http\\Request $request, array $item, array $rels): array",
                    "doc": "A response's data with its embeddable links answered (the runtime's\nWP_REST_Server::embed_links): every rel when none is named.",
                    "shapes": [
                        "@param array<string, mixed> $item @param list<string> $rels",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $rels"
                        },
                        {
                            "name": "rels",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "shape",
                    "static": true,
                    "visibility": "public",
                    "signature": "shape(string $type, array $item): array",
                    "doc": "An item cut to the embed shape of its object type (a post type, a taxonomy, attachment, user or comment); any other kept whole. @param array<string, mixed> $item @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $item @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 222,
                    "end": 232
                },
                {
                    "routes": [],
                    "name": "decorateItem",
                    "static": false,
                    "visibility": "private",
                    "signature": "decorateItem(Minn\\Http\\Request $request, array $item, ?array $rels, ?string $kind): array",
                    "doc": "",
                    "shapes": [
                        "@param ?list<string> $rels"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rels",
                            "type": "?array",
                            "shape": "?list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "answer",
                    "static": false,
                    "visibility": "private",
                    "signature": "answer(Minn\\Http\\Request $request, string $href): ?array",
                    "doc": "The linked object in embed context; an error answer as the error itself (probe rest-server-methods); null when nothing came back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "href",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 174
                },
                {
                    "routes": [],
                    "name": "target",
                    "static": true,
                    "visibility": "private",
                    "signature": "target(string $href): array",
                    "doc": "A REST href in either URL form, as the route path and its query. @return array{0: string, 1: array<string, string>}",
                    "shapes": [
                        "@return array{0: string, 1: array<string, string>}"
                    ],
                    "params": [
                        {
                            "name": "href",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "kind",
                    "static": false,
                    "visibility": "private",
                    "signature": "kind(string $path): ?string",
                    "doc": "Which key set a route's objects take in embed context; null for routes without one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 209
                },
                {
                    "routes": [],
                    "name": "taxonomyBase",
                    "static": false,
                    "visibility": "private",
                    "signature": "taxonomyBase(string $base): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 211,
                    "end": 219
                },
                {
                    "routes": [],
                    "name": "context",
                    "static": true,
                    "visibility": "private",
                    "signature": "context(string $kind, array $object): array",
                    "doc": "The embed shape, with the fields plugin code registered for the item's type to show in embed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "object",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 235,
                    "end": 244
                }
            ]
        },
        {
            "name": "Minn\\Rest\\EngineRoutes",
            "short": "EngineRoutes",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/EngineRoutes.php",
            "lines": 66,
            "doc": "The engine's own REST routes in the reference's regex form, for the\nindex and for the runtime's server, whose route table plugin code reads\nto learn what the site answers (a missing /wp/v2/comments there reads as\n\"comments are off\").",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Router"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\RouteCatalogue",
                "Minn\\Rest\\RuntimeEnvelope"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "map",
                    "static": true,
                    "visibility": "public",
                    "signature": "map(Minn\\Http\\Router $router, array $declaredBases = array ( )): array",
                    "doc": "The router's routes as route => methods, the way the index lists them.",
                    "shapes": [
                        "@param list<string> $declaredBases the rest_base of every declared type",
                        "@return array<string, list<string>> route => methods"
                    ],
                    "params": [
                        {
                            "name": "router",
                            "type": "Minn\\Http\\Router",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declaredBases",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array ( )",
                            "doc": "the rest_base of every declared type"
                        }
                    ],
                    "line": 23,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "forms",
                    "static": true,
                    "visibility": "public",
                    "signature": "forms(string $pattern, array $declaredBases = array ( )): array",
                    "doc": "A route attribute pattern as the reference writes routes: `{id:\\d+}`\nbecomes `(?P<id>\\d+)`, a bare capture matches one segment, a `{rest*}`\ncapture the remainder, and a literal constraint (`{base:posts}`, or\nthe alternation `{base:posts|pages}`) expands to one route per\nliteral. The declared-type routes are written once as a `{base:[...]}`\ncatch-all; they list per declared type under its rest_base (as the\nreference lists a registered type) and not at all when no type is\ndeclared, so nothing listed answers no-route.",
                    "shapes": [
                        "@param list<string> $declaredBases",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "pattern",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "declaredBases",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 79
                }
            ]
        },
        {
            "name": "Minn\\Rest\\ExistingPost",
            "short": "ExistingPost",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/ExistingPost.php",
            "lines": 10,
            "doc": "A post created with an id names one that exists: refused with\nrest_post_exists before the caller is judged, even signed out (probe\npatch-security). An id of 0 passes here and is refused later, as an\ninvalid post id.",
            "implements": [
                "Minn\\Http\\Refusal"
            ],
            "extends": null,
            "uses": [
                "Minn\\Http\\Refusal",
                "Minn\\Http\\Request",
                "Minn\\RestError"
            ],
            "usedBy": [
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\PostsWriteController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "refuse",
                    "static": true,
                    "visibility": "public",
                    "signature": "refuse(Minn\\Http\\Request $request): void",
                    "doc": "Throws rest_post_exists for a non-empty id in the body or the query.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 25
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Fields",
            "short": "Fields",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/Fields.php",
            "lines": 106,
            "doc": "The _fields response filter. Dot paths descend (\"title.rendered\"); the\nobject's own key order is kept. Applied per item on list responses and to\nthe whole payload otherwise, which is why _fields on the associative\ntypes response strips every key and yields [] over HTTP, a reference\nquirk the engine reproduces by construction.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\SessionsController",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": {
                "signature": "__construct(array $paths, bool $deferred = false)",
                "doc": "embedded first and filtered by Embed afterwards",
                "shapes": [
                    "@param list<string> $paths"
                ],
                "params": [
                    {
                        "name": "paths",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "deferred",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": "true when _embed rides along: a single object is"
                    }
                ],
                "visibility": "private",
                "line": 21,
                "end": 23
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "paths",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "deferred",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fromQuery",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromQuery(array $query): ?self",
                    "doc": "The _fields selection a query carries, or null for everything.",
                    "shapes": [
                        "@param array<string, mixed> $query"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "withLinksForEmbedded",
                    "static": false,
                    "visibility": "public",
                    "signature": "withLinksForEmbedded(): self",
                    "doc": "The same paths plus _links whenever _embedded is among them: the reference's single-object rule under _embed.",
                    "shapes": [],
                    "params": [],
                    "line": 44,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "wants",
                    "static": false,
                    "visibility": "public",
                    "signature": "wants(string $field): bool",
                    "doc": "Whether a top-level field is among the selection: named whole, below\none of its paths (title.rendered), or above one (a path into it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "apply",
                    "static": false,
                    "visibility": "public",
                    "signature": "apply(array $object): array",
                    "doc": "The object with only the selected fields.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "object",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "select",
                    "static": true,
                    "visibility": "public",
                    "signature": "select(array $available, array $requested): array",
                    "doc": "The fields a response keeps when a caller names some: known fields as\ngiven, dotted paths whose root is known, and `id` whenever it exists.",
                    "shapes": [
                        "@param list<string> $available",
                        "@param list<string> $requested the parsed `_fields` list",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "available",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "requested",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the parsed `_fields` list"
                        }
                    ],
                    "line": 104,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "filter",
                    "static": true,
                    "visibility": "private",
                    "signature": "filter(array $object, array $paths): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "object",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paths",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 94
                }
            ]
        },
        {
            "name": "Minn\\Rest\\GlobalStylesController",
            "short": "GlobalStylesController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/GlobalStylesController.php",
            "lines": 159,
            "doc": "wp/v2/global-styles: the site editor's saved styles (one post per\ntheme, read and written by id, with its revisions) and the active\ntheme's own styles and variations. There is no collection, no create\nand no delete; the post is made on first use, as on the reference.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Revisions",
                "Minn\\Html",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\Reply",
                "Minn\\Runtime\\PostSave",
                "Minn\\Theme\\ThemeStyles",
                "Minn\\Theme\\UserStyles"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Theme\\UserStyles $styles, Minn\\Theme\\ThemeStyles $theme, Minn\\Rest\\GlobalStylesObject $object, Minn\\Content\\Revisions $revisions, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "styles",
                        "type": "Minn\\Theme\\UserStyles",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "theme",
                        "type": "Minn\\Theme\\ThemeStyles",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\GlobalStylesObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "revisions",
                        "type": "Minn\\Content\\Revisions",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 33,
                "end": 40
            },
            "cases": [],
            "constants": [
                {
                    "name": "CANNOT_EDIT",
                    "value": "'Sorry, you are not allowed to edit this global style.'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "CANNOT_READ_REVISIONS",
                    "value": "'Sorry, you are not allowed to view revisions of this post.'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "styles",
                    "type": "Minn\\Theme\\UserStyles",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "theme",
                    "type": "Minn\\Theme\\ThemeStyles",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\GlobalStylesObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "revisions",
                    "type": "Minn\\Content\\Revisions",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/global-styles/{id:[\\/\\d+]+} (public; global styles {id} must exist)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "The saved styles by id: anyone who edits posts may read them, editing context needs the theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 54
                },
                {
                    "routes": [
                        "POST /wp/v2/global-styles/{id:[\\/\\d+]+} (cap edit_theme_options; global styles {id} must exist)",
                        "PUT /wp/v2/global-styles/{id:[\\/\\d+]+} (cap edit_theme_options; global styles {id} must exist)",
                        "PATCH /wp/v2/global-styles/{id:[\\/\\d+]+} (cap edit_theme_options; global styles {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Replaces the title, settings, or styles the body names; what it leaves out stays.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 72
                },
                {
                    "routes": [
                        "GET /wp/v2/global-styles/themes/{stylesheet:[\\/\\s%\\w\\.\\(\\)\\[\\]\\@_\\-]+}/variations (cap edit_posts)"
                    ],
                    "name": "variations",
                    "static": false,
                    "visibility": "public",
                    "signature": "variations(Minn\\Http\\Request $request, string $stylesheet): Minn\\Http\\Response",
                    "doc": "The style variations the active theme ships; listed ahead of the theme's own route, whose pattern would take this path too.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 98
                },
                {
                    "routes": [
                        "GET /wp/v2/global-styles/themes/{stylesheet:[^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?} (cap edit_posts)"
                    ],
                    "name": "theme",
                    "static": false,
                    "visibility": "public",
                    "signature": "theme(Minn\\Http\\Request $request, string $stylesheet): Minn\\Http\\Response",
                    "doc": "The active theme's settings and styles, the engine's defaults underneath.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 106
                },
                {
                    "routes": [
                        "GET /wp/v2/global-styles/{parent:[\\d]+}/revisions (cap edit_theme_options; global styles parent {parent} must exist)"
                    ],
                    "name": "revisions",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisions(Minn\\Http\\Request $request, string $parent): Minn\\Http\\Response",
                    "doc": "The revisions of the saved styles, newest first; all of them unless per_page pages them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 122
                },
                {
                    "routes": [
                        "GET /wp/v2/global-styles/{parent:[\\d]+}/revisions/{id:[\\d]+} (cap edit_theme_options; global styles parent {parent} must exist)"
                    ],
                    "name": "revision",
                    "static": false,
                    "visibility": "public",
                    "signature": "revision(Minn\\Http\\Request $request, string $parent, string $id): Minn\\Http\\Response",
                    "doc": "One revision of the saved styles.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "refuseIllegalCss",
                    "static": true,
                    "visibility": "private",
                    "signature": "refuseIllegalCss(mixed $css): void",
                    "doc": "Custom CSS that would close its style tag is refused, for every user\n(probe global-styles-unfiltered): \"</style\" followed by white space, a\nslash or \">\", in any case, quoted as written; or \"</style\" at its end.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "css",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "post",
                    "static": false,
                    "visibility": "private",
                    "signature": "post(int $id): Minn\\Content\\PostRecord",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "requireTheme",
                    "static": false,
                    "visibility": "private",
                    "signature": "requireTheme(string $stylesheet): void",
                    "doc": "The theme routes answer only for the active stylesheet, and only to those who edit posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "requireParent",
                    "static": false,
                    "visibility": "private",
                    "signature": "requireParent(int $parentId): int",
                    "doc": "Revisions are for those who edit the theme, of a parent that is a global-styles post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 150,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "title",
                    "static": true,
                    "visibility": "private",
                    "signature": "title(mixed $title): ?string",
                    "doc": "A title arrives as a string or as {raw}; anything else is ignored.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "title",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "node",
                    "static": true,
                    "visibility": "private",
                    "signature": "node(array $body, string $name): ?array",
                    "doc": "settings and styles are objects when present; a scalar is the reference's type error, null is ignored.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 185
                }
            ]
        },
        {
            "name": "Minn\\Rest\\GlobalStylesObject",
            "short": "GlobalStylesObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/GlobalStylesObject.php",
            "lines": 87,
            "doc": "The wp/v2/global-styles item, theme, and revision shapes.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Revisions",
                "Minn\\Content\\Texturize",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RestUrl",
                "Minn\\Theme\\StyleSettings",
                "Minn\\Theme\\UserStyles"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\GlobalStylesController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Revisions $revisions, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "revisions",
                        "type": "Minn\\Content\\Revisions",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 17,
                "end": 22
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "revisions",
                    "type": "Minn\\Content\\Revisions",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "public",
                    "signature": "item(Minn\\Content\\PostRecord $post, Minn\\Rest\\Context $context): array",
                    "doc": "The saved styles: the title both ways, settings by origin, styles\nwith their presets resolved, the links; in editing context the\napp's lock fields too, which a global-styles post never carries.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "theme",
                    "static": false,
                    "visibility": "public",
                    "signature": "theme(array $settings, array $styles, string $stylesheet): array",
                    "doc": "The active theme's own styles as the themes/{stylesheet} route answers them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "revision",
                    "static": false,
                    "visibility": "public",
                    "signature": "revision(Minn\\Content\\PostRecord $revision): array",
                    "doc": "One revision row: both nodes when the body holds anything at all,\nneither when it is blank, then the row's own facts; no links.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "revision",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "private",
                    "signature": "links(Minn\\Content\\PostRecord $post): array",
                    "doc": "Writing methods appear for a theme editor; the CSS action for whoever may write CSS.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "node",
                    "static": true,
                    "visibility": "private",
                    "signature": "node(array $node): stdClass|array",
                    "doc": "An empty node is an object on the wire, never a list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 100
                }
            ]
        },
        {
            "name": "Minn\\Rest\\IndexController",
            "short": "IndexController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/IndexController.php",
            "lines": 56,
            "doc": "The API index at /wp-json/: the site facts monitors read (name, url,\nhome, namespaces) and the routes this engine serves, described from its\nown router rather than the reference's full schema; and the index of one\nnamespace at /wp-json/{namespace}, the same routes narrowed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Authenticator",
                "Minn\\Content\\Site",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\RouteMiss",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RouteCatalogue"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url, Minn\\Rest\\RouteCatalogue $catalogue)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "catalogue",
                        "type": "Minn\\Rest\\RouteCatalogue",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "catalogue",
                    "type": "Minn\\Rest\\RouteCatalogue",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET / (public)"
                    ],
                    "name": "index",
                    "static": false,
                    "visibility": "public",
                    "signature": "index(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The REST index: namespaces, routes, and the site's description.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 57
                },
                {
                    "routes": [
                        "GET /{namespace:[a-z0-9-]+/(?:v\\d+|\\d+\\.\\d+)} (public)"
                    ],
                    "name": "namespaceIndex",
                    "static": false,
                    "visibility": "public",
                    "signature": "namespaceIndex(Minn\\Http\\Request $request, string $namespace): Minn\\Http\\Response",
                    "doc": "One namespace's index, as the reference answers /wp-json/wp/v2 (or oembed/1.0): the\nnamespace, its routes (the namespace root among them), and the link\nup to the root index. A namespace the engine does not serve is left\nto the runtime, whose plugins may own it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 78
                }
            ]
        },
        {
            "name": "Minn\\Rest\\InstalledThemesController",
            "short": "InstalledThemesController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/InstalledThemesController.php",
            "lines": 141,
            "doc": "wp/v2/themes as the reference answers it (probe rest-themes): the\ninstalled themes, or only those with a status (active, inactive), each\nwith its style.css headers raw and rendered, where it lives, and whether\nit is a block theme. The active theme also carries its supports as the\neditor reads them, the template types and part areas it may define, and\na link to the theme export; any theme with user styles links to them. Anyone who can edit\na type shown in REST may read the active theme; listing the others takes\nswitch_themes. Each theme goes through rest_prepare_theme. Served with\nplugins loaded, since a theme's supports come from its own code.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\ThemeSupports",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 34,
                "end": 36
            },
            "cases": [],
            "constants": [
                {
                    "name": "STATUS",
                    "value": "array (   'status' =>    array (     'type' => 'array',     'items' =>      array (       'type' => 'string',       'enum' =>        array (         0 => 'active',         1 => 'inactive',       ),     ),     'description' => 'Limit result set to themes assigned one or more statuses.',     'required' => false,   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/themes (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The installed themes the caller may see.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 56
                },
                {
                    "routes": [
                        "GET /wp/v2/themes/{stylesheet:[^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?} (public)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $stylesheet): Minn\\Http\\Response",
                    "doc": "One theme by its stylesheet.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "fields",
                    "static": false,
                    "visibility": "public",
                    "signature": "fields(WP_Theme $theme, WP_REST_Request $request): array",
                    "doc": "A theme in the wp/v2 shape, its links included, before\nrest_prepare_theme (the runtime's WP_REST_Themes_Controller shapes\nthrough here); the request is what the supports' callbacks are handed.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "theme",
                            "type": "WP_Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "private",
                    "signature": "item(WP_Theme $theme): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "theme",
                            "type": "WP_Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "private",
                    "signature": "links(WP_Theme $theme): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, list<array<string, mixed>>>"
                    ],
                    "params": [
                        {
                            "name": "theme",
                            "type": "WP_Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "viewsThemes",
                    "static": false,
                    "visibility": "private",
                    "signature": "viewsThemes(): bool",
                    "doc": "May list the installed themes.",
                    "shapes": [],
                    "params": [],
                    "line": 147,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "viewsActive",
                    "static": false,
                    "visibility": "private",
                    "signature": "viewsActive(): bool",
                    "doc": "May read the active theme: anyone who lists themes, or edits a type shown in REST.",
                    "shapes": [],
                    "params": [],
                    "line": 153,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": true,
                    "visibility": "private",
                    "signature": "status(string $stylesheet): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 158,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "requireRuntime",
                    "static": true,
                    "visibility": "private",
                    "signature": "requireRuntime(): void",
                    "doc": "A theme's supports come from its own code: without the runtime there is no answer to give.",
                    "shapes": [],
                    "params": [],
                    "line": 164,
                    "end": 169
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Links",
            "short": "Links",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Links.php",
            "lines": 83,
            "doc": "Response link relations compacted through CURIEs: a rel that matches a CURIE's template becomes `name:suffix`, and the used CURIEs ride along.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "item",
                    "static": true,
                    "visibility": "public",
                    "signature": "item(string $rel, string $href, array $attributes): array",
                    "doc": "One link as a response serves it: its attributes, then its href; a\nself link's target hints after the href, where the reference adds them.",
                    "shapes": [
                        "@param array<string, mixed> $attributes",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "rel",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "href",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "expanded",
                    "static": true,
                    "visibility": "public",
                    "signature": "expanded(array $links): array",
                    "doc": "An answer's compact links as the reference keeps them on a response:\neach link under its full relation (a curie's short name expanded,\nthe curies themselves dropped), with its href and its other\nattributes.",
                    "shapes": [
                        "@param array<string, mixed> $links",
                        "@return list<array{0: string, 1: string, 2: array<string, mixed>}>"
                    ],
                    "params": [
                        {
                            "name": "links",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "compact",
                    "static": true,
                    "visibility": "public",
                    "signature": "compact(array $links, array $curies): array",
                    "doc": "Links with their curies applied, as the reference compacts them.",
                    "shapes": [
                        "@param array<string, mixed> $links rel => items",
                        "@param list<array{name: string, href: string, templated?: bool}> $curies",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "links",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "rel => items"
                        },
                        {
                            "name": "curies",
                            "type": "array",
                            "shape": "list<array{name: string, href: string, templated?: bool}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 89
                }
            ]
        },
        {
            "name": "Minn\\Rest\\LiveSettings",
            "short": "LiveSettings",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/LiveSettings.php",
            "lines": 77,
            "doc": "wp/v2/settings with plugins loaded, served from the registered settings\nas the reference serves it (probe rest-settings): every setting shown in\nREST, core's and a plugin's alike, under its REST name. A read asks\nrest_pre_get_setting first, then get_option with the schema's default,\nand a value its schema refuses reads as null. A write takes the body's\nvalues its schema accepts (null always), offers each to\nrest_pre_update_setting, deletes the option for null (refused when what\nis stored does not fit the schema, since null could not restore it) and\notherwise hands it to update_option.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\RestError",
                "Minn\\Rest\\Schema",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\SettingsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Schema $schema)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "schema",
                        "type": "Minn\\Rest\\Schema",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "schema",
                    "type": "Minn\\Rest\\Schema",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "shown",
                    "static": false,
                    "visibility": "public",
                    "signature": "shown(): array",
                    "doc": "The settings shown in REST, by REST name, with the arguments the filters are handed.",
                    "shapes": [
                        "@return array<string, array{name: string, schema: array<string, mixed>, option_name: string}>"
                    ],
                    "params": [],
                    "line": 32,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "payload",
                    "static": false,
                    "visibility": "public",
                    "signature": "payload(): array",
                    "doc": "Every shown setting's value. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 49,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "store",
                    "static": false,
                    "visibility": "public",
                    "signature": "store(array $body): void",
                    "doc": "Writes the shown settings a body names, after refusing the values their schemas refuse.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "refuseInvalid",
                    "static": false,
                    "visibility": "private",
                    "signature": "refuseInvalid(array $shown, array $body): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, array{schema: array<string, mixed>}> $shown"
                    ],
                    "params": [
                        {
                            "name": "shown",
                            "type": "array",
                            "shape": "array<string, array{schema: array<string, mixed>}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 96
                }
            ]
        },
        {
            "name": "Minn\\Rest\\MediaController",
            "short": "MediaController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/MediaController.php",
            "lines": 294,
            "doc": "wp/v2/media: list, single, upload on both transports (multipart field\n\"file\", or a raw body with Content-Disposition), field edits, and force\ndelete with the files.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\Media\\Upload",
                "Minn\\Media\\Writer",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostCollectionParams",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Media\\Writer $library, Minn\\Rest\\MediaObject $object, Minn\\Rest\\Caller $caller, Minn\\Rest\\PostsController $reads)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "library",
                        "type": "Minn\\Media\\Writer",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\MediaObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "reads",
                        "type": "Minn\\Rest\\PostsController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 37
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "library",
                    "type": "Minn\\Media\\Writer",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\MediaObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "reads",
                    "type": "Minn\\Rest\\PostsController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/{base:media} (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "The media list: the post lists' own path for attachments (probe rest-media-lists), each item in the media shape.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [
                        "GET /wp/v2/media/{id:[\\d]+} (public; attachment {id} must exist; edit context: cap edit_post on {id})"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One attachment.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 74
                },
                {
                    "routes": [
                        "POST /wp/v2/media (cap upload_files)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Uploads a file and creates its attachment.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 111
                },
                {
                    "routes": [
                        "POST /wp/v2/media/{id:[\\d]+} (cap edit_post on {id}; attachment {id} must exist)",
                        "PUT /wp/v2/media/{id:[\\d]+} (cap edit_post on {id}; attachment {id} must exist)",
                        "PATCH /wp/v2/media/{id:[\\d]+} (cap edit_post on {id}; attachment {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "The editable fields the app uses.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 241,
                    "end": 276
                },
                {
                    "routes": [
                        "DELETE /wp/v2/media/{id:[\\d]+} (cap delete_post on {id}; attachment {id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Attachments go to the trash only when MEDIA_TRASH (or\nrest_attachment_trashable) says so; force removes the row, its meta,\nand its files.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 284,
                    "end": 311
                },
                {
                    "routes": [],
                    "name": "restDate",
                    "static": true,
                    "visibility": "private",
                    "signature": "restDate(string $value, string $param): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "storeWithPlugins",
                    "static": false,
                    "visibility": "private",
                    "signature": "storeWithPlugins(Minn\\Media\\Upload $upload, Minn\\Http\\Request $request, Closure $refused): array",
                    "doc": "With plugins loaded, the file goes through the runtime's\nwp_handle_sideload (a raw body) or wp_handle_upload (a form field),\nas the reference's REST upload sends it: their prefilters, the allowed\ntypes (upload_mimes), the content check, the name, the move and\nwp_handle_upload, where SVG and security plugins work. A refusal is the\nengine's REST error with the runtime's words.",
                    "shapes": [
                        "@param \\Closure(string): RestError $refused",
                        "@return array{0: string, 1: string} the path relative to the uploads folder, and the type"
                    ],
                    "params": [
                        {
                            "name": "upload",
                            "type": "Minn\\Media\\Upload",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "refused",
                            "type": "Closure",
                            "shape": "\\Closure(string): RestError",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "insertedWithPlugins",
                    "static": false,
                    "visibility": "private",
                    "signature": "insertedWithPlugins(string $relative, string $type, Minn\\Media\\Upload $upload, Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "With plugins loaded, the attachment saved as the reference's controller\nsaves it (probe rest-media-save): the photo's own title and caption\n(wp_read_image_metadata) unless the request names them, the prepared\nattachment through rest_pre_insert_attachment, the file's name as the\ntitle when none is left, then wp_insert_attachment, the REST actions\n(the alt text between them), wp_after_insert_post, and the sizes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "upload",
                            "type": "Minn\\Media\\Upload",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "preparedAttachment",
                    "static": false,
                    "visibility": "private",
                    "signature": "preparedAttachment(stdClass $attachment, array $params, Minn\\Http\\Request $request): array",
                    "doc": "rest_block_hooks_post_types, then rest_pre_insert_attachment, over\nthe prepared attachment, then the caption and description the\nrequest sends.",
                    "shapes": [
                        "@param array<string, mixed> $params",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "attachment",
                            "type": "stdClass",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 192,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "finishedWithPlugins",
                    "static": false,
                    "visibility": "private",
                    "signature": "finishedWithPlugins(int $id, array $params, Minn\\Http\\Request $request, ?Minn\\Content\\PostRecord $before): void",
                    "doc": "After rest_insert_attachment: the alt text, rest_after_insert_attachment\nand wp_after_insert_post, in the reference's order.",
                    "shapes": [
                        "@param array<string, mixed> $params"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "params",
                    "static": true,
                    "visibility": "private",
                    "signature": "params(Minn\\Http\\Request $request): array",
                    "doc": "The fields a media request sends, wherever it sends them: the query, a\nform, or a JSON body.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 235
                },
                {
                    "routes": [],
                    "name": "attachment",
                    "static": false,
                    "visibility": "private",
                    "signature": "attachment(int $id): Minn\\Content\\PostRecord",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 313,
                    "end": 320
                }
            ]
        },
        {
            "name": "Minn\\Rest\\MediaObject",
            "short": "MediaObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/MediaObject.php",
            "lines": 171,
            "doc": "The wp/v2 media object, view and edit context.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Texturize",
                "Minn\\Front\\Permalinks",
                "Minn\\Media\\Uploads",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RenderedFields",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\Types",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Media\\Uploads $uploads, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller, Minn\\Rest\\Types $types)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "uploads",
                        "type": "Minn\\Media\\Uploads",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 17,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "uploads",
                    "type": "Minn\\Media\\Uploads",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "build",
                    "static": false,
                    "visibility": "public",
                    "signature": "build(Minn\\Content\\PostRecord $p, Minn\\Rest\\Context $context): array",
                    "doc": "An attachment in the context asked for, as rest_block_hooks_post_types\nhas it (attachments only when a plugin lists them), through\nrest_prepare_attachment when a plugin hooks it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": false,
                    "visibility": "public",
                    "signature": "url(): Minn\\Rest\\RestUrl",
                    "doc": "The REST URL builder.",
                    "shapes": [],
                    "params": [],
                    "line": 39,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "public",
                    "signature": "links(Minn\\Content\\PostRecord $p, Minn\\Rest\\Context $context): array",
                    "doc": "The attachment's links in a context: itself (with the methods the\ncaller may use), its collection and type, its author, replies, the\npost it is attached to, and in the edit context the actions the\ncaller may take; curies when any rel is the API's own.",
                    "shapes": [
                        "@return array<string, list<array<string, mixed>>>"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "buildFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "buildFields(Minn\\Content\\PostRecord $p, Minn\\Rest\\Context $context): array",
                    "doc": "The wp/v2 media shape, with the edit-context fields when asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "details",
                    "static": false,
                    "visibility": "private",
                    "signature": "details(array $meta, string $mime, string $attached): array",
                    "doc": "media_details: the stored metadata as it is, its sizes each with its\nMIME type and URL, and the full size after them when there are any\n(an attachment without sizes, audio among them, has an empty object).",
                    "shapes": [
                        "@param array<string, mixed> $meta",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mime",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attached",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 184
                }
            ]
        },
        {
            "name": "Minn\\Rest\\MenuItemObject",
            "short": "MenuItemObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/MenuItemObject.php",
            "lines": 75,
            "doc": "The wp/v2/menu-items resource.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\MenuItem",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\MenusController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 20,
                "end": 24
            },
            "cases": [],
            "constants": [
                {
                    "name": "TYPE_LABEL",
                    "value": "array (   'page' => 'Page',   'post' => 'Post',   'category' => 'Category',   'post_tag' => 'Tag',   'custom' => 'Custom Link', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(Minn\\Content\\MenuItem $item, Minn\\Rest\\Context $context): array",
                    "doc": "The wp/v2 menu-item shape, through rest_prepare_nav_menu_item when a plugin hooks it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "Minn\\Content\\MenuItem",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Rest\\MenuObject",
            "short": "MenuObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/MenuObject.php",
            "lines": 41,
            "doc": "The wp/v2/menus resource: a nav_menu term plus locations and auto_add.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Menus",
                "Minn\\Content\\TermRecord",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\RestUrl"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\MenusController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Menus $menus, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "menus",
                        "type": "Minn\\Content\\Menus",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 13,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "menus",
                    "type": "Minn\\Content\\Menus",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(Minn\\Content\\TermRecord $term): array",
                    "doc": "The wp/v2 menu shape.",
                    "shapes": [
                        "@param array<string, mixed> $term"
                    ],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 50
                }
            ]
        },
        {
            "name": "Minn\\Rest\\MenusController",
            "short": "MenusController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/MenusController.php",
            "lines": 305,
            "doc": "wp/v2/menus, menu-items, and menu-locations. Viewing needs edit_posts;\nwrites need edit_theme_options. Anonymous callers get 401.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Menus",
                "Minn\\Content\\TermRecord",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\MenuItemObject",
                "Minn\\Rest\\MenuObject",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Runtime\\Refusal",
                "Minn\\Support\\Kses",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Menus $menus, Minn\\Rest\\MenuObject $menuObject, Minn\\Rest\\MenuItemObject $itemObject, Minn\\Rest\\Caller $caller, Minn\\Rest\\RestUrl $url)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "menus",
                        "type": "Minn\\Content\\Menus",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "menuObject",
                        "type": "Minn\\Rest\\MenuObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "itemObject",
                        "type": "Minn\\Rest\\MenuItemObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 33,
                "end": 40
            },
            "cases": [],
            "constants": [
                {
                    "name": "NEW_ITEM",
                    "value": "array (   'menu-id' => 0,   'menu-item-db-id' => 0,   'menu-item-object-id' => 0,   'menu-item-object' => '',   'menu-item-parent-id' => 0,   'menu-item-position' => 1,   'menu-item-type' => 'custom',   'menu-item-title' => '',   'menu-item-url' => '',   'menu-item-description' => '',   'menu-item-attr-title' => '',   'menu-item-target' => '',   'menu-item-classes' => '',   'menu-item-xfn' => '',   'menu-item-status' => 'publish', )",
                    "doc": "The arguments a new item starts from, as the reference's REST controller prepares them.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "menus",
                    "type": "Minn\\Content\\Menus",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "menuObject",
                    "type": "Minn\\Rest\\MenuObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "itemObject",
                    "type": "Minn\\Rest\\MenuItemObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/menus (cap edit_posts; or anyone, when rest_menu_read_access opens it)"
                    ],
                    "name": "listMenus",
                    "static": false,
                    "visibility": "public",
                    "signature": "listMenus(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Every classic menu.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 71
                },
                {
                    "routes": [
                        "GET /wp/v2/menus/{id:[\\d]+} (cap edit_posts; menu {id} must exist; or anyone, when rest_menu_read_access opens it)"
                    ],
                    "name": "singleMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "singleMenu(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One menu.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 82
                },
                {
                    "routes": [
                        "POST /wp/v2/menus (cap edit_theme_options)"
                    ],
                    "name": "createMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "createMenu(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Creates a menu.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 100
                },
                {
                    "routes": [
                        "POST /wp/v2/menus/{id:[\\d]+} (cap edit_theme_options; menu {id} must exist)",
                        "PUT /wp/v2/menus/{id:[\\d]+} (cap edit_theme_options; menu {id} must exist)",
                        "PATCH /wp/v2/menus/{id:[\\d]+} (cap edit_theme_options; menu {id} must exist)"
                    ],
                    "name": "updateMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateMenu(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Renames or re-describes a menu.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 120
                },
                {
                    "routes": [
                        "DELETE /wp/v2/menus/{id:[\\d]+} (cap edit_theme_options; menu {id} must exist)"
                    ],
                    "name": "deleteMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteMenu(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Deletes a menu and its items.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 137
                },
                {
                    "routes": [
                        "GET /wp/v2/menu-items (cap edit_posts; or anyone, when rest_menu_read_access opens it)"
                    ],
                    "name": "listItems",
                    "static": false,
                    "visibility": "public",
                    "signature": "listItems(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The items of a menu.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 160
                },
                {
                    "routes": [
                        "GET /wp/v2/menu-items/{id:[\\d]+} (cap edit_posts; menu item {id} must exist; or anyone, when rest_menu_read_access opens it)"
                    ],
                    "name": "singleItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "singleItem(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One menu item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 173
                },
                {
                    "routes": [
                        "POST /wp/v2/menu-items (cap edit_theme_options)"
                    ],
                    "name": "createItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "createItem(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Creates a menu item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 189
                },
                {
                    "routes": [
                        "POST /wp/v2/menu-items/{id:[\\d]+} (cap edit_theme_options; menu item {id} must exist)",
                        "PUT /wp/v2/menu-items/{id:[\\d]+} (cap edit_theme_options; menu item {id} must exist)",
                        "PATCH /wp/v2/menu-items/{id:[\\d]+} (cap edit_theme_options; menu item {id} must exist)"
                    ],
                    "name": "updateItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateItem(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Updates a menu item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 205
                },
                {
                    "routes": [
                        "DELETE /wp/v2/menu-items/{id:[\\d]+} (cap edit_theme_options; menu item {id} must exist)"
                    ],
                    "name": "deleteItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteItem(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Deletes a menu item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 209,
                    "end": 222
                },
                {
                    "routes": [
                        "GET /wp/v2/menu-locations (cap edit_theme_options; or anyone, when rest_menu_read_access opens it)"
                    ],
                    "name": "locations",
                    "static": false,
                    "visibility": "public",
                    "signature": "locations(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The menu locations the theme and plugins register (none for a block theme without plugins), keyed by name; edit_theme_options to view.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 226,
                    "end": 234
                },
                {
                    "routes": [
                        "GET /wp/v2/menu-locations/{location:[\\w-]+} (cap edit_theme_options; or anyone, when rest_menu_read_access opens it)"
                    ],
                    "name": "oneLocation",
                    "static": false,
                    "visibility": "public",
                    "signature": "oneLocation(Minn\\Http\\Request $request, string $location): Minn\\Http\\Response",
                    "doc": "One menu location.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 238,
                    "end": 245
                },
                {
                    "routes": [],
                    "name": "locationItem",
                    "static": false,
                    "visibility": "private",
                    "signature": "locationItem(string $name, string $description): array",
                    "doc": "A location, the menu assigned to it (0 for none), and links to it and its menu when that exists. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 248,
                    "end": 262
                },
                {
                    "routes": [],
                    "name": "argsFrom",
                    "static": false,
                    "visibility": "private",
                    "signature": "argsFrom(array $body, array $args): array",
                    "doc": "The request's item fields as the reference's menu-item-* save\narguments, over the ones given.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@param array<string, mixed> $args",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 272,
                    "end": 292
                },
                {
                    "routes": [],
                    "name": "titleFrom",
                    "static": false,
                    "visibility": "private",
                    "signature": "titleFrom(array $body): string",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 295,
                    "end": 302
                },
                {
                    "routes": [],
                    "name": "urlFrom",
                    "static": false,
                    "visibility": "private",
                    "signature": "urlFrom(array $body): string",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 305,
                    "end": 312
                },
                {
                    "routes": [],
                    "name": "refuse",
                    "static": false,
                    "visibility": "private",
                    "signature": "refuse(?Minn\\Runtime\\Refusal $refusal): void",
                    "doc": "A refused menu name, in the shape the reference's REST error carries.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "refusal",
                            "type": "?Minn\\Runtime\\Refusal",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 315,
                    "end": 323
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": false,
                    "visibility": "private",
                    "signature": "plain(string $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 325,
                    "end": 328
                }
            ]
        },
        {
            "name": "Minn\\Rest\\NavigationController",
            "short": "NavigationController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/NavigationController.php",
            "lines": 48,
            "doc": "wp/v2/navigation: the block theme's navigation menus, stored as\nwp_navigation posts. The reading and writing is the posts machinery with\nthis type's own capabilities (every one of them edit_theme_options), so\nonly the routes live here.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\Rest\\ExistingPost",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\PostsController $reads, Minn\\Rest\\PostsWriteController $writes)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "reads",
                        "type": "Minn\\Rest\\PostsController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writes",
                        "type": "Minn\\Rest\\PostsWriteController",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 30
            },
            "cases": [],
            "constants": [
                {
                    "name": "TYPE",
                    "value": "'wp_navigation'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BASE",
                    "value": "'navigation'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "reads",
                    "type": "Minn\\Rest\\PostsController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writes",
                    "type": "Minn\\Rest\\PostsWriteController",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/navigation (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The navigation posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [
                        "GET /wp/v2/navigation/{id:[\\d]+} (public; navigation {id} must exist)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One navigation post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [
                        "POST /wp/v2/navigation"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Creates a navigation post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [
                        "POST /wp/v2/navigation/{id:[\\d]+} (cap edit_post on {id}; navigation {id} must exist)",
                        "PUT /wp/v2/navigation/{id:[\\d]+} (cap edit_post on {id}; navigation {id} must exist)",
                        "PATCH /wp/v2/navigation/{id:[\\d]+} (cap edit_post on {id}; navigation {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Updates a navigation post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 60
                },
                {
                    "routes": [
                        "DELETE /wp/v2/navigation/{id:[\\d]+} (cap delete_post on {id}; navigation {id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Trashes or deletes a navigation post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 67
                }
            ]
        },
        {
            "name": "Minn\\Rest\\ParamCheck",
            "short": "ParamCheck",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/ParamCheck.php",
            "lines": 76,
            "doc": "The required / validate / sanitize pass over a request's declared arguments.\nThe callbacks are plugin code and may answer with a WP_Error; the caller\nhands them in already normalised to true, false, or [message, details].",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "validate",
                    "static": true,
                    "visibility": "public",
                    "signature": "validate(array $args, callable $param, callable $validate): ?Minn\\Runtime\\Refusal",
                    "doc": "The first refusal among the request's parameters, or null when all pass.",
                    "shapes": [
                        "@param array<string, array<string, mixed>> $args",
                        "@param callable(string): mixed $param the request's value for one argument",
                        "@param callable(string, mixed): (bool|array{0: string, 1: mixed}) $validate true, false, or [message, details]"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "callable",
                            "shape": "callable(string): mixed",
                            "default": null,
                            "doc": "the request's value for one argument"
                        },
                        {
                            "name": "validate",
                            "type": "callable",
                            "shape": "callable(string, mixed): (bool|array{0: string, 1: mixed})",
                            "default": null,
                            "doc": "true, false, or [message, details]"
                        }
                    ],
                    "line": 23,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(array $params, array $args, callable $sanitize): array",
                    "doc": "The parameters after sanitising, or the refusal listing every invalid one.",
                    "shapes": [
                        "@param array<string, array<string, mixed>> $params the request's parameter groups, by source, in precedence order",
                        "@param array<string, array<string, mixed>> $args",
                        "@param callable(string, mixed): (array{value: mixed}|array{error: array{0: string, 1: mixed}}) $sanitize",
                        "@return array{0: array<string, array<string, mixed>>, 1: Refusal|null} the parameters after sanitising, and the refusal if any failed"
                    ],
                    "params": [
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "array<string, array<string, mixed>>",
                            "default": null,
                            "doc": "the request's parameter groups, by source, in precedence order"
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sanitize",
                            "type": "callable",
                            "shape": "callable(string, mixed): (array{value: mixed}|array{error: array{0: string, 1: mixed}})",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(array $invalid, array $details): ?Minn\\Runtime\\Refusal",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "invalid",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "details",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 88
                }
            ]
        },
        {
            "name": "Minn\\Rest\\PluginsController",
            "short": "PluginsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/PluginsController.php",
            "lines": 243,
            "doc": "wp/v2 plugins: what sits in wp-content/plugins, in the reference's\nshape. Minn extensions (a minn.json manifest) are listed alongside the\nWordPress plugins the folder still holds; the engine runs the former\nand only records the latter's stored state. Activation writes the same\noptions the reference and the extension loader read; files are never\ninstalled or deleted from here.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Inventory",
                "Minn\\Content\\PluginState",
                "Minn\\Content\\Site",
                "Minn\\Extension\\Loader",
                "Minn\\Extension\\Manifest",
                "Minn\\Html",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Ops\\Packages",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Runtime\\Refusal",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Content\\Inventory $inventory, Minn\\Extension\\Loader $extensions, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller, Minn\\Ops\\Packages $packages)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "inventory",
                        "type": "Minn\\Content\\Inventory",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "extensions",
                        "type": "Minn\\Extension\\Loader",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "packages",
                        "type": "Minn\\Ops\\Packages",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 34,
                "end": 42
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "inventory",
                    "type": "Minn\\Content\\Inventory",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "extensions",
                    "type": "Minn\\Extension\\Loader",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "packages",
                    "type": "Minn\\Ops\\Packages",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/plugins (cap activate_plugins)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The plugins list, optionally by status.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 51
                },
                {
                    "routes": [
                        "POST /wp/v2/plugins (cap activate_plugins)"
                    ],
                    "name": "install",
                    "static": false,
                    "visibility": "public",
                    "signature": "install(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Installs a directory plugin by slug, optionally activating it; answers 201 with the item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 87
                },
                {
                    "routes": [
                        "GET /wp/v2/plugins/{plugin:[^.\\/]+(?:\\/[^.\\/]+)?} (cap activate_plugins)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $plugin): Minn\\Http\\Response",
                    "doc": "One plugin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 94
                },
                {
                    "routes": [
                        "PUT /wp/v2/plugins/{plugin:[^.\\/]+(?:\\/[^.\\/]+)?} (cap activate_plugins)",
                        "POST /wp/v2/plugins/{plugin:[^.\\/]+(?:\\/[^.\\/]+)?} (cap activate_plugins)",
                        "PATCH /wp/v2/plugins/{plugin:[^.\\/]+(?:\\/[^.\\/]+)?} (cap activate_plugins)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $plugin): Minn\\Http\\Response",
                    "doc": "Activates or deactivates a plugin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 117
                },
                {
                    "routes": [
                        "DELETE /wp/v2/plugins/{plugin:[^.\\/]+(?:\\/[^.\\/]+)?} (cap activate_plugins)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $plugin): Minn\\Http\\Response",
                    "doc": "Deletes an inactive plugin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 121,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "shape",
                    "static": true,
                    "visibility": "public",
                    "signature": "shape(string $relative, string $path, array $headers, string $status): array",
                    "doc": "A WordPress plugin's item from its headers, as the reference's\ncontroller shapes one (the runtime's WP_REST_Plugins_Controller\nshapes through here too): the headers translated and cut to the\nallowed markup once for the fields and once more, marked up, for the\nrendered description.",
                    "shapes": [
                        "@param array<string, mixed> $headers the plugin's headers, as get_plugins() holds them",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the plugin's headers, as get_plugins() holds them"
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 254
                },
                {
                    "routes": [],
                    "name": "items",
                    "static": false,
                    "visibility": "private",
                    "signature": "items(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [],
                    "line": 144,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "private",
                    "signature": "find(string $plugin): array",
                    "doc": "One plugin's item, built alone: an item reads (and loads the text domain of) only its own plugin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 158,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "statusOf",
                    "static": false,
                    "visibility": "private",
                    "signature": "statusOf(string $plugin): string",
                    "doc": "Whether a plugin is active, read without building its item (nothing translated, no text domain loaded).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "manifestFor",
                    "static": false,
                    "visibility": "private",
                    "signature": "manifestFor(string $plugin): ?Minn\\Extension\\Manifest",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 184,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "extensionItem",
                    "static": false,
                    "visibility": "private",
                    "signature": "extensionItem(Minn\\Extension\\Manifest $manifest, bool $active): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "manifest",
                            "type": "Minn\\Extension\\Manifest",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "active",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "pluginItem",
                    "static": false,
                    "visibility": "private",
                    "signature": "pluginItem(string $relative, string $path, bool $active): array",
                    "doc": "A WordPress plugin as the reference's item shows it: its headers read,\ntranslated and cut to the allowed markup once for the fields and once\nmore, marked up, for the rendered description (probe plugin-data).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "relative",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "active",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 222,
                    "end": 225
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "private",
                    "signature": "links(string $key): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 259
                },
                {
                    "routes": [],
                    "name": "extensionKey",
                    "static": true,
                    "visibility": "private",
                    "signature": "extensionKey(Minn\\Extension\\Manifest $manifest): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "manifest",
                            "type": "Minn\\Extension\\Manifest",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 261,
                    "end": 264
                },
                {
                    "routes": [],
                    "name": "refuse",
                    "static": true,
                    "visibility": "private",
                    "signature": "refuse(?Minn\\Runtime\\Refusal $refusal): void",
                    "doc": "An activation the plugin refused, as the reference's REST answer carries it: HTTP 500, the refusal's own data kept beside.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "refusal",
                            "type": "?Minn\\Runtime\\Refusal",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 268,
                    "end": 273
                }
            ]
        },
        {
            "name": "Minn\\Rest\\PolicyGate",
            "short": "PolicyGate",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/PolicyGate.php",
            "lines": 167,
            "doc": "Judges a route's policy against the caller, with the reference's\nrefusals: a caller who is not signed in gets the policy's sign-in code\nat 401, a bad nonce is always 403 rest_cookie_invalid_nonce, and a\nsigned-in caller who lacks a capability gets the refusal code at 403.\nA subject the policy names is looked up first and answers its 404\nbefore any of those. The edit-context policy is judged as well when\nthe request asks for it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\TypeCapabilities",
                "Minn\\Http\\Access",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\RouteMiss",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Subjects",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\Types"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Caller $caller, Minn\\Rest\\Subjects $subjects, Minn\\Rest\\Types $types)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "subjects",
                        "type": "Minn\\Rest\\Subjects",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "subjects",
                    "type": "Minn\\Rest\\Subjects",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "closure",
                    "static": false,
                    "visibility": "public",
                    "signature": "closure(): Closure",
                    "doc": "The judge as the router takes it.",
                    "shapes": [],
                    "params": [],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "judge",
                    "static": false,
                    "visibility": "public",
                    "signature": "judge(Minn\\Http\\Policy $policy, Minn\\Http\\Request $request, array $captures): void",
                    "doc": "Throws the refusal the policy names, or returns.",
                    "shapes": [
                        "@param array<string, string> $captures"
                    ],
                    "params": [
                        {
                            "name": "policy",
                            "type": "Minn\\Http\\Policy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "subject",
                    "static": false,
                    "visibility": "private",
                    "signature": "subject(Minn\\Http\\Policy $policy, array $captures): void",
                    "doc": "The record's 404 when it does not exist. \"me\" names the caller, who\nmust then be signed in; the reference answers that with its plain\nsign-in refusal whatever the route's own code is.",
                    "shapes": [
                        "@param array<string, string> $captures"
                    ],
                    "params": [
                        {
                            "name": "policy",
                            "type": "Minn\\Http\\Policy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "type",
                    "static": false,
                    "visibility": "private",
                    "signature": "type(Minn\\Http\\Policy $policy, array $captures): void",
                    "doc": "A {base} that names no declared type declines the route, so the next\none may take it. A write is judged with the type's own capabilities\n(probe rest-plugin-caps): a missing post first (404), then the\ncaller (401 signed out, 403 refused).",
                    "shapes": [
                        "@param array<string, string> $captures"
                    ],
                    "params": [
                        {
                            "name": "policy",
                            "type": "Minn\\Http\\Policy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "taxonomy",
                    "static": false,
                    "visibility": "private",
                    "signature": "taxonomy(Minn\\Http\\Policy $policy, array $captures): void",
                    "doc": "A {base} that names no registered taxonomy declines the route. A\nwrite is judged with the taxonomy's own capabilities (probe\nrest-plugin-caps): a missing term first (404), then the caller.",
                    "shapes": [
                        "@param array<string, string> $captures"
                    ],
                    "params": [
                        {
                            "name": "policy",
                            "type": "Minn\\Http\\Policy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "opened",
                    "static": false,
                    "visibility": "private",
                    "signature": "opened(array $opener, Minn\\Http\\Request $request): bool",
                    "doc": "Whether a policy's opener lets any caller through: the filter it names,\nhanded false, the request, and a controller of the class the reference\npasses (built with the argument given).",
                    "shapes": [
                        "@param array{0: string, 1: class-string, 2?: string} $opener"
                    ],
                    "params": [
                        {
                            "name": "opener",
                            "type": "array",
                            "shape": "array{0: string, 1: class-string, 2?: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "capabilities",
                    "static": false,
                    "visibility": "private",
                    "signature": "capabilities(Minn\\Http\\Policy $policy): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "policy",
                            "type": "Minn\\Http\\Policy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "own",
                    "static": false,
                    "visibility": "private",
                    "signature": "own(Minn\\Http\\Policy $policy, array $captures): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, string> $captures"
                    ],
                    "params": [
                        {
                            "name": "policy",
                            "type": "Minn\\Http\\Policy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 189
                }
            ]
        },
        {
            "name": "Minn\\Rest\\PostCollectionParams",
            "short": "PostCollectionParams",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/PostCollectionParams.php",
            "lines": 242,
            "doc": "A post type's collection parameters as the reference builds them for its\nlist (probe rest-post-lists): the shared four, dates, authors when the\ntype supports them, ids, menu order and its orderby for page attributes,\nparents for a hierarchical type, search columns and semantics, slugs,\nstatuses (every registered one, and any), each REST taxonomy's term\nfilter (a list, or a query with children for a hierarchical one and an\noperator for the include side) under a relation, stickies for posts, and\nformats for a type with post formats. Plugins change them through\nrest_{type}_collection_params, asked once a request.",
            "implements": [
                "Minn\\Http\\RouteParams"
            ],
            "extends": null,
            "uses": [
                "Minn\\Http\\Args",
                "Minn\\Http\\RouteParams",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\PostListArgs",
                "Minn\\Rest\\PostsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FORMATS",
                    "value": "array (   0 => 'standard',   1 => 'aside',   2 => 'chat',   3 => 'gallery',   4 => 'link',   5 => 'image',   6 => 'quote',   7 => 'status',   8 => 'video',   9 => 'audio', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "STATUSES",
                    "value": "array (   0 => 'publish',   1 => 'future',   2 => 'draft',   3 => 'pending',   4 => 'private',   5 => 'trash',   6 => 'auto-draft',   7 => 'inherit',   8 => 'request-pending',   9 => 'request-confirmed',   10 => 'request-failed',   11 => 'request-completed', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "IDS",
                    "value": "array (   'type' => 'array',   'items' =>    array (     'type' => 'integer',   ),   'default' =>    array (   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "for",
                    "static": true,
                    "visibility": "public",
                    "signature": "for(array $captures): array",
                    "doc": "The parameters of the list a {base} capture names; none for a base no REST post type has.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "ofType",
                    "static": true,
                    "visibility": "public",
                    "signature": "ofType(string $name): array",
                    "doc": "The parameters of a post type's list, by the type's name. @return array<string, array<string, mixed>>",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "listed",
                    "static": true,
                    "visibility": "public",
                    "signature": "listed(string $name): array",
                    "doc": "A post type's list parameters asked afresh, as the reference's list\nasks for them each time it runs: rest_{type}_collection_params runs\nagain.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "built",
                    "static": true,
                    "visibility": "public",
                    "signature": "built(WP_Post_Type $object): array",
                    "doc": "A post type's list parameters as built, for the type in any\nnamespace: before rest_{type}_collection_params and the optional\nmarks, for the facade's controller class, which adds its callbacks\nand runs the filter itself.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Post_Type",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "mediaTypes",
                    "static": true,
                    "visibility": "public",
                    "signature": "mediaTypes(): array",
                    "doc": "The allowed MIME types by media type (the part before the slash), in\nthe order the site allows them, each once.",
                    "shapes": [
                        "@return array<string, list<string>>"
                    ],
                    "params": [],
                    "line": 214,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "named",
                    "static": true,
                    "visibility": "private",
                    "signature": "named(string $name): ?array",
                    "doc": "A REST post type by its name, in whatever namespace it lists itself\n(a plugin's type under a namespace of its own has the same list as one\nunder wp/v2); posts and pages by name before plugins load.",
                    "shapes": [
                        "@return array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>}|null"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "forType",
                    "static": true,
                    "visibility": "private",
                    "signature": "forType(?array $type): array",
                    "doc": "",
                    "shapes": [
                        "@param array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>}|null $type @return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "?array",
                            "shape": "array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>}|null",
                            "default": null,
                            "doc": "@return array<string, array<string, mixed>>"
                        }
                    ],
                    "line": 70,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "filtered",
                    "static": true,
                    "visibility": "private",
                    "signature": "filtered(array $type): array",
                    "doc": "The parameters built, through rest_{type}_collection_params, each marked optional. @param array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>} $type @return array<string, array<string, mixed>>",
                    "shapes": [
                        "@param array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>} $type @return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "array",
                            "shape": "array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>}",
                            "default": null,
                            "doc": "@return array<string, array<string, mixed>>"
                        }
                    ],
                    "line": 88,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "type",
                    "static": true,
                    "visibility": "private",
                    "signature": "type(string $base): ?array",
                    "doc": "The type a REST base names, with what its parameters depend on. Posts\nand pages are known before plugins load; other types once they have.",
                    "shapes": [
                        "@return array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>}|null"
                    ],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "described",
                    "static": true,
                    "visibility": "private",
                    "signature": "described(string $name, WP_Post_Type $object): array",
                    "doc": "",
                    "shapes": [
                        "@return array{name: string, object: ?\\WP_Post_Type, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>}"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "object",
                            "type": "WP_Post_Type",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 138,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "build",
                    "static": true,
                    "visibility": "private",
                    "signature": "build(array $type): array",
                    "doc": "",
                    "shapes": [
                        "@param array{name: string, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>} $type @return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "array",
                            "shape": "array{name: string, author: bool, attributes: bool, hierarchical: bool, formats: bool, taxonomies: array<string, bool>}",
                            "default": null,
                            "doc": "@return array<string, array<string, mixed>>"
                        }
                    ],
                    "line": 150,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "statuses",
                    "static": true,
                    "visibility": "private",
                    "signature": "statuses(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 225,
                    "end": 228
                },
                {
                    "routes": [],
                    "name": "taxonomies",
                    "static": true,
                    "visibility": "private",
                    "signature": "taxonomies(array $taxonomies): array",
                    "doc": "The term filters: a relation, then each taxonomy's include and exclude.",
                    "shapes": [
                        "@param array<string, bool> $taxonomies REST base => hierarchical",
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "array<string, bool>",
                            "default": null,
                            "doc": "REST base => hierarchical"
                        }
                    ],
                    "line": 236,
                    "end": 249
                },
                {
                    "routes": [],
                    "name": "termFilter",
                    "static": true,
                    "visibility": "private",
                    "signature": "termFilter(string $description, array $properties): array",
                    "doc": "One term filter: an id list, or a query object with these properties beside its terms. @param array<string, array<string, mixed>> $properties @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, array<string, mixed>> $properties @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "properties",
                            "type": "array",
                            "shape": "array<string, array<string, mixed>>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 252,
                    "end": 262
                }
            ]
        },
        {
            "name": "Minn\\Rest\\PostListArgs",
            "short": "PostListArgs",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/PostListArgs.php",
            "lines": 171,
            "doc": "The WP_Query arguments a post list request makes, as the reference makes\nthem before rest_{type}_query (probe rest-post-lists): each registered\nparameter the request carries under its query name, the date bounds,\nper_page, stickies (only them, or none of them), an exact search, each\ntaxonomy's include and exclude under the request's relation, formats\n(standard as no format at all), the type, and ids alone for a HEAD\nrequest. Then each through rest_query_var-{name}, the orderby names\nmapped to the query's, and stickies left where they fall unless asked.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Rest\\PostCollectionParams",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\PostsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAPPINGS",
                    "value": "array (   'author' => 'author__in',   'author_exclude' => 'author__not_in',   'exclude' => 'post__not_in',   'include' => 'post__in',   'ignore_sticky' => 'ignore_sticky_posts',   'menu_order' => 'menu_order',   'offset' => 'offset',   'order' => 'order',   'orderby' => 'orderby',   'page' => 'paged',   'parent' => 'post_parent__in',   'parent_exclude' => 'post_parent__not_in',   'search' => 's',   'search_columns' => 'search_columns',   'slug' => 'post_name__in',   'status' => 'post_status', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "DATES",
                    "value": "array (   0 =>    array (     0 => 'before',     1 => 'before',     2 => 'post_date',   ),   1 =>    array (     0 => 'modified_before',     1 => 'before',     2 => 'post_modified',   ),   2 =>    array (     0 => 'after',     1 => 'after',     2 => 'post_date',   ),   3 =>    array (     0 => 'modified_after',     1 => 'after',     2 => 'post_modified',   ), )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ORDERBY",
                    "value": "array (   'id' => 'ID',   'include' => 'post__in',   'slug' => 'post_name',   'include_slugs' => 'post_name__in', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "IN",
                    "value": "'post__in'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "NOT_IN",
                    "value": "'post__not_in'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(WP_REST_Request $request, array $registered, string $type): array",
                    "doc": "The arguments before plugins see them.",
                    "shapes": [
                        "@param array<string, mixed> $registered the list's parameters",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the list's parameters"
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "queryVars",
                    "static": true,
                    "visibility": "public",
                    "signature": "queryVars(array $args, WP_REST_Request $request): array",
                    "doc": "The query variables from the arguments plugins left: each through\nrest_query_var-{name}, and the list's orderby names as the query's.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "mimeTypes",
                    "static": true,
                    "visibility": "private",
                    "signature": "mimeTypes(array $vars, WP_REST_Request $request): array",
                    "doc": "A media list's MIME types, set after plugins have seen the query: the\nMIME types asked for (those the site allows), else every one of the\nmedia types asked for.",
                    "shapes": [
                        "@param array<string, mixed> $vars",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "sticky",
                    "static": true,
                    "visibility": "private",
                    "signature": "sticky(array $args, bool $only): array",
                    "doc": "Only sticky posts (those among the ids asked for), or none of them. @param array<string, mixed> $args @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $args @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        },
                        {
                            "name": "only",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "taxonomies",
                    "static": true,
                    "visibility": "private",
                    "signature": "taxonomies(array $args, WP_REST_Request $request, string $type): array",
                    "doc": "Each REST taxonomy's include (ids, or a query with children and an operator) and exclude, under the request's relation. @param array<string, mixed> $args @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $args @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "termClause",
                    "static": true,
                    "visibility": "private",
                    "signature": "termClause(mixed $given, string $operator): ?array",
                    "doc": "One term filter as a clause: its terms, whether children count, and its operator (an include may ask for all). @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "given",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "operator",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "formats",
                    "static": true,
                    "visibility": "private",
                    "signature": "formats(array $args, array $formats): array",
                    "doc": "Formats as an OR of their terms, standard as no format at all; beside\nother term filters, a group of their own.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@param array<array-key, string> $formats",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "formats",
                            "type": "array",
                            "shape": "array<array-key, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 188
                }
            ]
        },
        {
            "name": "Minn\\Rest\\PostObject",
            "short": "PostObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/PostObject.php",
            "lines": 533,
            "doc": "Builds the wp/v2 post and page objects in the reference's shape: the\nview context, the edit context (raw+rendered dual fields, editor-only\nfields, and cap-gated wp:action-* links), and their _links blocks.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\TypeCapabilities",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Rest\\RegisteredType",
                "Minn\\Rest\\RenderedFields",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\UserObject"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Content\\Users $users, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 35
            },
            "cases": [],
            "constants": [
                {
                    "name": "NAVIGATION",
                    "value": "'wp_navigation'",
                    "doc": "The one post type whose REST shape is not post-shaped.",
                    "visibility": "private"
                },
                {
                    "name": "BLOCK",
                    "value": "'wp_block'",
                    "doc": "The other: a pattern carries its content raw, its category, and its sync status.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(Minn\\Content\\PostRecord $p, ?Minn\\Rest\\Fields $fields = NULL): array",
                    "doc": "The view-context object, through rest_prepare_{type} when a plugin\nhooks it; with a _fields selection, the rendered title, content and\nexcerpt only when it asks for them, as the reference renders only\nwhat is asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "?Minn\\Rest\\Fields",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "edit",
                    "static": false,
                    "visibility": "public",
                    "signature": "edit(Minn\\Content\\PostRecord $p, int $userId, ?Minn\\Rest\\Fields $fields = NULL): array",
                    "doc": "The edit-context object, its raw content given its hooked blocks,\nthrough rest_prepare_{type} when a plugin hooks it; with a _fields\nselection, rendered only as far as it asks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "?Minn\\Rest\\Fields",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "permalink",
                    "static": false,
                    "visibility": "public",
                    "signature": "permalink(Minn\\Content\\PostRecord $p): string",
                    "doc": "A post's permalink as of now: pretty once live with a slug, ?p= (or ?page_id=) before.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "restBase",
                    "static": true,
                    "visibility": "public",
                    "signature": "restBase(string $type): string",
                    "doc": "The rest_base of a type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "public",
                    "signature": "links(Minn\\Content\\PostRecord $p): array",
                    "doc": "The _links of a post in the view context.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 279,
                    "end": 314
                },
                {
                    "routes": [],
                    "name": "modifiedUnsaved",
                    "static": false,
                    "visibility": "public",
                    "signature": "modifiedUnsaved(Minn\\Content\\PostRecord $p, int $userId): bool",
                    "doc": "Whether a live post carries an autosave newer than its saved revision.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 405,
                    "end": 415
                },
                {
                    "routes": [],
                    "name": "lockHolder",
                    "static": false,
                    "visibility": "public",
                    "signature": "lockHolder(int $id, int $userId): ?array",
                    "doc": "The OTHER user holding a live _edit_lock (150 second window), or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 418,
                    "end": 434
                },
                {
                    "routes": [],
                    "name": "editLinks",
                    "static": false,
                    "visibility": "public",
                    "signature": "editLinks(Minn\\Content\\PostRecord $p, int $userId, ?array $viewLinks = NULL): array",
                    "doc": "The view links plus the caller's verbs and cap-gated wp:action-* entries.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "viewLinks",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 437,
                    "end": 510
                },
                {
                    "routes": [],
                    "name": "date",
                    "static": true,
                    "visibility": "public",
                    "signature": "date(string $mysql): string",
                    "doc": "A MySQL datetime in the reference's ISO form.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mysql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 548,
                    "end": 551
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "private",
                    "signature": "meta(Minn\\Content\\PostRecord $p, string $context): array",
                    "doc": "The meta field: the keys registered to show in REST (probe rest-meta),\nor the footnotes alone without the runtime.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "navigationView",
                    "static": false,
                    "visibility": "private",
                    "signature": "navigationView(Minn\\Content\\PostRecord $p): array",
                    "doc": "A navigation menu is a post with almost nothing on it: no author, no\nexcerpt, no featured image, no comments, no taxonomies, and so no\nclass list either. What it does carry is a template field and the\nrendered menu.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "blockView",
                    "static": false,
                    "visibility": "private",
                    "signature": "blockView(Minn\\Content\\PostRecord $p): array",
                    "doc": "A pattern (wp_block) is read by editors only, so its title and\ncontent come raw even in view context: no rendered title, no rendered\ncontent. It carries an excerpt, the footnotes meta, its pattern\ncategories, and the sync status core registers beside meta.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "viewFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "viewFields(Minn\\Content\\PostRecord $p, ?Minn\\Rest\\Fields $fields = NULL): array",
                    "doc": "The view-context object: the shared fields, then the type's own, then class_list and _links.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "?Minn\\Rest\\Fields",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "viewTerms",
                    "static": false,
                    "visibility": "private",
                    "signature": "viewTerms(Minn\\Content\\PostRecord $p): array",
                    "doc": "The taxonomies a non-page carries, each as [term_id, slug] pairs; the\nformat terms only for posts.",
                    "shapes": [
                        "@return array<string, list<array{0: int, 1: string}>>"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 206,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "typeFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "typeFields(Minn\\Content\\PostRecord $p, array $terms): array",
                    "doc": "Pages carry parent and menu_order first; posts carry their term ids,\nand only the post type has sticky and format, among the shared fields.",
                    "shapes": [
                        "@param array<string, list<array{0: int, 1: string}>> $terms",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "array<string, list<array{0: int, 1: string}>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 222,
                    "end": 242
                },
                {
                    "routes": [],
                    "name": "classList",
                    "static": true,
                    "visibility": "private",
                    "signature": "classList(Minn\\Content\\PostRecord $p, bool $thumbnail, array $terms): array",
                    "doc": "The reference's class_list order: identity, type, status, format (posts\nonly), password, thumbnail, hentry, then one class per term.",
                    "shapes": [
                        "@param array<string, list<array{0: int, 1: string}>> $terms",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "thumbnail",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "array<string, list<array{0: int, 1: string}>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 251,
                    "end": 270
                },
                {
                    "routes": [],
                    "name": "format",
                    "static": true,
                    "visibility": "private",
                    "signature": "format(array $formatTerms): string",
                    "doc": "",
                    "shapes": [
                        "@param list<array{0: int, 1: string}> $formatTerms"
                    ],
                    "params": [
                        {
                            "name": "formatTerms",
                            "type": "array",
                            "shape": "list<array{0: int, 1: string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 273,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "termLinks",
                    "static": false,
                    "visibility": "private",
                    "signature": "termLinks(string $type, int $id): ?array",
                    "doc": "The taxonomy links a type carries: posts their categories and tags, patterns their pattern categories, pages and menus none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 317,
                    "end": 329
                },
                {
                    "routes": [],
                    "name": "editFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "editFields(Minn\\Content\\PostRecord $p, int $userId, ?Minn\\Rest\\Fields $fields = NULL): array",
                    "doc": "The edit-context object for a given caller: raw+rendered dual fields,\npassword, permalink_template, generated_slug, block_version, Minn\nAdmin's registered list fields, and the cap-gated action links.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "?Minn\\Rest\\Fields",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 336,
                    "end": 402
                },
                {
                    "routes": [],
                    "name": "allow",
                    "static": false,
                    "visibility": "private",
                    "signature": "allow(int $id, ?int $userId = NULL): array",
                    "doc": "What the caller may do to this post, which the reference reports in\nevery context: a reader sees GET, an editor of the post sees the\nwrite verbs, and DELETE only when they may delete it too.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 519,
                    "end": 531
                },
                {
                    "routes": [],
                    "name": "gmt",
                    "static": false,
                    "visibility": "private",
                    "signature": "gmt(string $local, string $gmt): string",
                    "doc": "A gmt timestamp for the wire: the stored one, or, when it is the\ndraft zero, the local time converted through the site's offset, the\nway the reference derives it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "local",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 538,
                    "end": 545
                }
            ]
        },
        {
            "name": "Minn\\Rest\\PostsController",
            "short": "PostsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/PostsController.php",
            "lines": 197,
            "doc": "wp/v2 posts and pages, read side.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\TypeCapabilities",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Db",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\PostCollectionParams",
                "Minn\\Rest\\PostListArgs",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\NavigationController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Rest\\PostObject $object, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\PostObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 31
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\PostObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/{base:posts} (public)",
                        "GET /wp/v2/{base:pages} (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "The posts or pages list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "serveList",
                    "static": false,
                    "visibility": "public",
                    "signature": "serveList(Minn\\Http\\Request $request, string $type, ?Closure $shape = NULL): Minn\\Http\\Response",
                    "doc": "The list for any post type as the reference serves it (probe\nrest-post-lists): the caller and the statuses judged, the request's\nparameters sanitized, the query arguments through rest_{type}_query\nand rest_query_var-*, a WP_Query (so pre_get_posts and every query\nfilter run), then each post the caller may read (or edit, in the edit\ncontext) shaped (by $shape when the type has its own object, as\nmedia does). The totals are the query's, counted again without the\npage when a later page came back empty. A media search also matches\nfile names, as the reference's does.",
                    "shapes": [
                        "@param (\\Closure(PostRecord, Context): array<string, mixed>)|null $shape"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "shape",
                            "type": "?Closure",
                            "shape": "(\\Closure(PostRecord, Context): array<string, mixed>)|null",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 96
                },
                {
                    "routes": [
                        "GET /wp/v2/{base:posts|pages}/{id:[\\d]+} (public; post {id} must exist; edit context: cap edit_post on {id})"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "One post or page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 180,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "serveSingle",
                    "static": false,
                    "visibility": "public",
                    "signature": "serveSingle(Minn\\Http\\Request $request, string $type, string $id): Minn\\Http\\Response",
                    "doc": "One post of any type, with the reference's read rules.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 209
                },
                {
                    "routes": [],
                    "name": "withAlternate",
                    "static": true,
                    "visibility": "public",
                    "signature": "withAlternate(Minn\\Http\\Response $response, Minn\\Content\\PostRecord $post): Minn\\Http\\Response",
                    "doc": "A viewable type's single post points at its page on the site.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 212,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "totals",
                    "static": false,
                    "visibility": "private",
                    "signature": "totals(WP_Query $query, array $vars): array",
                    "doc": "The total and the page count: the query's own, or, when a later page\ncame back with nothing counted, a count without the page. A page past\nthe last is refused.",
                    "shapes": [
                        "@param array<string, mixed> $vars",
                        "@return array{0: int, 1: int}"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "readable",
                    "static": false,
                    "visibility": "private",
                    "signature": "readable(WP_Post $post): bool",
                    "doc": "Whether the caller may read a post: published, readable to them, a public status, or an attachment of one they may.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "visibleStatuses",
                    "static": false,
                    "visibility": "private",
                    "signature": "visibleStatuses(Minn\\Http\\Request $request, string $type, Minn\\Rest\\Context $context): void",
                    "doc": "The statuses this caller may list. Public callers see only 'publish';\nany other status and the edit context need a caller who can edit this\ntype, and a status beyond publish is a parameter error without that cap.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 176
                }
            ]
        },
        {
            "name": "Minn\\Rest\\PostsWriteController",
            "short": "PostsWriteController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/PostsWriteController.php",
            "lines": 518,
            "doc": "wp/v2 posts and pages, write side: create, update, trash, and force\ndelete, each gated by the capability engine and answering with the\nedit-context object the reference returns.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\TypeCapabilities",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\PostStatus",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Content\\Slug",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\ExistingPost",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RegisteredType",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\PostSave",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\NavigationController",
                "Minn\\Rest\\RevisionsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Content\\PostWriter $writer, Minn\\Content\\Site $site, Minn\\Rest\\PostObject $object, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writer",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\PostObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 36,
                "end": 44
            },
            "cases": [],
            "constants": [
                {
                    "name": "LIVE",
                    "value": "array (   0 => 'publish',   1 => 'future',   2 => 'private', )",
                    "doc": "The statuses that make a post live: they need the publish capability and give the post its slug.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writer",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\PostObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "POST /wp/v2/{base:posts} (cap edit_posts)",
                        "POST /wp/v2/{base:pages} (cap edit_pages)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "Creates a post or page; one asked for with an id is refused before the caller is judged (patch-security).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "serveCreate",
                    "static": false,
                    "visibility": "public",
                    "signature": "serveCreate(Minn\\Http\\Request $request, string $type, string $base): Minn\\Http\\Response",
                    "doc": "Creates a post of any type from the body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 136
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:posts|pages}/{id:[\\d]+} (cap edit_post on {id}; post {id} must exist)",
                        "PUT /wp/v2/{base:posts|pages}/{id:[\\d]+} (cap edit_post on {id}; post {id} must exist)",
                        "PATCH /wp/v2/{base:posts|pages}/{id:[\\d]+} (cap edit_post on {id}; post {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "Updates a post or page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 212,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "serveUpdate",
                    "static": false,
                    "visibility": "public",
                    "signature": "serveUpdate(Minn\\Http\\Request $request, string $type, string $id): Minn\\Http\\Response",
                    "doc": "Updates a post of any type from the body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 280
                },
                {
                    "routes": [
                        "DELETE /wp/v2/{base:posts|pages}/{id:[\\d]+} (cap delete_post on {id}; post {id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "Trashes or deletes a post or page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 284,
                    "end": 287
                },
                {
                    "routes": [],
                    "name": "serveDelete",
                    "static": false,
                    "visibility": "public",
                    "signature": "serveDelete(Minn\\Http\\Request $request, string $type, string $id): Minn\\Http\\Response",
                    "doc": "Trashes a post of any type, or deletes it with force.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 290,
                    "end": 326
                },
                {
                    "routes": [],
                    "name": "checkMeta",
                    "static": true,
                    "visibility": "public",
                    "signature": "checkMeta(array $body): void",
                    "doc": "A body's meta must be an object of keys (probe rest-meta). @param array<string, mixed> $body",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 519,
                    "end": 524
                },
                {
                    "routes": [],
                    "name": "field",
                    "static": true,
                    "visibility": "public",
                    "signature": "field(mixed $value): string",
                    "doc": "A field that may arrive as a scalar or as {raw: ...}.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 541,
                    "end": 547
                },
                {
                    "routes": [],
                    "name": "hasParent",
                    "static": true,
                    "visibility": "private",
                    "signature": "hasParent(string $type): bool",
                    "doc": "Whether a type's posts take a parent: pages, and a plugin's hierarchical type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "hasOrder",
                    "static": true,
                    "visibility": "private",
                    "signature": "hasOrder(string $type): bool",
                    "doc": "Whether a type's posts take an order: pages, and a plugin's type with page attributes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "events",
                    "static": false,
                    "visibility": "private",
                    "signature": "events(): Minn\\Runtime\\PostEvents",
                    "doc": "Tells plugins about the writes, through the runtime's lifecycle.",
                    "shapes": [],
                    "params": [],
                    "line": 151,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "newColumns",
                    "static": false,
                    "visibility": "private",
                    "signature": "newColumns(array $body, string $type, int $author, string $status, string $slug, string $date, string $dateGmt, string $modified, string $modifiedGmt, string $title): array",
                    "doc": "The row of a new post, from the body and what the create settled.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "date",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dateGmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "modified",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "modifiedGmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "writeNewPost",
                    "static": false,
                    "visibility": "private",
                    "signature": "writeNewPost(array $columns): int",
                    "doc": "Writes a new post's row as the insert does: its guid becomes the\npermalink as of now (pretty only when live). The default category\nfollows, and the body's own terms come after rest_insert_{type}, so\ncategories: [] leaves none.",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "checkAssignTerms",
                    "static": false,
                    "visibility": "private",
                    "signature": "checkAssignTerms(array $body, string $type): void",
                    "doc": "Every existing term the body names must be one the caller may assign\n(assign_term, through map_meta_cap), as the reference's permission\ncheck asks before anything is written (audit Low); an id that names no\nterm is left to the save to report.",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 225,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "rememberOld",
                    "static": false,
                    "visibility": "private",
                    "signature": "rememberOld(Minn\\Content\\PostRecord $before, ?Minn\\Content\\PostRecord $after): void",
                    "doc": "After a save: a post brought back from the trash under a new slug has\nits wanted slug back and stops waiting for it. The old slug and date a\npublished post keeps are the reference's post_updated hooks'.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "before",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "after",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 333,
                    "end": 338
                },
                {
                    "routes": [],
                    "name": "floatingDate",
                    "static": false,
                    "visibility": "private",
                    "signature": "floatingDate(array $body, Minn\\Content\\PostRecord $post): array",
                    "doc": "A draft that was never given a date (its GMT date is zero) has a\nfloating one: every save moves it to now, and the GMT date stays zero\nuntil the post leaves draft or pending, as on the reference.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 347,
                    "end": 354
                },
                {
                    "routes": [],
                    "name": "scheduledIfFuture",
                    "static": false,
                    "visibility": "private",
                    "signature": "scheduledIfFuture(array $body, Minn\\Content\\PostRecord $post): array",
                    "doc": "A date in the future turns a publish into a schedule, whether the\nstatus was sent or kept; a schedule given a date that has come\n(or reset to now) is published (probe hook-inputs-2).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 361,
                    "end": 374
                },
                {
                    "routes": [],
                    "name": "askedDate",
                    "static": false,
                    "visibility": "private",
                    "signature": "askedDate(array $body): ?array",
                    "doc": "The dates a write asks for, as [local, gmt, timestamp]: date (site\nlocal) before date_gmt; null when neither is sent.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array{0: string, 1: string, 2: int}|null"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 383,
                    "end": 392
                },
                {
                    "routes": [],
                    "name": "updatedDate",
                    "static": false,
                    "visibility": "private",
                    "signature": "updatedDate(array $body): ?array",
                    "doc": "The dates an update asks for: as askedDate(), or now when either date\nis sent as null, which resets the post's date (probe hook-inputs-2).",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array{0: string, 1: string, 2: int}|null"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 401,
                    "end": 405
                },
                {
                    "routes": [],
                    "name": "fieldColumns",
                    "static": false,
                    "visibility": "private",
                    "signature": "fieldColumns(array $body, Minn\\Content\\PostRecord $post, string $type): array",
                    "doc": "The columns the body's fields change, minus the status: author (gated\nby edit_others_*), the two flags, password, the page attributes, the\ndate, the three markup fields through the caller's filter, the slug.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 414,
                    "end": 449
                },
                {
                    "routes": [],
                    "name": "statusColumns",
                    "static": false,
                    "visibility": "private",
                    "signature": "statusColumns(array $body, Minn\\Content\\PostRecord $post, string $type): array",
                    "doc": "The status change and what rides with it: going live needs the\npublish cap and gives a slugless post one from its title; the first\nmove to publish stamps the publish date.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 458,
                    "end": 485
                },
                {
                    "routes": [],
                    "name": "checkStickyChange",
                    "static": false,
                    "visibility": "private",
                    "signature": "checkStickyChange(array $body, ?Minn\\Content\\PostRecord $post, string $type): void",
                    "doc": "Making a post sticky, or no longer sticky, takes the type's\nedit_others_posts since 7.1.3; asking for what it already is does not\n(rest-sticky). Only posts are sticky.",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 494,
                    "end": 503
                },
                {
                    "routes": [],
                    "name": "checkStickyPasswordConflict",
                    "static": false,
                    "visibility": "private",
                    "signature": "checkStickyPasswordConflict(array $body, ?Minn\\Content\\PostRecord $post): void",
                    "doc": "The reference refuses a sticky and password combination outright.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 506,
                    "end": 515
                },
                {
                    "routes": [],
                    "name": "validStatus",
                    "static": true,
                    "visibility": "private",
                    "signature": "validStatus(string $status): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 526,
                    "end": 532
                },
                {
                    "routes": [],
                    "name": "clean",
                    "static": false,
                    "visibility": "private",
                    "signature": "clean(string $markup): string",
                    "doc": "Markup from a caller without unfiltered_html goes through the allowlist filter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 535,
                    "end": 538
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RegisteredFields",
            "short": "RegisteredFields",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RegisteredFields.php",
            "lines": 105,
            "doc": "The fields plugin code adds to an object type with register_rest_field,\nas the reference serves them (probe rest-fields). A get callback's value\nfollows the item's own fields, before its links. It is handed the item\nso far (without links, cut to the fields asked for, id kept), the\nfield's name, the request and the object type. A field is left out when\n_fields does not name it or its schema's context does not include the\nrequest's. A write runs the update callbacks for the fields its body\nnames, with the saved object, before rest_after_insert; an error one\nreturns is the write's answer.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\RestError",
                "Minn\\Rest\\Embed",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Runtime\\UserEvents"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "add",
                    "static": true,
                    "visibility": "public",
                    "signature": "add(array $item, string $type, WP_REST_Request $request): array",
                    "doc": "The item with the type's registered fields added, answering the request. @param array<string, mixed> $item @return array<string, mixed>",
                    "shapes": [
                        "@param array<string, mixed> $item @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": true,
                    "visibility": "public",
                    "signature": "update(object $object, string $type, WP_REST_Request $request): void",
                    "doc": "Runs the update callbacks for the fields the request's body names; an error one returns is thrown as the write's answer.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "object",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "context",
                    "static": true,
                    "visibility": "public",
                    "signature": "context(WP_REST_Request $request, string $type): string",
                    "doc": "The context the item is answered in, set on the request as the\nreference's controllers set it: a write and a delete answer in edit\n(a term's delete in view); a read in the one asked for, or view.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "shownIn",
                    "static": true,
                    "visibility": "public",
                    "signature": "shownIn(string $type, string $context): array",
                    "doc": "The names of the fields registered for the type that show in the context. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "private",
                    "signature": "of(string $type): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "wanted",
                    "static": true,
                    "visibility": "private",
                    "signature": "wanted(WP_REST_Request $request): ?array",
                    "doc": "The fields _fields names, or null when it names none. @return list<string>|null",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "inContext",
                    "static": true,
                    "visibility": "private",
                    "signature": "inContext(array $options, string $context): bool",
                    "doc": "A field without a schema, or one whose schema names no context, shows in every context. @param array<string, mixed> $options",
                    "shapes": [
                        "@param array<string, mixed> $options"
                    ],
                    "params": [
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(WP_Error $error): Minn\\RestError",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "WP_Error",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 124
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RegisteredPostFields",
            "short": "RegisteredPostFields",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/RegisteredPostFields.php",
            "lines": 89,
            "doc": "The REST object of a post whose type plugin code registered (probe rest-plugin-types), built by what the type supports.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Front\\Permalinks",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RegisteredType",
                "Minn\\Rest\\RenderedFields",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RestUrl"
            ],
            "usedBy": [
                "Minn\\Rest\\PostObject"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 17
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(Minn\\Content\\PostRecord $p, Minn\\Rest\\RegisteredType $type, Closure $allow, Closure $gmt): array",
                    "doc": "A plugin's type in the view context (probe rest-plugin-types): the\nshared fields, then only what the type supports (title, editor,\nexcerpt, author, thumbnail, page attributes, comments, formats, custom\nfields), its parent when hierarchical, each REST taxonomy's term ids\nunder its REST base, the class list and links.",
                    "shapes": [
                        "@param Closure(int): list<string> $allow the methods the caller may use on a post",
                        "@param Closure(string, string): string $gmt a GMT date as the object writes it",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "Minn\\Rest\\RegisteredType",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allow",
                            "type": "Closure",
                            "shape": "Closure(int): list<string>",
                            "default": null,
                            "doc": "the methods the caller may use on a post"
                        },
                        {
                            "name": "gmt",
                            "type": "Closure",
                            "shape": "Closure(string, string): string",
                            "default": null,
                            "doc": "a GMT date as the object writes it"
                        }
                    ],
                    "line": 30,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "private",
                    "signature": "links(Minn\\Content\\PostRecord $p, Minn\\Rest\\RegisteredType $type, int $featured, array $taxonomies, Closure $allow): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $taxonomies @param Closure(int): list<string> $allow @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "Minn\\Rest\\RegisteredType",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "featured",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@param Closure(int): list<string> $allow @return array<string, mixed>"
                        },
                        {
                            "name": "allow",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 100
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RegisteredType",
            "short": "RegisteredType",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/RegisteredType.php",
            "lines": 46,
            "doc": "A post type plugin code registered, as its REST object follows it\n(probe rest-plugin-types): what it supports, whether it is hierarchical,\nand the taxonomies it shows in REST under their REST bases. Only once the\nruntime has loaded the plugins that register it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Runtime\\PostEvents"
            ],
            "constructor": {
                "signature": "__construct(string $name, WP_Post_Type $object)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "name",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "WP_Post_Type",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 17,
                "end": 19
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "name",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "WP_Post_Type",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $type): ?self",
                    "doc": "The type when plugin code registered it (not a built-in), or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "supports",
                    "static": false,
                    "visibility": "public",
                    "signature": "supports(string $feature): bool",
                    "doc": "Whether the type supports the feature (title, editor, author...).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "feature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "hierarchical",
                    "static": false,
                    "visibility": "public",
                    "signature": "hierarchical(): bool",
                    "doc": "Whether the type's posts have parents.",
                    "shapes": [],
                    "params": [],
                    "line": 38,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "base",
                    "static": false,
                    "visibility": "public",
                    "signature": "base(): string",
                    "doc": "The REST base the type's routes live under, with its namespace.",
                    "shapes": [],
                    "params": [],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "taxonomies",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomies(): array",
                    "doc": "The taxonomies the type shows in REST, REST base => taxonomy, in registration order. @return array<string, string>",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 50,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RenderedFields",
            "short": "RenderedFields",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RenderedFields.php",
            "lines": 68,
            "doc": "A post's rendered title, content and excerpt as a REST response carries\nthem. Without plugins they are Minn's own render. With plugins loaded\nthey pass the filters the reference's controller runs, with the post set\nup as it sets it up: the_title over the stored title, the engine's\nrender of the content then the rest of the_content (shortcodes and every\nplugin's callback), and get_the_excerpt then the_excerpt.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Blocks",
                "Minn\\Content\\PostRecord",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RegisteredPostFields"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "title",
                    "static": true,
                    "visibility": "public",
                    "signature": "title(Minn\\Content\\PostRecord $p): string",
                    "doc": "The rendered title.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "content",
                    "static": true,
                    "visibility": "public",
                    "signature": "content(Minn\\Content\\PostRecord $p): string",
                    "doc": "The rendered content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "excerpt",
                    "static": true,
                    "visibility": "public",
                    "signature": "excerpt(Minn\\Content\\PostRecord $p): string",
                    "doc": "The rendered excerpt.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "setUp",
                    "static": true,
                    "visibility": "public",
                    "signature": "setUp(Minn\\Content\\PostRecord $p): void",
                    "doc": "The post made current and set up for a response that renders none of its text, as the reference sets up every item it prepares.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "classes",
                    "static": true,
                    "visibility": "public",
                    "signature": "classes(array $classes, int $postId): array",
                    "doc": "A post's class list as get_post_class hands it back once plugin code\nfilters post_class (WooCommerce drops hentry and adds a product's\nstock and type): the filter's answer without repeats, in order.",
                    "shapes": [
                        "@param list<string> $classes",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "classes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "withPost",
                    "static": true,
                    "visibility": "private",
                    "signature": "withPost(Minn\\Content\\PostRecord $p, Closure $render): mixed",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "p",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "render",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 70
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Reply",
            "short": "Reply",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Reply.php",
            "lines": 53,
            "doc": "JSON responses in the reference's shape: its header set, its json_encode\nflags (slashes escaped), the _fields filter, and the pagination headers\non lists.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Json",
                "Minn\\RestError",
                "Minn\\Rest\\Fields"
            ],
            "usedBy": [
                "Minn\\Admin\\BundleController",
                "Minn\\Admin\\EditorController",
                "Minn\\Admin\\LanguageController",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\PreferencesController",
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SessionsController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\StructureController",
                "Minn\\Admin\\SystemController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Admin\\UpdatesController",
                "Minn\\Admin\\V1Controller",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\BlocksController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "HEADERS",
                    "value": "array (   'Content-Type' => 'application/json; charset=UTF-8',   'X-Content-Type-Options' => 'nosniff',   'Access-Control-Expose-Headers' => 'X-WP-Total, X-WP-TotalPages, Link',   'Access-Control-Allow-Headers' => 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', )",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "answer",
                    "static": true,
                    "visibility": "public",
                    "signature": "answer(Minn\\Http\\Request $request, mixed $data, int $status = 200): Minn\\Http\\Response",
                    "doc": "One item, shaped by the request's own _fields: what nearly every handler ends with.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "200",
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": true,
                    "visibility": "public",
                    "signature": "item(mixed $data, ?Minn\\Rest\\Fields $fields, int $status = 200): Minn\\Http\\Response",
                    "doc": "One object as a response, the selected fields applied.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "?Minn\\Rest\\Fields",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "int",
                            "shape": "",
                            "default": "200",
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "alternate",
                    "static": true,
                    "visibility": "public",
                    "signature": "alternate(Minn\\Http\\Response $response, string $permalink): Minn\\Http\\Response",
                    "doc": "A post's answer pointing at its page on the site, as a viewable type's single item does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "list",
                    "static": true,
                    "visibility": "public",
                    "signature": "list(array $rows, int $total, int $totalPages, ?Minn\\Rest\\Fields $fields): Minn\\Http\\Response",
                    "doc": "A list response with the total and page-count headers.",
                    "shapes": [
                        "@param list<array> $rows"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "total",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "totalPages",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "?Minn\\Rest\\Fields",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "error",
                    "static": true,
                    "visibility": "public",
                    "signature": "error(Minn\\RestError $error): Minn\\Http\\Response",
                    "doc": "A REST error as the reference's error body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 68
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RestMeta",
            "short": "RestMeta",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RestMeta.php",
            "lines": 265,
            "doc": "An object's meta field over REST, from the keys registered to show\nthere (probe rest-meta). Each key answers under its REST name (its own,\nor show_in_rest's name): those for every subtype, then the object's\nsubtype's, left out of a context their schema does not name. A single\nkey reads its first stored value (its default, or its type's empty value,\nwhen none), a multiple key each one; each value is checked against the\nkey's schema (null when it does not fit, the empty value of a scalar\ntype for '') and cast, or handed to the key's prepare callback. A write\ngoes key by key in registration order: null (or an empty list) deletes,\na value its schema refuses is a 400, and a key the user may not edit is\na 403 (an unchanged single value is left alone first). The errors are\ngathered; the first is the answer, with the others beside it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\RestError",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Runtime\\MetaKeys",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\UserObject",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Runtime\\UserEvents"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SCALARS",
                    "value": "array (   0 => 'string',   1 => 'boolean',   2 => 'integer',   3 => 'number', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $objectType, int $objectId, string $subtype, ?string $context = NULL): array",
                    "doc": "The meta field of an object in a context (the one the request answers in, when none is named), keyed by REST name. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "value",
                    "static": true,
                    "visibility": "public",
                    "signature": "value(string $objectType, int $objectId, string $key, array $field, WP_REST_Request $request): mixed",
                    "doc": "One field's value for an object: a single key's first stored value (its\ndefault when none), a multiple key's each one, prepared for the response.",
                    "shapes": [
                        "@param array<string, mixed> $field"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "writeFrom",
                    "static": true,
                    "visibility": "public",
                    "signature": "writeFrom(WP_REST_Request $request, string $objectType, int $objectId, string $subtype): void",
                    "doc": "Applies the meta a write request names, when it names any.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "public",
                    "signature": "write(string $objectType, int $objectId, string $subtype, array $meta): void",
                    "doc": "Applies a request's meta to an object; the gathered refusals are thrown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "errors",
                    "static": true,
                    "visibility": "public",
                    "signature": "errors(string $objectType, int $objectId, string $subtype, array $meta): array",
                    "doc": "Applies a request's meta to an object, key by key in registration order; the refusals come back. @return list<\\WP_Error>",
                    "shapes": [
                        "@return list<\\WP_Error>"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "fields",
                    "static": true,
                    "visibility": "public",
                    "signature": "fields(string $objectType, string $subtype): array",
                    "doc": "The keys registered to show in REST for an object type and subtype,\neach with its REST name, whether it is single, its schema (a multiple\nkey's an array of its own) and its prepare callback; keys of a type\nREST does not know are left out.",
                    "shapes": [
                        "@return array<string, array{name: string, single: bool, schema: array<string, mixed>, prepare_callback: mixed}>"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "prepare",
                    "static": true,
                    "visibility": "public",
                    "signature": "prepare(mixed $value, array $field, WP_REST_Request $request): mixed",
                    "doc": "A value for the response: through the field's prepare callback, or checked against its schema (null when it does not fit) and cast. @param array<string, mixed> $field",
                    "shapes": [
                        "@param array<string, mixed> $field"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "store",
                    "static": true,
                    "visibility": "public",
                    "signature": "store(string $objectType, int $objectId, string $subtype, string $key, array $field, mixed $value): ?WP_Error",
                    "doc": "A single key stored: an unchanged value is left alone, then the user must be allowed to edit it. @param array<string, mixed> $field",
                    "shapes": [
                        "@param array<string, mixed> $field"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "storeAll",
                    "static": true,
                    "visibility": "public",
                    "signature": "storeAll(string $objectType, int $objectId, string $subtype, string $key, array $field, array $values): ?WP_Error",
                    "doc": "A multiple key stored as a list, once the user may edit it. @param array<string, mixed> $field @param array<mixed> $values",
                    "shapes": [
                        "@param array<string, mixed> $field @param array<mixed> $values"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param array<mixed> $values"
                        },
                        {
                            "name": "values",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": true,
                    "visibility": "public",
                    "signature": "delete(string $objectType, int $objectId, string $key, array $field): ?WP_Error",
                    "doc": "A key deleted once the user may delete it (a single key's invalid stored value refuses null). @param array<string, mixed> $field",
                    "shapes": [
                        "@param array<string, mixed> $field"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 212,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "same",
                    "static": true,
                    "visibility": "public",
                    "signature": "same(string $objectType, string $subtype, string $key, array $field, mixed $stored, mixed $value): bool",
                    "doc": "Whether a value sanitizes to what is stored (scalar types compared as the text the store keeps). @param array<string, mixed> $field",
                    "shapes": [
                        "@param array<string, mixed> $field"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stored",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 235
                },
                {
                    "routes": [],
                    "name": "emptyValue",
                    "static": true,
                    "visibility": "public",
                    "signature": "emptyValue(string $type): mixed",
                    "doc": "A type's empty value: '' for a string, false, 0, or an empty list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 275,
                    "end": 284
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": true,
                    "visibility": "private",
                    "signature": "update(string $objectType, int $objectId, string $subtype, string $key, array $field, mixed $value): ?WP_Error",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $field"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "replaceAll",
                    "static": true,
                    "visibility": "private",
                    "signature": "replaceAll(string $objectType, int $objectId, string $subtype, string $key, array $field, array $values): ?WP_Error",
                    "doc": "A multiple key set to a list: values already stored once are kept,\nthe rest of the stored ones removed and the new ones added.",
                    "shapes": [
                        "@param array<string, mixed> $field",
                        "@param array<mixed> $values"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "values",
                            "type": "array",
                            "shape": "array<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 187,
                    "end": 209
                },
                {
                    "routes": [],
                    "name": "refused",
                    "static": true,
                    "visibility": "private",
                    "signature": "refused(string $code, string $name): WP_Error",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "failed",
                    "static": true,
                    "visibility": "private",
                    "signature": "failed(string $key, string $name): WP_Error",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 243,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "nullStored",
                    "static": true,
                    "visibility": "private",
                    "signature": "nullStored(string $name): WP_Error",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 249,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "gathered",
                    "static": true,
                    "visibility": "private",
                    "signature": "gathered(array $errors): Minn\\RestError",
                    "doc": "The gathered errors as one refusal: the first answers, with its earlier data beside it, and the rest as additional errors. @param list<\\WP_Error> $errors",
                    "shapes": [
                        "@param list<\\WP_Error> $errors"
                    ],
                    "params": [
                        {
                            "name": "errors",
                            "type": "array",
                            "shape": "list<\\WP_Error>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 272
                },
                {
                    "routes": [],
                    "name": "request",
                    "static": true,
                    "visibility": "private",
                    "signature": "request(): WP_REST_Request",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 286,
                    "end": 290
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RestUrl",
            "short": "RestUrl",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/RestUrl.php",
            "lines": 38,
            "doc": "REST URLs in the form the reference emits for the site's permalink mode:\n{home}/wp-json/wp/v2/... when pretty, otherwise\n{home}/index.php?rest_route=/wp/v2/... with the route value URL-encoded\nwhen query args ride along.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\Permalinks"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\IndexController",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\MenuItemObject",
                "Minn\\Rest\\MenuObject",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RegisteredPostFields",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\RouteCatalogue",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\Taxonomies",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\Types",
                "Minn\\Rest\\UserObject",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetObject"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 17,
                "end": 19
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "home",
                    "static": false,
                    "visibility": "public",
                    "signature": "home(string $path = ''): string",
                    "doc": "A URL under the site's home.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "to",
                    "static": false,
                    "visibility": "public",
                    "signature": "to(string $route, array $args = array ( )): string",
                    "doc": "The URL of a REST route, pretty or plain as the site is set.",
                    "shapes": [
                        "@param array<string, string|int> $args"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, string|int>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "curies",
                    "static": true,
                    "visibility": "public",
                    "signature": "curies(): array",
                    "doc": "The curies entry every wp/v2 _links block ends with.",
                    "shapes": [],
                    "params": [],
                    "line": 48,
                    "end": 51
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RevisionsController",
            "short": "RevisionsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/RevisionsController.php",
            "lines": 237,
            "doc": "wp/v2 revisions under posts, pages, patterns and navigation menus, and\nautosaves under those and menu items (probes rest-revisions,\nrest-autosaves). A revision carries the fields its parent's type\nsupports: a navigation menu's its title and content, a menu item's its\ntitle alone.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Nonce",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Revisions",
                "Minn\\Content\\Texturize",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Posts $posts, Minn\\Content\\Revisions $revisions, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller, ?Minn\\Front\\Permalinks $permalinks = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "revisions",
                        "type": "Minn\\Content\\Revisions",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "?Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 42,
                "end": 49
            },
            "cases": [],
            "constants": [
                {
                    "name": "TYPES",
                    "value": "array (   'posts' => 'post',   'pages' => 'page',   'blocks' => 'wp_block',   'navigation' => 'wp_navigation',   'menu-items' => 'nav_menu_item', )",
                    "doc": "The parents' REST bases and their post types.",
                    "visibility": "private"
                },
                {
                    "name": "FIELDS",
                    "value": "array (   'wp_navigation' =>    array (     0 => 'title',     1 => 'content',   ),   'nav_menu_item' =>    array (     0 => 'title',   ), )",
                    "doc": "The fields a revision carries by its parent's type; any other carries title, content and excerpt.",
                    "visibility": "private"
                },
                {
                    "name": "DELETE_REFUSAL",
                    "value": "'Sorry, you are not allowed to delete revisions of this post.'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "revisions",
                    "type": "Minn\\Content\\Revisions",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "?Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/{base:posts|pages|blocks|navigation}/{parent:[\\d]+}/revisions (cap edit_post on {parent}; post parent {parent} must exist)"
                    ],
                    "name": "revisions",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisions(Minn\\Http\\Request $request, string $base, string $parent): Minn\\Http\\Response",
                    "doc": "Real revisions, not autosaves.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 58
                },
                {
                    "routes": [
                        "GET /wp/v2/{base:posts|pages|blocks|navigation}/{parent:[\\d]+}/revisions/{id:[\\d]+} (cap edit_post on {parent}; post parent {parent} must exist)"
                    ],
                    "name": "revision",
                    "static": false,
                    "visibility": "public",
                    "signature": "revision(Minn\\Http\\Request $request, string $base, string $parent, string $id): Minn\\Http\\Response",
                    "doc": "One revision of a post, page, or block.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 72
                },
                {
                    "routes": [
                        "DELETE /wp/v2/{base:posts|pages|blocks|navigation}/{parent:[\\d]+}/revisions/{id:[\\d]+} (cap delete_post on {parent}; post parent {parent} must exist)"
                    ],
                    "name": "deleteRevision",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteRevision(Minn\\Http\\Request $request, string $base, string $parent, string $id): Minn\\Http\\Response",
                    "doc": "A revision deleted for good, answered as it was; never trashed. The\nreference grants deleting a revision to nobody by default, so a\nrequest that passes the parent's check is refused at the revision's.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 104
                },
                {
                    "routes": [
                        "GET /wp/v2/{base:posts|pages|blocks|navigation|menu-items}/{id:[\\d]+}/autosaves (cap edit_post on {id}; post parent {id} must exist)"
                    ],
                    "name": "autosaves",
                    "static": false,
                    "visibility": "public",
                    "signature": "autosaves(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "The autosaves of a post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 118
                },
                {
                    "routes": [
                        "GET /wp/v2/{base:posts|pages|blocks|navigation|menu-items}/{parent:[\\d]+}/autosaves/{id:[\\d]+} (cap edit_post on {parent}; post parent {parent} must exist)"
                    ],
                    "name": "autosave",
                    "static": false,
                    "visibility": "public",
                    "signature": "autosave(Minn\\Http\\Request $request, string $base, string $parent, string $id): Minn\\Http\\Response",
                    "doc": "The caller's autosave of the parent, whichever autosave id is asked for; the edit view names its preview.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 132
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:posts|pages|blocks|navigation|menu-items}/{id:[\\d]+}/autosaves (cap edit_post on {id}; post {id} must exist)"
                    ],
                    "name": "createAutosave",
                    "static": false,
                    "visibility": "public",
                    "signature": "createAutosave(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "One autosave slot per author; the reply carries a preview link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "object",
                    "static": false,
                    "visibility": "public",
                    "signature": "object(Minn\\Content\\PostRecord|array $r, Minn\\Rest\\Context $context = Minn\\Rest\\Context::View): array",
                    "doc": "One revision row as wp/v2 serves it (autosaves and revisions alike).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "r",
                            "type": "Minn\\Content\\PostRecord|array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": "Minn\\Rest\\Context::View",
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "clean",
                    "static": false,
                    "visibility": "private",
                    "signature": "clean(string $markup): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "withPreviewLink",
                    "static": false,
                    "visibility": "private",
                    "signature": "withPreviewLink(array $object, int $parent): array",
                    "doc": "The autosave POST reply names where to preview the draft, just before its links; a revision never carries it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "object",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 199,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "previewLink",
                    "static": false,
                    "visibility": "private",
                    "signature": "previewLink(int $parent): string",
                    "doc": "Where to preview the parent with its autosave: its permalink once\npublished, its plain address before; none for a type that is never\nviewed (a navigation menu, a menu item).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "private",
                    "signature": "meta(int $id, string $parentType): array",
                    "doc": "A revision's meta: the footnotes, and for a pattern the sync status core revisions too; none for a navigation menu or a menu item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parentType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 245
                },
                {
                    "routes": [],
                    "name": "requireParent",
                    "static": false,
                    "visibility": "private",
                    "signature": "requireParent(int $parentId, string $base): int",
                    "doc": "The revision surfaces are gated on edit_post of the parent.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 248,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "parentOf",
                    "static": false,
                    "visibility": "private",
                    "signature": "parentOf(int $parentId, string $base): Minn\\Content\\PostRecord",
                    "doc": "The parent, of the type the route's base names, or rest_post_invalid_parent.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parentId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 260,
                    "end": 267
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RouteArgs",
            "short": "RouteArgs",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RouteArgs.php",
            "lines": 34,
            "doc": "The argument groups a route registers with, filled the way register_rest_route fills them.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "normalise",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalise(array $args): array",
                    "doc": "Route arguments with the shared args folded into each endpoint.",
                    "shapes": [
                        "@param array<string, mixed> $args a single handler (with 'callback') or a list of handler groups, plus optional shared 'args'",
                        "@return array{0: array<int|string, mixed>, 1: bool} the groups, and whether any lacks a permission_callback"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "a single handler (with 'callback') or a list of handler groups, plus optional shared 'args'"
                        }
                    ],
                    "line": 16,
                    "end": 40
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RouteCatalogue",
            "short": "RouteCatalogue",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/RouteCatalogue.php",
            "lines": 78,
            "doc": "The routes the engine serves, described in the reference's shape for the\nindex and for an OPTIONS request: every route's namespace, its methods\nand the parameters it declares, gathered per concrete route from the\nattributes so a client learns what really works on it, with the\nnamespaces they fall under. Routes are keyed as the reference spells them\n('/wp/v2/posts/(?P<id>[\\d]+)').",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Router",
                "Minn\\Rest\\EngineRoutes",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\Types"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\IndexController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Http\\Router $router, Minn\\Rest\\Types $types, Minn\\Rest\\RestUrl $url)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "router",
                        "type": "Minn\\Http\\Router",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 24
            },
            "cases": [],
            "constants": [
                {
                    "name": "SERVER_ROUTES",
                    "value": "array (   0 => '/batch/v1', )",
                    "doc": "The routes the reference's server registers itself, outside any namespace.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "router",
                    "type": "Minn\\Http\\Router",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every route the engine serves, the root and each namespace's index\namong them, and the namespaces.",
                    "shapes": [
                        "@return array{namespaces: list<string>, routes: array<string, array<string, mixed>>}"
                    ],
                    "params": [],
                    "line": 32,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "namespaceOf",
                    "static": true,
                    "visibility": "public",
                    "signature": "namespaceOf(string $route): string",
                    "doc": "The namespace a route is listed under: its first two segments when the\nsecond is a version. The routes the reference's server registers\nitself, the batch route among them, belong to none, so none is listed\nfor them and their path answers no namespace index.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "describing",
                    "static": false,
                    "visibility": "public",
                    "signature": "describing(string $path): ?array",
                    "doc": "The first route whose pattern takes the path, as the reference finds\nthe route an OPTIONS request describes; null when none does.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 93
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RouteIndex",
            "short": "RouteIndex",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RouteIndex.php",
            "lines": 61,
            "doc": "The description of one route the REST index publishes: namespace, methods, endpoints with their argument schemas, self link.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SCHEMA_KEYWORDS",
                    "value": "array (   0 => 'default',   1 => 'enum',   2 => 'description',   3 => 'type',   4 => 'items',   5 => 'minimum',   6 => 'maximum',   7 => 'exclusiveMinimum',   8 => 'exclusiveMaximum',   9 => 'minLength',   10 => 'maxLength',   11 => 'pattern',   12 => 'format',   13 => 'properties',   14 => 'additionalProperties',   15 => 'oneOf',   16 => 'anyOf',   17 => 'minItems',   18 => 'maxItems',   19 => 'uniqueItems', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "describe",
                    "static": true,
                    "visibility": "public",
                    "signature": "describe(string $route, array $callbacks, array $options, string $context, callable $restUrl): ?array",
                    "doc": "One route as the index describes it, or null when hidden.",
                    "shapes": [
                        "@param list<array<string, mixed>> $callbacks the route's handler groups",
                        "@param array<string, mixed> $options the route's non-numeric options (namespace, schema)",
                        "@param callable(string): string $restUrl",
                        "@return array<string, mixed>|null null when no endpoint shows in the index"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callbacks",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "the route's handler groups"
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the route's non-numeric options (namespace, schema)"
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "restUrl",
                            "type": "callable",
                            "shape": "callable(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "argument",
                    "static": true,
                    "visibility": "private",
                    "signature": "argument(mixed $spec): array",
                    "doc": "The published shape keeps the argument's own key order and puts `required` last.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "spec",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 67
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RouteMatch",
            "short": "RouteMatch",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RouteMatch.php",
            "lines": 68,
            "doc": "Finds the registered handler for a method and path among the runtime's route table.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "find",
                    "static": true,
                    "visibility": "public",
                    "signature": "find(array $namespaces, callable $routesFor, string $method, string $path): Minn\\Runtime\\Refusal|array",
                    "doc": "The handler for a method and path across the registered namespaces, or the refusal.",
                    "shapes": [
                        "@param list<string> $namespaces the registered namespaces",
                        "@param callable(string): array<string, list<array<string, mixed>>> $routesFor the (filtered) routes of one namespace, or all when given ''",
                        "@return array{route: string, handler: array<string, mixed>, params: array<string, string>, defaults: array<string, mixed>}|Refusal"
                    ],
                    "params": [
                        {
                            "name": "namespaces",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the registered namespaces"
                        },
                        {
                            "name": "routesFor",
                            "type": "callable",
                            "shape": "callable(string): array<string, list<array<string, mixed>>>",
                            "default": null,
                            "doc": "the (filtered) routes of one namespace, or all when given ''"
                        },
                        {
                            "name": "method",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "route",
                    "static": true,
                    "visibility": "public",
                    "signature": "route(array $namespaces, callable $routesFor, string $path): ?array",
                    "doc": "The first registered route whose pattern matches a path, whatever the\nmethod, with its handlers; null when none does. An OPTIONS request is\nanswered from this.",
                    "shapes": [
                        "@param list<string> $namespaces",
                        "@param callable(string): array<string, list<array<string, mixed>>> $routesFor",
                        "@return array{route: string, handlers: list<array<string, mixed>>}|null"
                    ],
                    "params": [
                        {
                            "name": "namespaces",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "routesFor",
                            "type": "callable",
                            "shape": "callable(string): array<string, list<array<string, mixed>>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 76
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RouteTable",
            "short": "RouteTable",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RouteTable.php",
            "lines": 38,
            "doc": "The registered endpoints in dispatch shape: one handler list per route, methods as a set, non-numeric keys lifted into the route's options.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "HANDLER_DEFAULTS",
                    "value": "array (   'methods' =>    array (   ),   'accept_json' => false,   'accept_raw' => false,   'show_in_index' => true,   'args' =>    array (   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "normalise",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalise(array $endpoints): array",
                    "doc": "Registered endpoints as a route table with their options.",
                    "shapes": [
                        "@param array<string, mixed> $endpoints route => a handler or a list of handlers plus options",
                        "@return array{0: array<string, list<array<string, mixed>>>, 1: array<string, array<string, mixed>>} the routes, and the options found per route"
                    ],
                    "params": [
                        {
                            "name": "endpoints",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "route => a handler or a list of handlers plus options"
                        }
                    ],
                    "line": 18,
                    "end": 44
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RuntimeEnvelope",
            "short": "RuntimeEnvelope",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/RuntimeEnvelope.php",
            "lines": 123,
            "doc": "The REST server's filters around one of Minn's own routes, as the\nreference runs them around every route (contracts/runtime.md, \"The REST\nserver's envelope\"): rest_request_before_callbacks is handed the argument\ncheck's error or null and may refuse; the route's permission is the\nnext refusal; rest_dispatch_request may answer in place of the route;\nrest_request_after_callbacks sees whatever came of it and may change it.\nA value other than an error from the first filter does not answer: the\nroute still runs. With nothing hooked on any of the three, the route\nanswers as it would without plugins, unconverted; and before the runtime\nboots (the API is built first) there are no plugins to ask.",
            "implements": [
                "Minn\\Http\\Envelope"
            ],
            "extends": null,
            "uses": [
                "Minn\\Http\\Args",
                "Minn\\Http\\Envelope",
                "Minn\\Http\\Matched",
                "Minn\\Http\\Method",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\RestError",
                "Minn\\Rest\\EngineRoutes",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Types",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Types $types)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "Types",
                        "default": null,
                        "doc": "the declared types, for naming a {base} route as the reference does"
                    }
                ],
                "visibility": "public",
                "line": 34,
                "end": 36
            },
            "cases": [],
            "constants": [
                {
                    "name": "FILTERS",
                    "value": "array (   0 => 'rest_request_before_callbacks',   1 => 'rest_dispatch_request',   2 => 'rest_request_after_callbacks', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "around",
                    "static": false,
                    "visibility": "public",
                    "signature": "around(Minn\\Http\\Matched $matched, Minn\\Http\\Request $request, ?Minn\\RestError $invalid, ?Minn\\RestError $refusal, Closure $invoke): Minn\\Http\\Response",
                    "doc": "The route's answer with the server's filters around it, or as the route gives it when no plugin can hear.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "matched",
                            "type": "Minn\\Http\\Matched",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invalid",
                            "type": "?Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "refusal",
                            "type": "?Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invoke",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": false,
                    "visibility": "private",
                    "signature": "plain(?Minn\\RestError $invalid, ?Minn\\RestError $refusal, Closure $invoke): Minn\\Http\\Response",
                    "doc": "The route answering as it does without plugins: the refusals thrown in the router's own order.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "invalid",
                            "type": "?Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "refusal",
                            "type": "?Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "invoke",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": true,
                    "visibility": "private",
                    "signature": "run(Closure $invoke): WP_REST_Response|WP_Error",
                    "doc": "The route's answer as the server's filters hand it on: a response object, or the error it refused with.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "invoke",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "routeName",
                    "static": false,
                    "visibility": "private",
                    "signature": "routeName(Minn\\Http\\Matched $matched, Minn\\Http\\Request $request): string",
                    "doc": "The route as the reference names it in its table: the form of the pattern this request matched.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "matched",
                            "type": "Minn\\Http\\Matched",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "handler",
                    "static": false,
                    "visibility": "private",
                    "signature": "handler(Minn\\Http\\Matched $matched, ?Minn\\RestError $refusal): array",
                    "doc": "The handler as plugins read it from the filters: its methods, its\narguments as the index publishes them, and callables for the route\nand its permission.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "matched",
                            "type": "Minn\\Http\\Matched",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "refusal",
                            "type": "?Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "defaults",
                    "static": true,
                    "visibility": "private",
                    "signature": "defaults(array $args): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $args @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 129,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "typed",
                    "static": true,
                    "visibility": "private",
                    "signature": "typed(array $captures): array",
                    "doc": "The captures as the reference holds them once its arguments passed:\na number is an integer.",
                    "shapes": [
                        "@param array<string, string> $captures",
                        "@return array<string, int|string>"
                    ],
                    "params": [
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 150
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RuntimePrepare",
            "short": "RuntimePrepare",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RuntimePrepare.php",
            "lines": 145,
            "doc": "An item a REST response carries, through the filter the reference runs\nas it prepares one (rest_prepare_{type}, rest_prepare_attachment,\nrest_prepare_user, rest_prepare_comment, rest_prepare_{taxonomy}): the\nitem as a response object, its links on the response rather than in its\ndata, handed with the object it describes and the request; what the\nfilter leaves is the item. With nothing hooked, or a response handed back\nuntouched, the item is Minn's own, byte for byte. Fields plugin code\nregisters for the type are added first, as the reference adds them\nbefore the filter runs.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\MenuItemObject",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\UserObject",
                "Minn\\Rest\\WidgetObject",
                "Minn\\Runtime\\PostSave"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "BLOCK_HOOKS_TYPES",
                    "value": "array (   0 => 'post',   1 => 'page',   2 => 'wp_block',   3 => 'wp_navigation', )",
                    "doc": "The post types whose REST answers and saves get their hooked blocks, before plugins say.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "answering",
                    "static": true,
                    "visibility": "public",
                    "signature": "answering(WP_REST_Request $request): void",
                    "doc": "Remembers the request a REST call is answering, for the filters its items pass through (on the request's own runtime).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "during",
                    "static": true,
                    "visibility": "public",
                    "signature": "during(WP_REST_Request $request, Closure $run): mixed",
                    "doc": "Runs an in-process REST call answering its own request (the filters\nhand plugins that one), then puts back the request it interrupted.",
                    "shapes": [
                        "@param \\Closure(): T $run"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "run",
                            "type": "Closure",
                            "shape": "\\Closure(): T",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "postItem",
                    "static": true,
                    "visibility": "public",
                    "signature": "postItem(string $filter, array $item, int $postId, string $type): array",
                    "doc": "A post-shaped item (a post, a page, a pattern, a navigation, an\nattachment, any other type) through rest_prepare_{type}, given its\nhooked blocks first; the post it describes is looked up only when a\nhook needs it.",
                    "shapes": [
                        "@param array<string, mixed> $item",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "filter",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "savedWithHookedBlocks",
                    "static": true,
                    "visibility": "public",
                    "signature": "savedWithHookedBlocks(stdClass $prepared, string $type): void",
                    "doc": "A prepared post about to be saved, as rest_block_hooks_post_types has\nit: a type it lists has its content's ignored hooked blocks marked, a\nnavigation's root list put in meta_input, as the reference's\nupdate_ignored_hooked_blocks_postmeta does; asked of every save.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "prepared",
                            "type": "stdClass",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": true,
                    "visibility": "public",
                    "signature": "item(string $filter, array $item, Closure $described, ?string $postType = NULL): array",
                    "doc": "One item through a rest_prepare filter.",
                    "shapes": [
                        "@param array<string, mixed> $item",
                        "@param \\Closure(): mixed $described the object the item describes, fetched only when a plugin listens",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "filter",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "described",
                            "type": "Closure",
                            "shape": "\\Closure(): mixed",
                            "default": null,
                            "doc": "the object the item describes, fetched only when a plugin listens"
                        },
                        {
                            "name": "postType",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": "a post item's type, given its hooked blocks first (hookedBlocks())"
                        }
                    ],
                    "line": 126,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "hookedBlocks",
                    "static": true,
                    "visibility": "private",
                    "signature": "hookedBlocks(array $item, string $type, Closure $described): array",
                    "doc": "A post item as rest_block_hooks_post_types has it (asked of every item\nthe posts controller prepares, with the post it describes): a type it\nlists has its raw content given its hooked blocks and rendered again\nfrom that, a navigation's root list put in its meta, as the\nreference's insert_hooked_blocks_into_rest_response does (probe\nhook-inputs-2).",
                    "shapes": [
                        "@param array<string, mixed> $item",
                        "@param \\Closure(): mixed $described",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "described",
                            "type": "Closure",
                            "shape": "\\Closure(): mixed",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "withHookedBlocks",
                    "static": true,
                    "visibility": "private",
                    "signature": "withHookedBlocks(string $content, mixed $post, string $callback, array $atRoot): string",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $atRoot a navigation's root ignored list, filled in"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callback",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "atRoot",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "a navigation's root ignored list, filled in"
                        }
                    ],
                    "line": 113,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "objectType",
                    "static": true,
                    "visibility": "private",
                    "signature": "objectType(string $filter): string",
                    "doc": "The object type register_rest_field names for the items a prepare filter sees: the post type, taxonomy, or kind of item.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "filter",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 163
                }
            ]
        },
        {
            "name": "Minn\\Rest\\RuntimeRoutes",
            "short": "RuntimeRoutes",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/RuntimeRoutes.php",
            "lines": 479,
            "doc": "Routes plugin code registered with register_rest_route(), answered\nthrough the runtime's server after the engine's own routes have had\ntheir turn; the runtime's say before the engine answers at all (an\nauthentication refusal, a pre-dispatch answer, a removed endpoint);\nand the runtime's namespaces folded into the index.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Args",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Json",
                "Minn\\RestError",
                "Minn\\Rest\\Reply",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\CommentsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Runtime\\MenuEvents",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\PostSave",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Runtime\\UserEvents"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DISPATCH_DONE",
                    "value": "array (   'rest_filter_response_fields' => 10,   'rest_send_allow_header' => 10, )",
                    "doc": "rest_post_dispatch's defaults the engine does itself: every answer is cut to its _fields before it is served.",
                    "visibility": "private"
                },
                {
                    "name": "ROUTE_SCOPED",
                    "value": "array (   '_wp_connectors_rest_settings_dispatch' =>    array (     0 => 10,     1 => '/wp/v2/settings',   ), )",
                    "doc": "rest_post_dispatch's defaults that touch one route only: elsewhere they hand the answer back as it came, so they are left out there.",
                    "visibility": "private"
                },
                {
                    "name": "SERVE_DONE",
                    "value": "array (   '_oembed_rest_pre_serve_request' => 10,   'rest_send_cors_headers' => 10, )",
                    "doc": "rest_pre_serve_request's defaults the engine does itself: oEmbed's XML (see oembedXml()).",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "requests",
                    "type": "?WeakMap",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "matches",
                    "type": "?WeakMap",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "origins",
                    "type": "?WeakMap",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "gate",
                    "static": true,
                    "visibility": "public",
                    "signature": "gate(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "What plugin code decides before any route runs, engine routes\nincluded, in the reference's order: rest_authentication_errors may\nrefuse the request, rest_pre_dispatch may answer it outright, and a\nroute a rest_endpoints filter removed is no route at all. Null lets\nthe engine's router proceed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "predispatch",
                    "static": true,
                    "visibility": "public",
                    "signature": "predispatch(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "What plugin code decides before a route runs, for a request inside\nanother (an embedded link) as for the first: rest_pre_dispatch may\nanswer it outright, and a route a rest_endpoints filter removed is no\nroute at all. Null lets the router proceed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "dispatch",
                    "static": true,
                    "visibility": "public",
                    "signature": "dispatch(Minn\\Http\\Request $request): ?Minn\\Http\\Response",
                    "doc": "Null when the runtime has no route for the request either.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "allowedMethods",
                    "static": true,
                    "visibility": "public",
                    "signature": "allowedMethods(string $route, WP_REST_Request $wpRequest): array",
                    "doc": "The methods of a plugin's route whose handler lets this request through (a handler with no permission callback does). @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpRequest",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "targetHints",
                    "static": true,
                    "visibility": "public",
                    "signature": "targetHints(string $href): ?array",
                    "doc": "The methods a self link's caller may use there, as the reference\nhints them on every self link it serves (targetHints.allow): the\nroute the link names, each of its methods whose handler lets this\ncaller through; null when no route of the runtime's takes the link.\nA route the engine answers itself is judged by its policies, as its\nAllow header is (probe rest-registry-controllers).",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "href",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "mergeIndex",
                    "static": true,
                    "visibility": "public",
                    "signature": "mergeIndex(Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "The engine's index plus the namespaces and routes the runtime holds.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "adopt",
                    "static": true,
                    "visibility": "public",
                    "signature": "adopt(Minn\\Http\\Request $request, WP_REST_Request $wpRequest): void",
                    "doc": "An in-process call's own request object stands for the engine's request: the server sets its route's parameters on it, as the reference's dispatch does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpRequest",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 183,
                    "end": 187
                },
                {
                    "routes": [],
                    "name": "sanitized",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitized(Minn\\Http\\Request $request, array $registered): WP_REST_Request",
                    "doc": "The request as the list's handler reads it: its parameters with their\ndefaults, sanitized by their schemas, as plugins' filters see it too.",
                    "shapes": [
                        "@param array<string, array<string, mixed>> $registered"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "array<string, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "wpRequest",
                    "static": true,
                    "visibility": "public",
                    "signature": "wpRequest(Minn\\Http\\Request $request): WP_REST_Request",
                    "doc": "The request as the runtime's server reads it, and as a REST filter or action hands it to plugins: the same object each time.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 206,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "matched",
                    "static": true,
                    "visibility": "public",
                    "signature": "matched(Minn\\Http\\Request $request, string $route, array $handler): void",
                    "doc": "Keeps the route and handler a request matched, for the response plugins see at serving.",
                    "shapes": [
                        "@param array<string, mixed> $handler"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "handler",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 217,
                    "end": 221
                },
                {
                    "routes": [],
                    "name": "toWpError",
                    "static": true,
                    "visibility": "public",
                    "signature": "toWpError(Minn\\RestError $error): WP_Error",
                    "doc": "An engine refusal as plugins handle one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 224,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "toWp",
                    "static": true,
                    "visibility": "public",
                    "signature": "toWp(Minn\\Http\\Response $response): WP_REST_Response",
                    "doc": "An engine answer as plugins handle one: its data decoded (an empty\nobject stays one), its links on the response rather than in the data,\nits status and headers.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "wpHeaders",
                    "static": true,
                    "visibility": "public",
                    "signature": "wpHeaders(array $headers, string $route = ''): array",
                    "doc": "A route's own headers as the reference's response object holds them:\na list's totals are numbers, but the comments list's stay text.",
                    "shapes": [
                        "@param array<string, string> $headers",
                        "@return array<string, string|int>"
                    ],
                    "params": [
                        {
                            "name": "headers",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 273
                },
                {
                    "routes": [],
                    "name": "itemResponse",
                    "static": true,
                    "visibility": "public",
                    "signature": "itemResponse(array $item): WP_REST_Response",
                    "doc": "One item a response carries, as a response object: its data without\n_links, the links on the response.",
                    "shapes": [
                        "@param array<string, mixed> $item"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 281,
                    "end": 288
                },
                {
                    "routes": [],
                    "name": "fromWp",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromWp(mixed $result): Minn\\Http\\Response",
                    "doc": "Whatever the filters left, as the engine sends it; what they handed back untouched is the engine's own answer, byte for byte.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "result",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 291,
                    "end": 301
                },
                {
                    "routes": [],
                    "name": "serve",
                    "static": true,
                    "visibility": "public",
                    "signature": "serve(Minn\\Http\\Request $request, Minn\\Http\\Response $response): Minn\\Http\\Response",
                    "doc": "The server's last word on any REST answer, engine or plugin route,\nas the reference serves one: rest_post_dispatch may change it,\nrest_pre_serve_request may serve it itself (what it prints is the\nbody), and rest_pre_echo_response may rewrite the data echoed. With\nnothing hooked, the answer goes out as it is.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 322,
                    "end": 366
                },
                {
                    "routes": [],
                    "name": "servedAsXml",
                    "static": true,
                    "visibility": "public",
                    "signature": "servedAsXml(Minn\\Http\\Request $request, Minn\\Http\\Response $response): bool",
                    "doc": "Whether the answer went out as oEmbed's XML. The reference prints it\nin rest_pre_serve_request ahead of rest_send_cors_headers, so none of\nthe CORS headers follow it, Vary: Origin among them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 373,
                    "end": 376
                },
                {
                    "routes": [],
                    "name": "ensure",
                    "static": true,
                    "visibility": "public",
                    "signature": "ensure(mixed $result): WP_REST_Response",
                    "doc": "A callback's return as a response object, an error converted.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "result",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 477,
                    "end": 481
                },
                {
                    "routes": [],
                    "name": "server",
                    "static": true,
                    "visibility": "public",
                    "signature": "server(): WP_REST_Server",
                    "doc": "The runtime's REST server, the one door to it (built, with rest_api_init, on first use).",
                    "shapes": [],
                    "params": [],
                    "line": 485,
                    "end": 488
                },
                {
                    "routes": [],
                    "name": "allow",
                    "static": true,
                    "visibility": "private",
                    "signature": "allow(WP_REST_Response $result, string $route, WP_REST_Request $wpRequest): void",
                    "doc": "The Allow header a plugin's route answers with, as the reference's\nrest_send_allow_header sets it: every method of the route whose\nhandler's permission callback lets this request through (a handler\nwith none counts). Left alone when the handler set one itself.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "result",
                            "type": "WP_REST_Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "route",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpRequest",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "dispatchDone",
                    "static": true,
                    "visibility": "private",
                    "signature": "dispatchDone(Minn\\Http\\Request $request): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, int> the rest_post_dispatch callbacks this request leaves out: the engine's own, and the route-scoped ones off their route"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 304,
                    "end": 313
                },
                {
                    "routes": [],
                    "name": "asksForXml",
                    "static": true,
                    "visibility": "private",
                    "signature": "asksForXml(Minn\\Http\\Request $request): bool",
                    "doc": "The embed route only: the proxy answers JSON whatever its format.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 379,
                    "end": 382
                },
                {
                    "routes": [],
                    "name": "oembedXml",
                    "static": true,
                    "visibility": "private",
                    "signature": "oembedXml(Minn\\Http\\Request $request, Minn\\Http\\Response $response): ?Minn\\Http\\Response",
                    "doc": "An embed asked for as XML (format=xml), as the reference's\n_oembed_rest_pre_serve_request serves it over HTTP: the data, or the\nerror (its code, message and data), as an oembed document, text/xml,\nwith the status it had. Null for anything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "response",
                            "type": "Minn\\Http\\Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 390,
                    "end": 401
                },
                {
                    "routes": [],
                    "name": "look",
                    "static": true,
                    "visibility": "private",
                    "signature": "look(WP_REST_Response $response): array",
                    "doc": "What a response looks like to the code that may change it. @return array<int, mixed>",
                    "shapes": [
                        "@return array<int, mixed>"
                    ],
                    "params": [
                        {
                            "name": "response",
                            "type": "WP_REST_Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 404,
                    "end": 407
                },
                {
                    "routes": [],
                    "name": "remember",
                    "static": true,
                    "visibility": "private",
                    "signature": "remember(object $made, Minn\\Http\\Response|Minn\\RestError $origin, array $look): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "made",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origin",
                            "type": "Minn\\Http\\Response|Minn\\RestError",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "look",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 409,
                    "end": 413
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "private",
                    "signature": "decode(string $json): mixed",
                    "doc": "JSON as arrays, as plugins read REST data, with an empty object kept an object so it is sent back as one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "json",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 416,
                    "end": 426
                },
                {
                    "routes": [],
                    "name": "expand",
                    "static": true,
                    "visibility": "private",
                    "signature": "expand(array $links): array",
                    "doc": "Compacted link relations (\"wp:term\") back to the relations a response\nholds (\"https://api.w.org/term\"); the CURIE list itself is rebuilt\nwhen the response is compacted again.",
                    "shapes": [
                        "@param array<string, mixed> $links",
                        "@return array<string, list<array<string, mixed>>>"
                    ],
                    "params": [
                        {
                            "name": "links",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 436,
                    "end": 459
                },
                {
                    "routes": [],
                    "name": "newWpRequest",
                    "static": true,
                    "visibility": "private",
                    "signature": "newWpRequest(Minn\\Http\\Request $request): WP_REST_Request",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 461,
                    "end": 474
                },
                {
                    "routes": [],
                    "name": "toResponse",
                    "static": true,
                    "visibility": "private",
                    "signature": "toResponse(WP_REST_Response $response): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "response",
                            "type": "WP_REST_Response",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 490,
                    "end": 498
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Schema",
            "short": "Schema",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/Schema.php",
            "lines": 503,
            "doc": "JSON-schema handling the way the REST API's argument validation does it:\nvalidate a value against a schema (a Refusal names what failed), sanitise\nit into the schema's type, filter a response by context, and the type\ntests the schema vocabulary needs. Behaviour pinned by contracts/fixtures/api/rest.json.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Rest\\SchemaChoices",
                "Minn\\Rest\\SchemaValues",
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [
                "Minn\\Rest\\ApplicationPasswordsController",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\ClientSchema",
                "Minn\\Rest\\LiveSettings",
                "Minn\\Rest\\SchemaChoices",
                "Minn\\Rest\\SchemaValues",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\UsersController"
            ],
            "constructor": {
                "signature": "__construct(Closure $email, Closure $number, Closure $format)",
                "doc": "",
                "shapes": [
                    "@param Closure(string): bool $email the email test, so the reference's is_email filter applies",
                    "@param Closure(int|float): string $number the localised number formatter for messages",
                    "@param Closure(string, mixed): mixed $format the sanitiser for a string format (hex-color, email, uri, ...)"
                ],
                "params": [
                    {
                        "name": "email",
                        "type": "Closure",
                        "shape": "Closure(string): bool",
                        "default": null,
                        "doc": "the email test, so the reference's is_email filter applies"
                    },
                    {
                        "name": "number",
                        "type": "Closure",
                        "shape": "Closure(int|float): string",
                        "default": null,
                        "doc": "the localised number formatter for messages"
                    },
                    {
                        "name": "format",
                        "type": "Closure",
                        "shape": "Closure(string, mixed): mixed",
                        "default": null,
                        "doc": "the sanitiser for a string format (hex-color, email, uri, ...)"
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 30
            },
            "cases": [],
            "constants": [
                {
                    "name": "TYPES",
                    "value": "array (   0 => 'array',   1 => 'object',   2 => 'string',   3 => 'number',   4 => 'integer',   5 => 'boolean',   6 => 'null', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "KEYWORDS",
                    "value": "array (   0 => 'title',   1 => 'description',   2 => 'default',   3 => 'type',   4 => 'format',   5 => 'enum',   6 => 'items',   7 => 'properties',   8 => 'additionalProperties',   9 => 'patternProperties',   10 => 'minProperties',   11 => 'maxProperties',   12 => 'minimum',   13 => 'maximum',   14 => 'exclusiveMinimum',   15 => 'exclusiveMaximum',   16 => 'multipleOf',   17 => 'minLength',   18 => 'maxLength',   19 => 'pattern',   20 => 'minItems',   21 => 'maxItems',   22 => 'uniqueItems',   23 => 'anyOf',   24 => 'oneOf', )",
                    "doc": "Every keyword a route schema may carry, in the reference's order; the endpoint subset drops the three descriptive ones.",
                    "visibility": "public"
                },
                {
                    "name": "ENDPOINT_KEYWORDS",
                    "value": "array (   0 => 'type',   1 => 'format',   2 => 'enum',   3 => 'items',   4 => 'properties',   5 => 'additionalProperties',   6 => 'patternProperties',   7 => 'minProperties',   8 => 'maxProperties',   9 => 'minimum',   10 => 'maximum',   11 => 'exclusiveMinimum',   12 => 'exclusiveMaximum',   13 => 'multipleOf',   14 => 'minLength',   15 => 'maxLength',   16 => 'pattern',   17 => 'minItems',   18 => 'maxItems',   19 => 'uniqueItems',   20 => 'anyOf',   21 => 'oneOf', )",
                    "doc": "An object schema that names its properties forbids the others unless it says otherwise, all the way down.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "email",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "number",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "format",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "validate",
                    "static": false,
                    "visibility": "public",
                    "signature": "validate(mixed $value, array $args, string $param = ''): Minn\\Runtime\\Refusal|true",
                    "doc": "Whether a value satisfies a schema, or the reference's refusal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "choices",
                    "static": false,
                    "visibility": "public",
                    "signature": "choices(): Minn\\Rest\\SchemaChoices",
                    "doc": "A schema's anyOf and oneOf: which of their schemas a value matches, and the refusal when not as wanted.",
                    "shapes": [],
                    "params": [],
                    "line": 72,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "validateAs",
                    "static": false,
                    "visibility": "public",
                    "signature": "validateAs(string $type, mixed $value, array $args, string $param): Minn\\Runtime\\Refusal|true",
                    "doc": "One type's own checks, as the per-type validators run them: a number's\nbounds before an integer's wholeness, and no enum or format.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "validateEnum",
                    "static": false,
                    "visibility": "public",
                    "signature": "validateEnum(mixed $value, array $args, string $param): Minn\\Runtime\\Refusal|true",
                    "doc": "Whether a value is one of the schema's enum, coerced to the schema's type first when it names one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": false,
                    "visibility": "public",
                    "signature": "sanitize(mixed $value, array $args, string $param = ''): mixed",
                    "doc": "A value coerced to its schema's types.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 298,
                    "end": 366
                },
                {
                    "routes": [],
                    "name": "filterByContext",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterByContext(mixed $data, array $schema, string $context): mixed",
                    "doc": "Drops the properties whose schema does not list the context; an array whose items do not is emptied.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 369,
                    "end": 416
                },
                {
                    "routes": [],
                    "name": "anyMatching",
                    "static": false,
                    "visibility": "public",
                    "signature": "anyMatching(mixed $value, array $args, string $param): ?array",
                    "doc": "The first anyOf branch the value validates against.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 419,
                    "end": 427
                },
                {
                    "routes": [],
                    "name": "endpointArgs",
                    "static": true,
                    "visibility": "public",
                    "signature": "endpointArgs(array $schema, bool $creatable): array",
                    "doc": "The argument map a route derives from an item schema: every writable\nproperty with the default validators, its keywords, defaults and\nrequired flags on the create route only, and any arg_options overrides.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "creatable",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 440,
                    "end": 475
                },
                {
                    "routes": [],
                    "name": "castEmptyObjects",
                    "static": true,
                    "visibility": "public",
                    "signature": "castEmptyObjects(mixed $value, array $schema): mixed",
                    "doc": "A value with each empty array the schema calls an object made one\n(it encodes as {}), through properties, additional properties, list\nitems and the value as a whole (probe rest-view-config).",
                    "shapes": [
                        "@param array<string, mixed> $schema"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 484,
                    "end": 502
                },
                {
                    "routes": [],
                    "name": "closeObjects",
                    "static": true,
                    "visibility": "public",
                    "signature": "closeObjects(array $schema): array",
                    "doc": "The schema with additionalProperties closed on every object.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 505,
                    "end": 518
                },
                {
                    "routes": [],
                    "name": "validateInteger",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateInteger(mixed $value, array $args, string $param): ?Minn\\Runtime\\Refusal",
                    "doc": "Numeric, within bounds and a multiple, then whole; null when the integer passes.\nA value that is not numeric names the schema's own type, empty when the\nschema names none (the reference words it \"p is not of type .\").",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "validateString",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateString(mixed $value, array $args, string $param): ?Minn\\Runtime\\Refusal",
                    "doc": "Length and pattern; null when the string passes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "validateNumber",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateNumber(mixed $value, array $args, string $param): ?Minn\\Runtime\\Refusal",
                    "doc": "Bounds and multipleOf; null when the number passes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 137,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "validateArray",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateArray(mixed $value, array $args, string $param): ?Minn\\Runtime\\Refusal",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "firstMissing",
                    "static": true,
                    "visibility": "private",
                    "signature": "firstMissing(array $args, array $value): ?string",
                    "doc": "The first property an object schema requires and the value lacks. A list under 'required'\n(draft 4) wins; without one, each property's own 'required' => true (draft 3) counts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "validateObject",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateObject(mixed $value, array $args, string $param): ?Minn\\Runtime\\Refusal",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 192,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "validateFormat",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateFormat(mixed $value, string $format, string $param): ?Minn\\Runtime\\Refusal",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "format",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 226,
                    "end": 236
                },
                {
                    "routes": [],
                    "name": "validateBounds",
                    "static": false,
                    "visibility": "private",
                    "signature": "validateBounds(mixed $value, array $args, string $param): ?Minn\\Runtime\\Refusal",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 238,
                    "end": 273
                },
                {
                    "routes": [],
                    "name": "enum",
                    "static": false,
                    "visibility": "private",
                    "signature": "enum(mixed $value, array $enum, string $param): Minn\\Runtime\\Refusal|true",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "enum",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 275,
                    "end": 290
                },
                {
                    "routes": [],
                    "name": "wrongType",
                    "static": false,
                    "visibility": "private",
                    "signature": "wrongType(string $param, string $type): Minn\\Runtime\\Refusal",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 292,
                    "end": 295
                }
            ]
        },
        {
            "name": "Minn\\Rest\\SchemaChoices",
            "short": "SchemaChoices",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/SchemaChoices.php",
            "lines": 136,
            "doc": "anyOf and oneOf the way the REST API's validation judges them (probe\nrest-schema-choices): a choice's schemas without a type take the\nchoice's own; the refusal for matching none is named from the closest\nschema, or lists the titles, or is plain; several matches are named by\ntheir titles. Schema::validate() asks here first, then applies the\nschema's own keywords.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Rest\\Schema",
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [
                "Minn\\Rest\\Schema"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Schema $schema)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "schema",
                        "type": "Minn\\Rest\\Schema",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 21
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "schema",
                    "type": "Minn\\Rest\\Schema",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "matchAny",
                    "static": false,
                    "visibility": "public",
                    "signature": "matchAny(mixed $value, array $args, string $param): Minn\\Runtime\\Refusal|array",
                    "doc": "The first of an anyOf's schemas the value matches, each without a type\ntaking the choice's own, or the refusal for matching none (probe\nrest-media-actions).",
                    "shapes": [
                        "@return array<string, mixed>|Refusal"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "matchOne",
                    "static": false,
                    "visibility": "public",
                    "signature": "matchOne(mixed $value, array $args, string $param, string $settle = 'one'): Minn\\Runtime\\Refusal|array",
                    "doc": "The one of a oneOf's schemas the value matches, each without a type\ntaking the choice's own; \"first\" settles for the first match. Matching\nnone is refused as matchAny() refuses it; matching several names them\nwhen every one has a title, with their positions.",
                    "shapes": [
                        "@return array<string, mixed>|Refusal"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "settle",
                            "type": "string",
                            "shape": "",
                            "default": "'one'",
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "combiningError",
                    "static": false,
                    "visibility": "public",
                    "signature": "combiningError(mixed $value, string $param, array $errors): Minn\\Runtime\\Refusal",
                    "doc": "The refusal for a value no schema of a choice matched (probe\nrest-media-actions). With one schema, its refusal is named. Otherwise\nthe refusals that say only the value is not the schema's type are set\naside, and one left is named. Of several left, when the first is an\nobject's, the one whose properties share the most keys with the value\nis named (the first of a tie, none when none share). Then, when every\nschema has a title, they are listed; else the plain refusal.",
                    "shapes": [
                        "@param list<array{0: Refusal, 1: array<string, mixed>, 2: int|string}> $errors refusal, schema, position"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "errors",
                            "type": "array",
                            "shape": "list<array{0: Refusal, 1: array<string, mixed>, 2: int|string}>",
                            "default": null,
                            "doc": "refusal, schema, position"
                        }
                    ],
                    "line": 92,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "combiningFailure",
                    "static": false,
                    "visibility": "public",
                    "signature": "combiningFailure(string $param, ?string $title, string $reason, mixed $position): Minn\\Runtime\\Refusal",
                    "doc": "The refusal for a value that matched none of a combinator's schemas,\nworded from the one that came closest: its title when it has one (an\nempty title still reads as one), and that schema's own reason.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "param",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reason",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "closestObject",
                    "static": true,
                    "visibility": "private",
                    "signature": "closestObject(mixed $value, array $errors): ?array",
                    "doc": "Of several object schemas' refusals, the one whose properties share\nthe most keys with the value; null when the first is not an object's\nor none shares a key.",
                    "shapes": [
                        "@param list<array{0: Refusal, 1: array<string, mixed>, 2: int|string}> $errors",
                        "@return array{0: Refusal, 1: array<string, mixed>, 2: int|string}|null"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "errors",
                            "type": "array",
                            "shape": "list<array{0: Refusal, 1: array<string, mixed>, 2: int|string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "listed",
                    "static": true,
                    "visibility": "private",
                    "signature": "listed(array $names): string",
                    "doc": "Names in a sentence: \"A and B\", \"A, B, and C\". @param list<string> $names",
                    "shapes": [
                        "@param list<string> $names"
                    ],
                    "params": [
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 151
                }
            ]
        },
        {
            "name": "Minn\\Rest\\SchemaData",
            "short": "SchemaData",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/SchemaData.php",
            "lines": 12,
            "doc": "REST schemas captured from the reference for the facade's controller\nclasses (data/rest-schemas.json): an item schema, a collection's\nparameters or a route argument, by name. Callbacks are not data, so a\ncontroller adds its own.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "all",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $name): array",
                    "doc": "One captured schema by name; an empty array when there is none. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 25
                }
            ]
        },
        {
            "name": "Minn\\Rest\\SchemaValues",
            "short": "SchemaValues",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/SchemaValues.php",
            "lines": 198,
            "doc": "The value side of JSON Schema, as the reference applies it: what counts\nas a boolean, integer, array, or object, the coercions to each, the\ncomparisons and date, colour, and uuid parsers the formats use, and the\ncombining walk anyOf and oneOf share. Schema holds the rules; this holds\nwhat they are applied to.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Rest\\Schema"
            ],
            "usedBy": [
                "Minn\\Rest\\Schema",
                "Minn\\Rest\\Settings"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "isBoolean",
                    "static": true,
                    "visibility": "public",
                    "signature": "isBoolean(mixed $value): bool",
                    "doc": "Whether a value reads as a boolean, the strings included.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "toBoolean",
                    "static": true,
                    "visibility": "public",
                    "signature": "toBoolean(mixed $value): mixed",
                    "doc": "The boolean a value reads as.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "isInteger",
                    "static": true,
                    "visibility": "public",
                    "signature": "isInteger(mixed $value): bool",
                    "doc": "Whether a value is a whole number.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "isArray",
                    "static": true,
                    "visibility": "public",
                    "signature": "isArray(mixed $value): bool",
                    "doc": "Whether a value reads as a list, a comma-separated string included.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": true,
                    "visibility": "public",
                    "signature": "toArray(mixed $value): array",
                    "doc": "The list a value reads as.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "isObject",
                    "static": true,
                    "visibility": "public",
                    "signature": "isObject(mixed $value): bool",
                    "doc": "Whether a value reads as an object.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "toObject",
                    "static": true,
                    "visibility": "public",
                    "signature": "toObject(mixed $value): array",
                    "doc": "The object a value reads as, as an array.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "bestType",
                    "static": true,
                    "visibility": "public",
                    "signature": "bestType(mixed $value, array|string $types): string",
                    "doc": "The first of the schema's types, in the order it lists them, that the value reads as (an empty string is a string when that is allowed); '' when none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "valuesEqual",
                    "static": true,
                    "visibility": "public",
                    "signature": "valuesEqual(mixed $a, mixed $b): bool",
                    "doc": "Whether two values are equal by the reference's loose rules.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "a",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "b",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "patternProperty",
                    "static": true,
                    "visibility": "public",
                    "signature": "patternProperty(string $property, array $args): ?array",
                    "doc": "The schema of the patternProperties entry a property name matches, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "property",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "matchesPattern",
                    "static": true,
                    "visibility": "public",
                    "signature": "matchesPattern(string $pattern, string $value): bool",
                    "doc": "Whether a value matches a schema pattern, read as the reference reads one: unanchored, # escaped, UTF-8.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "pattern",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "hasUniqueItems",
                    "static": true,
                    "visibility": "public",
                    "signature": "hasUniqueItems(array $items): bool",
                    "doc": "Whether no two items are equal once their keys are sorted; types stay apart, so 1 and \"1\" differ.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "intersectKeys",
                    "static": true,
                    "visibility": "public",
                    "signature": "intersectKeys(array $first, array $second): array",
                    "doc": "The first array's entries whose keys the second has too, at every level where both hold an array.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "first",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "second",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "stabilize",
                    "static": true,
                    "visibility": "public",
                    "signature": "stabilize(mixed $value): mixed",
                    "doc": "Keys sorted at every level, so two equal structures serialise the same.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "parseDate",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseDate(mixed $date, bool $forceUtc = false): int|false",
                    "doc": "A timestamp for an RFC3339-shaped date, false otherwise; $forceUtc reads the offset as Z.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "date",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "forceUtc",
                            "type": "bool",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        }
                    ],
                    "line": 181,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "parseHexColor",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseHexColor(mixed $color): mixed",
                    "doc": "A hex colour as given, or false.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "color",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "isUuid",
                    "static": true,
                    "visibility": "public",
                    "signature": "isUuid(mixed $uuid): bool",
                    "doc": "Whether a value is a version-4 uuid.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "uuid",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 200,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "list",
                    "static": true,
                    "visibility": "public",
                    "signature": "list(mixed $value): array",
                    "doc": "A comma- or space-separated string as a list.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "objectOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "objectOf(mixed $value): ?array",
                    "doc": "A value as an object's properties: '' is the empty object, a stdClass its properties, a\nJsonSerializable what it serializes to; null when it is no object.",
                    "shapes": [
                        "@return array<array-key, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 94
                }
            ]
        },
        {
            "name": "Minn\\Rest\\SearchController",
            "short": "SearchController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/SearchController.php",
            "lines": 122,
            "doc": "wp/v2 search over published content: id, title, url, type, and the\npost type as subtype. Ordered the way the reference orders a search:\na title holding every term first, then a title holding any term, then\nan excerpt match, then a content match, newest first within a rank.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Texturize",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Types"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Rest\\Types $types, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "types",
                        "type": "Minn\\Rest\\Types",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 37
            },
            "cases": [],
            "constants": [
                {
                    "name": "MAX_PER_PAGE",
                    "value": "100",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "types",
                    "type": "Minn\\Rest\\Types",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/search (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Search across post types with the reference's relevance order.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "private",
                    "signature": "item(Minn\\Content\\PostRecord $row): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "row",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "subtypes",
                    "static": false,
                    "visibility": "private",
                    "signature": "subtypes(string $subtype): array",
                    "doc": "The searchable post types: every registered type except the ones the reference keeps out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "rankExpression",
                    "static": false,
                    "visibility": "private",
                    "signature": "rankExpression(array $terms, array $params): string",
                    "doc": "A CASE that ranks a title match over an excerpt over a content match.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "params",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "terms",
                    "static": true,
                    "visibility": "private",
                    "signature": "terms(string $search): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "escapeLike",
                    "static": true,
                    "visibility": "private",
                    "signature": "escapeLike(string $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 146
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Services",
            "short": "Services",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Services.php",
            "lines": 417,
            "doc": "The objects one REST request shares, each made once, on first use, from\nthe database door and the request. Every getter is typed and names its\ndependencies in plain constructor calls: there is no autowiring, and\nget() knows only the names listed here, so a wrong one fails at the\nfirst call rather than deep in a handler.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Admin\\ActivityChart",
                "Minn\\Admin\\ActivityFeed",
                "Minn\\Admin\\App",
                "Minn\\Admin\\Appearance",
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\HiddenIntegrations",
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\Translations",
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\Sessions",
                "Minn\\Content\\Comments",
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Menus",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Revisions",
                "Minn\\Content\\Site",
                "Minn\\Content\\Terms",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Extension\\Loader",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\Request",
                "Minn\\Media\\Uploads",
                "Minn\\Media\\Writer",
                "Minn\\Ops\\Changelog",
                "Minn\\Ops\\CoreStatus",
                "Minn\\Ops\\Diagnostics",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\InstalledSoftware",
                "Minn\\Ops\\Logs",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Releases",
                "Minn\\Ops\\Updates",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\Schema",
                "Minn\\Rest\\Subjects",
                "Minn\\Rest\\Taxonomies",
                "Minn\\Rest\\TermObject",
                "Minn\\Rest\\Types",
                "Minn\\Rest\\UserObject",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplateWriter",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeStyles",
                "Minn\\Theme\\UserStyles"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Http\\Request $request, string $root, string $engineDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "request",
                        "type": "Minn\\Http\\Request",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "root",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 108,
                "end": 114
            },
            "cases": [],
            "constants": [
                {
                    "name": "NAMED",
                    "value": "array (   'Minn\\\\Content\\\\Users' => 'users',   'Minn\\\\Content\\\\Posts' => 'posts',   'Minn\\\\Content\\\\Terms' => 'terms',   'Minn\\\\Content\\\\Comments' => 'comments',   'Minn\\\\Content\\\\Site' => 'site',   'Minn\\\\Content\\\\PostWriter' => 'writer',   'Minn\\\\Front\\\\Permalinks' => 'permalinks',   'Minn\\\\Rest\\\\RestUrl' => 'url',   'Minn\\\\Auth\\\\Capabilities' => 'capabilities',   'Minn\\\\Rest\\\\Caller' => 'caller',   'Minn\\\\Rest\\\\Subjects' => 'subjects',   'Minn\\\\Extension\\\\Loader' => 'loader',   'Minn\\\\Rest\\\\Types' => 'types',   'Minn\\\\Rest\\\\Taxonomies' => 'taxonomies',   'Minn\\\\Media\\\\Uploads' => 'uploads',   'Minn\\\\Content\\\\Inventory' => 'inventory',   'Minn\\\\Ops\\\\Packages' => 'packages',   'Minn\\\\Admin\\\\App' => 'app',   'Minn\\\\Ops\\\\Logs' => 'logs',   'Minn\\\\Ops\\\\Updates' => 'updates',   'Minn\\\\Content\\\\Menus' => 'menus',   'Minn\\\\Content\\\\Revisions' => 'revisions',   'Minn\\\\Auth\\\\Sessions' => 'sessions',   'Minn\\\\Auth\\\\ApplicationPasswords' => 'applicationPasswords',   'Minn\\\\Admin\\\\Translations' => 'translations',   'Minn\\\\Admin\\\\Appearance' => 'appearance',   'Minn\\\\Admin\\\\HiddenIntegrations' => 'hiddenIntegrations',   'Minn\\\\Admin\\\\ActivityFeed' => 'activityFeed',   'Minn\\\\Admin\\\\Dashboard' => 'dashboard',   'Minn\\\\Admin\\\\Notifications' => 'notifications',   'Minn\\\\Ops\\\\Diagnostics' => 'diagnostics',   'Minn\\\\Media\\\\Writer' => 'mediaWriter',   'Minn\\\\Rest\\\\Schema' => 'schema',   'Minn\\\\Rest\\\\PostObject' => 'postObject',   'Minn\\\\Rest\\\\TermObject' => 'termObject',   'Minn\\\\Rest\\\\UserObject' => 'userObject',   'Minn\\\\Rest\\\\MediaObject' => 'mediaObject',   'Minn\\\\Rest\\\\CommentObject' => 'commentObject',   'Minn\\\\Theme\\\\UserStyles' => 'userStyles',   'Minn\\\\Theme\\\\ThemeStyles' => 'themeStyles', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "made",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "request",
                    "type": "Minn\\Http\\Request",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "root",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forRequest",
                    "static": true,
                    "visibility": "public",
                    "signature": "forRequest(Minn\\Db $db, Minn\\Http\\Request $request): self",
                    "doc": "The services for one request, none made yet.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $class): object",
                    "doc": "The service registered under a class name. Only the names in NAMED\nanswer; anything else is a programming error and says so at once.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "class-string<T>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "subjects",
                    "static": false,
                    "visibility": "public",
                    "signature": "subjects(): Minn\\Rest\\Subjects",
                    "doc": "The record lookups the policy gate asks before it judges a caller.",
                    "shapes": [],
                    "params": [],
                    "line": 138,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "db",
                    "static": false,
                    "visibility": "public",
                    "signature": "db(): Minn\\Db",
                    "doc": "The database door.",
                    "shapes": [],
                    "params": [],
                    "line": 144,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "request",
                    "static": false,
                    "visibility": "public",
                    "signature": "request(): Minn\\Http\\Request",
                    "doc": "The request being answered.",
                    "shapes": [],
                    "params": [],
                    "line": 150,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "root",
                    "static": false,
                    "visibility": "public",
                    "signature": "root(): string",
                    "doc": "The site root, no trailing slash.",
                    "shapes": [],
                    "params": [],
                    "line": 156,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "contentDir",
                    "static": false,
                    "visibility": "public",
                    "signature": "contentDir(): string",
                    "doc": "wp-content under the site root.",
                    "shapes": [],
                    "params": [],
                    "line": 162,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "users",
                    "static": false,
                    "visibility": "public",
                    "signature": "users(): Minn\\Content\\Users",
                    "doc": "The users repository.",
                    "shapes": [],
                    "params": [],
                    "line": 170,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "posts",
                    "static": false,
                    "visibility": "public",
                    "signature": "posts(): Minn\\Content\\Posts",
                    "doc": "The posts repository.",
                    "shapes": [],
                    "params": [],
                    "line": 176,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "terms",
                    "static": false,
                    "visibility": "public",
                    "signature": "terms(): Minn\\Content\\Terms",
                    "doc": "The terms repository.",
                    "shapes": [],
                    "params": [],
                    "line": 182,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "comments",
                    "static": false,
                    "visibility": "public",
                    "signature": "comments(): Minn\\Content\\Comments",
                    "doc": "The comments repository.",
                    "shapes": [],
                    "params": [],
                    "line": 188,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "site",
                    "static": false,
                    "visibility": "public",
                    "signature": "site(): Minn\\Content\\Site",
                    "doc": "The site's options.",
                    "shapes": [],
                    "params": [],
                    "line": 194,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "writer",
                    "static": false,
                    "visibility": "public",
                    "signature": "writer(): Minn\\Content\\PostWriter",
                    "doc": "The post writer.",
                    "shapes": [],
                    "params": [],
                    "line": 200,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "revisions",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisions(): Minn\\Content\\Revisions",
                    "doc": "Revisions and autosaves.",
                    "shapes": [],
                    "params": [],
                    "line": 206,
                    "end": 209
                },
                {
                    "routes": [],
                    "name": "userStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "userStyles(): Minn\\Theme\\UserStyles",
                    "doc": "The site editor's saved global styles.",
                    "shapes": [],
                    "params": [],
                    "line": 212,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "themeStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeStyles(): Minn\\Theme\\ThemeStyles",
                    "doc": "The active theme's global styles and variations.",
                    "shapes": [],
                    "params": [],
                    "line": 218,
                    "end": 221
                },
                {
                    "routes": [],
                    "name": "menus",
                    "static": false,
                    "visibility": "public",
                    "signature": "menus(): Minn\\Content\\Menus",
                    "doc": "Classic menus and their items.",
                    "shapes": [],
                    "params": [],
                    "line": 224,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "inventory",
                    "static": false,
                    "visibility": "public",
                    "signature": "inventory(): Minn\\Content\\Inventory",
                    "doc": "What wp-content holds: plugins, themes, drop-ins.",
                    "shapes": [],
                    "params": [],
                    "line": 230,
                    "end": 233
                },
                {
                    "routes": [],
                    "name": "permalinks",
                    "static": false,
                    "visibility": "public",
                    "signature": "permalinks(): Minn\\Front\\Permalinks",
                    "doc": "Link building from the permalink structure.",
                    "shapes": [],
                    "params": [],
                    "line": 238,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": false,
                    "visibility": "public",
                    "signature": "url(): Minn\\Rest\\RestUrl",
                    "doc": "REST URL building.",
                    "shapes": [],
                    "params": [],
                    "line": 244,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "capabilities",
                    "static": false,
                    "visibility": "public",
                    "signature": "capabilities(): Minn\\Auth\\Capabilities",
                    "doc": "The capability engine.",
                    "shapes": [],
                    "params": [],
                    "line": 250,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "caller",
                    "static": false,
                    "visibility": "public",
                    "signature": "caller(): Minn\\Rest\\Caller",
                    "doc": "Who is making this call.",
                    "shapes": [],
                    "params": [],
                    "line": 256,
                    "end": 259
                },
                {
                    "routes": [],
                    "name": "sessions",
                    "static": false,
                    "visibility": "public",
                    "signature": "sessions(): Minn\\Auth\\Sessions",
                    "doc": "The session store.",
                    "shapes": [],
                    "params": [],
                    "line": 262,
                    "end": 265
                },
                {
                    "routes": [],
                    "name": "applicationPasswords",
                    "static": false,
                    "visibility": "public",
                    "signature": "applicationPasswords(): Minn\\Auth\\ApplicationPasswords",
                    "doc": "Application passwords for Basic auth.",
                    "shapes": [],
                    "params": [],
                    "line": 268,
                    "end": 271
                },
                {
                    "routes": [],
                    "name": "loader",
                    "static": false,
                    "visibility": "public",
                    "signature": "loader(): Minn\\Extension\\Loader",
                    "doc": "The extension loader.",
                    "shapes": [],
                    "params": [],
                    "line": 276,
                    "end": 279
                },
                {
                    "routes": [],
                    "name": "types",
                    "static": false,
                    "visibility": "public",
                    "signature": "types(): Minn\\Rest\\Types",
                    "doc": "The post types the REST surface knows.",
                    "shapes": [],
                    "params": [],
                    "line": 282,
                    "end": 285
                },
                {
                    "routes": [],
                    "name": "taxonomies",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomies(): Minn\\Rest\\Taxonomies",
                    "doc": "The taxonomies the REST surface knows.",
                    "shapes": [],
                    "params": [],
                    "line": 288,
                    "end": 291
                },
                {
                    "routes": [],
                    "name": "uploads",
                    "static": false,
                    "visibility": "public",
                    "signature": "uploads(): Minn\\Media\\Uploads",
                    "doc": "The uploads directory.",
                    "shapes": [],
                    "params": [],
                    "line": 294,
                    "end": 297
                },
                {
                    "routes": [],
                    "name": "mediaWriter",
                    "static": false,
                    "visibility": "public",
                    "signature": "mediaWriter(): Minn\\Media\\Writer",
                    "doc": "Stores an upload as an attachment.",
                    "shapes": [],
                    "params": [],
                    "line": 300,
                    "end": 303
                },
                {
                    "routes": [],
                    "name": "schema",
                    "static": false,
                    "visibility": "public",
                    "signature": "schema(): Minn\\Rest\\Schema",
                    "doc": "The JSON Schema validator, with the reference's filters passed in.",
                    "shapes": [],
                    "params": [],
                    "line": 306,
                    "end": 313
                },
                {
                    "routes": [],
                    "name": "app",
                    "static": false,
                    "visibility": "public",
                    "signature": "app(): Minn\\Admin\\App",
                    "doc": "The Minn Admin bundle on disk.",
                    "shapes": [],
                    "params": [],
                    "line": 318,
                    "end": 321
                },
                {
                    "routes": [],
                    "name": "packages",
                    "static": false,
                    "visibility": "public",
                    "signature": "packages(): Minn\\Ops\\Packages",
                    "doc": "Installing and removing themes and extensions.",
                    "shapes": [],
                    "params": [],
                    "line": 324,
                    "end": 327
                },
                {
                    "routes": [],
                    "name": "logs",
                    "static": false,
                    "visibility": "public",
                    "signature": "logs(): Minn\\Ops\\Logs",
                    "doc": "The debug log reader.",
                    "shapes": [],
                    "params": [],
                    "line": 330,
                    "end": 333
                },
                {
                    "routes": [],
                    "name": "updates",
                    "static": false,
                    "visibility": "public",
                    "signature": "updates(): Minn\\Ops\\Updates",
                    "doc": "Update checks and offers.",
                    "shapes": [],
                    "params": [],
                    "line": 336,
                    "end": 339
                },
                {
                    "routes": [],
                    "name": "translations",
                    "static": false,
                    "visibility": "public",
                    "signature": "translations(): Minn\\Admin\\Translations",
                    "doc": "Locales and the app's catalogs.",
                    "shapes": [],
                    "params": [],
                    "line": 342,
                    "end": 345
                },
                {
                    "routes": [],
                    "name": "appearance",
                    "static": false,
                    "visibility": "public",
                    "signature": "appearance(): Minn\\Admin\\Appearance",
                    "doc": "The app's per-user appearance.",
                    "shapes": [],
                    "params": [],
                    "line": 348,
                    "end": 351
                },
                {
                    "routes": [],
                    "name": "hiddenIntegrations",
                    "static": false,
                    "visibility": "public",
                    "signature": "hiddenIntegrations(): Minn\\Admin\\HiddenIntegrations",
                    "doc": "The app's per-user hidden views.",
                    "shapes": [],
                    "params": [],
                    "line": 354,
                    "end": 357
                },
                {
                    "routes": [],
                    "name": "activityFeed",
                    "static": false,
                    "visibility": "public",
                    "signature": "activityFeed(): Minn\\Admin\\ActivityFeed",
                    "doc": "What happened lately.",
                    "shapes": [],
                    "params": [],
                    "line": 360,
                    "end": 363
                },
                {
                    "routes": [],
                    "name": "dashboard",
                    "static": false,
                    "visibility": "public",
                    "signature": "dashboard(): Minn\\Admin\\Dashboard",
                    "doc": "The overview payload.",
                    "shapes": [],
                    "params": [],
                    "line": 366,
                    "end": 369
                },
                {
                    "routes": [],
                    "name": "releases",
                    "static": false,
                    "visibility": "public",
                    "signature": "releases(): Minn\\Ops\\Releases",
                    "doc": "Minn's own releases, asked of GitHub once a day.",
                    "shapes": [],
                    "params": [],
                    "line": 372,
                    "end": 375
                },
                {
                    "routes": [],
                    "name": "engineChangelog",
                    "static": false,
                    "visibility": "public",
                    "signature": "engineChangelog(): Minn\\Ops\\Changelog",
                    "doc": "Minn's changelog, read from its repository.",
                    "shapes": [],
                    "params": [],
                    "line": 378,
                    "end": 381
                },
                {
                    "routes": [],
                    "name": "adminChangelog",
                    "static": false,
                    "visibility": "public",
                    "signature": "adminChangelog(): Minn\\Ops\\Changelog",
                    "doc": "Minn Admin's changelog, read from its repository.",
                    "shapes": [],
                    "params": [],
                    "line": 384,
                    "end": 387
                },
                {
                    "routes": [],
                    "name": "coreStatus",
                    "static": false,
                    "visibility": "public",
                    "signature": "coreStatus(): Minn\\Ops\\CoreStatus",
                    "doc": "Minn's version and the release on offer, behind the app's update banner.",
                    "shapes": [],
                    "params": [],
                    "line": 390,
                    "end": 393
                },
                {
                    "routes": [],
                    "name": "engineUpdate",
                    "static": false,
                    "visibility": "public",
                    "signature": "engineUpdate(): Minn\\Ops\\EngineUpdate",
                    "doc": "The engine replacing itself with a release.",
                    "shapes": [],
                    "params": [],
                    "line": 396,
                    "end": 399
                },
                {
                    "routes": [],
                    "name": "notifications",
                    "static": false,
                    "visibility": "public",
                    "signature": "notifications(): Minn\\Admin\\Notifications",
                    "doc": "The bell feed.",
                    "shapes": [],
                    "params": [],
                    "line": 402,
                    "end": 405
                },
                {
                    "routes": [],
                    "name": "diagnostics",
                    "static": false,
                    "visibility": "public",
                    "signature": "diagnostics(): Minn\\Ops\\Diagnostics",
                    "doc": "The System view's payload.",
                    "shapes": [],
                    "params": [],
                    "line": 408,
                    "end": 411
                },
                {
                    "routes": [],
                    "name": "templates",
                    "static": false,
                    "visibility": "public",
                    "signature": "templates(): ?Minn\\Theme\\TemplateIndex",
                    "doc": "The active block theme's templates; null under a classic theme, where the routes answer as the reference does when it never registered them.",
                    "shapes": [],
                    "params": [],
                    "line": 416,
                    "end": 423
                },
                {
                    "routes": [],
                    "name": "templateWriter",
                    "static": false,
                    "visibility": "public",
                    "signature": "templateWriter(): ?Minn\\Theme\\TemplateWriter",
                    "doc": "Writes block templates; null under a classic theme.",
                    "shapes": [],
                    "params": [],
                    "line": 426,
                    "end": 430
                },
                {
                    "routes": [],
                    "name": "postObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "postObject(): Minn\\Rest\\PostObject",
                    "doc": "The wp/v2 post shape.",
                    "shapes": [],
                    "params": [],
                    "line": 435,
                    "end": 438
                },
                {
                    "routes": [],
                    "name": "termObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "termObject(): Minn\\Rest\\TermObject",
                    "doc": "The wp/v2 term shape.",
                    "shapes": [],
                    "params": [],
                    "line": 441,
                    "end": 444
                },
                {
                    "routes": [],
                    "name": "userObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "userObject(): Minn\\Rest\\UserObject",
                    "doc": "The wp/v2 user shape.",
                    "shapes": [],
                    "params": [],
                    "line": 447,
                    "end": 450
                },
                {
                    "routes": [],
                    "name": "mediaObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "mediaObject(): Minn\\Rest\\MediaObject",
                    "doc": "The wp/v2 media shape.",
                    "shapes": [],
                    "params": [],
                    "line": 453,
                    "end": 456
                },
                {
                    "routes": [],
                    "name": "commentObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "commentObject(): Minn\\Rest\\CommentObject",
                    "doc": "The wp/v2 comment shape.",
                    "shapes": [],
                    "params": [],
                    "line": 459,
                    "end": 462
                },
                {
                    "routes": [],
                    "name": "share",
                    "static": false,
                    "visibility": "private",
                    "signature": "share(string $name, Closure $make): object",
                    "doc": "",
                    "shapes": [
                        "@param Closure(): T $make"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "class-string<T>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "make",
                            "type": "Closure",
                            "shape": "Closure(): T",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 470,
                    "end": 474
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Settings",
            "short": "Settings",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/Settings.php",
            "lines": 113,
            "doc": "The registered settings the Settings views read and write, mapped to\nthe options WordPress stores. Registration order is the payload order.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Rest\\SchemaValues"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\SettingsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 77,
                "end": 79
            },
            "cases": [],
            "constants": [
                {
                    "name": "REGISTRY",
                    "value": "array (   'blog_public' =>    array (     0 => 'blog_public',     1 => 'int',   ),   'minn_admin_maintenance' =>    array (     0 => 'minn_admin_maintenance',     1 => 'bool',   ),   'users_can_register' =>    array (     0 => 'users_can_register',     1 => 'int',   ),   'default_role' =>    array (     0 => 'default_role',     1 => 'string',   ),   'comment_moderation' =>    array (     0 => 'comment_moderation',     1 => 'int',   ),   'comment_registration' =>    array (     0 => 'comment_registration',     1 => 'int',   ),   'show_avatars' =>    array (     0 => 'show_avatars',     1 => 'int',   ),   'title' =>    array (     0 => 'blogname',     1 => 'string',   ),   'description' =>    array (     0 => 'blogdescription',     1 => 'string',   ),   'url' =>    array (     0 => 'siteurl',     1 => 'string',   ),   'email' =>    array (     0 => 'admin_email',     1 => 'string',   ),   'timezone' =>    array (     0 => 'timezone_string',     1 => 'string',   ),   'date_format' =>    array (     0 => 'date_format',     1 => 'string',   ),   'time_format' =>    array (     0 => 'time_format',     1 => 'string',   ),   'start_of_week' =>    array (     0 => 'start_of_week',     1 => 'int',   ),   'language' =>    array (     0 => 'WPLANG',     1 => 'language',   ),   'use_smilies' =>    array (     0 => 'use_smilies',     1 => 'bool',   ),   'default_category' =>    array (     0 => 'default_category',     1 => 'int',   ),   'default_post_format' =>    array (     0 => 'default_post_format',     1 => 'string',   ),   'posts_per_page' =>    array (     0 => 'posts_per_page',     1 => 'int',   ),   'show_on_front' =>    array (     0 => 'show_on_front',     1 => 'string',   ),   'page_on_front' =>    array (     0 => 'page_on_front',     1 => 'int',   ),   'page_for_posts' =>    array (     0 => 'page_for_posts',     1 => 'int',   ),   'default_ping_status' =>    array (     0 => 'default_ping_status',     1 => 'string',   ),   'default_comment_status' =>    array (     0 => 'default_comment_status',     1 => 'string',   ),   'site_logo' =>    array (     0 => 'site_logo',     1 => 'int_or_null',   ),   'site_icon' =>    array (     0 => 'site_icon',     1 => 'int',   ), )",
                    "doc": "setting key => [option name, type]",
                    "visibility": "private"
                },
                {
                    "name": "SCHEMA",
                    "value": "array (   'blog_public' =>    array (     'title' => '',     'description' => '',     'type' => 'integer',     'required' => false,   ),   'minn_admin_maintenance' =>    array (     'title' => '',     'description' => '',     'type' => 'boolean',     'required' => false,   ),   'users_can_register' =>    array (     'title' => '',     'description' => '',     'type' => 'integer',     'required' => false,   ),   'default_role' =>    array (     'title' => '',     'description' => '',     'type' => 'string',     'required' => false,   ),   'comment_moderation' =>    array (     'title' => '',     'description' => '',     'type' => 'integer',     'required' => false,   ),   'comment_registration' =>    array (     'title' => '',     'description' => '',     'type' => 'integer',     'required' => false,   ),   'show_avatars' =>    array (     'title' => '',     'description' => '',     'type' => 'integer',     'required' => false,   ),   'title' =>    array (     'title' => 'Title',     'description' => 'Site title.',     'type' => 'string',     'required' => false,   ),   'description' =>    array (     'title' => 'Tagline',     'description' => 'Site tagline.',     'type' => 'string',     'required' => false,   ),   'url' =>    array (     'title' => '',     'description' => 'Site URL.',     'type' => 'string',     'format' => 'uri',     'required' => false,   ),   'email' =>    array (     'title' => '',     'description' => 'This address is used for admin purposes, like new user notification.',     'type' => 'string',     'format' => 'email',     'required' => false,   ),   'timezone' =>    array (     'title' => '',     'description' => 'A city in the same timezone as you.',     'type' => 'string',     'required' => false,   ),   'date_format' =>    array (     'title' => '',     'description' => 'A date format for all date strings.',     'type' => 'string',     'required' => false,   ),   'time_format' =>    array (     'title' => '',     'description' => 'A time format for all time strings.',     'type' => 'string',     'required' => false,   ),   'start_of_week' =>    array (     'title' => '',     'description' => 'A day number of the week that the week should start on.',     'type' => 'integer',     'required' => false,   ),   'language' =>    array (     'title' => '',     'description' => 'WordPress locale code.',     'type' => 'string',     'required' => false,   ),   'use_smilies' =>    array (     'title' => '',     'description' => 'Convert emoticons like :-) and :-P to graphics on display.',     'type' => 'boolean',     'required' => false,   ),   'default_category' =>    array (     'title' => '',     'description' => 'Default post category.',     'type' => 'integer',     'required' => false,   ),   'default_post_format' =>    array (     'title' => '',     'description' => 'Default post format.',     'type' => 'string',     'required' => false,   ),   'posts_per_page' =>    array (     'title' => 'Maximum posts per page',     'description' => 'Blog pages show at most.',     'type' => 'integer',     'required' => false,   ),   'show_on_front' =>    array (     'title' => 'Show on front',     'description' => 'What to show on the front page',     'type' => 'string',     'required' => false,   ),   'page_on_front' =>    array (     'title' => 'Page on front',     'description' => 'The ID of the page that should be displayed on the front page',     'type' => 'integer',     'required' => false,   ),   'page_for_posts' =>    array (     'title' => '',     'description' => 'The ID of the page that should display the latest posts',     'type' => 'integer',     'required' => false,   ),   'default_ping_status' =>    array (     'title' => '',     'description' => 'Allow link notifications from other blogs (pingbacks and trackbacks) on new articles.',     'type' => 'string',     'enum' =>      array (       0 => 'open',       1 => 'closed',     ),     'required' => false,   ),   'default_comment_status' =>    array (     'title' => 'Allow comments on new posts',     'description' => 'Allow people to submit comments on new posts.',     'type' => 'string',     'enum' =>      array (       0 => 'open',       1 => 'closed',     ),     'required' => false,   ),   'site_logo' =>    array (     'title' => 'Logo',     'description' => 'Site logo.',     'type' => 'integer',     'required' => false,   ),   'site_icon' =>    array (     'title' => 'Icon',     'description' => 'Site icon.',     'type' => 'integer',     'required' => false,   ), )",
                    "doc": "The body of a write, every registered setting by its key, as the reference describes it.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "payload",
                    "static": false,
                    "visibility": "public",
                    "signature": "payload(): array",
                    "doc": "Every registered setting with its current value.",
                    "shapes": [],
                    "params": [],
                    "line": 82,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "store",
                    "static": false,
                    "visibility": "public",
                    "signature": "store(array $body): void",
                    "doc": "Writes the registered keys in a body, already validated against\nSCHEMA, in the stored form; unregistered keys are ignored. Without\nplugins loaded there is nobody to tell (LiveSettings writes through\nupdate_option when there is).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 124
                }
            ]
        },
        {
            "name": "Minn\\Rest\\SettingsController",
            "short": "SettingsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/SettingsController.php",
            "lines": 32,
            "doc": "wp/v2/settings: read and write, both behind manage_options; with plugins loaded, every registered setting (LiveSettings).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\LiveSettings",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\Settings",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\Settings $settings, Minn\\Rest\\Caller $caller, Minn\\Rest\\LiveSettings $live)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "settings",
                        "type": "Minn\\Rest\\Settings",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "live",
                        "type": "Minn\\Rest\\LiveSettings",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 24
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "settings",
                    "type": "Minn\\Rest\\Settings",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "live",
                    "type": "Minn\\Rest\\LiveSettings",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/settings (signed in)",
                        "POST /wp/v2/settings (signed in)",
                        "PUT /wp/v2/settings (signed in)",
                        "PATCH /wp/v2/settings (signed in)"
                    ],
                    "name": "settings",
                    "static": false,
                    "visibility": "public",
                    "signature": "settings(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The site settings: read, or write from the body.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Rest\\SidebarsController",
            "short": "SidebarsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/SidebarsController.php",
            "lines": 206,
            "doc": "wp/v2/sidebars and wp/v2/widget-types as the reference answers them\n(probe rest-widgets), for anyone who can edit theme options. A sidebar\nis a registered one or the inactive widgets, with its wrapping markup,\nthe registered widgets it holds, and its status: active when registered\nunder a classic theme (a block theme renders none). Saving a sidebar's\nwidgets takes them from any other sidebar and sends the ones it drops to\nthe inactive widgets. The widget types are the registered widgets by id\nbase, in id order.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\WidgetAreas"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 33,
                "end": 35
            },
            "cases": [],
            "constants": [
                {
                    "name": "BODY",
                    "value": "array (   'widgets' =>    array (     'description' => 'Nested widgets.',     'type' => 'array',     'items' =>      array (       'type' =>        array (         0 => 'object',         1 => 'string',       ),     ),     'required' => false,   ), )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "REFUSAL",
                    "value": "'Sorry, you are not allowed to manage widgets on this site.'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/sidebars (public)"
                    ],
                    "name": "sidebars",
                    "static": false,
                    "visibility": "public",
                    "signature": "sidebars(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Every sidebar: those the sidebars option lists, then any other\nregistered one. Someone who cannot edit theme options sees only the\nsidebars shown in REST, and is refused when there are none (probe\nrest-sidebar-classes).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 59
                },
                {
                    "routes": [
                        "GET /wp/v2/sidebars/{id:[\\w-]+} (public)"
                    ],
                    "name": "sidebar",
                    "static": false,
                    "visibility": "public",
                    "signature": "sidebar(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One sidebar: anyone's to read when it is shown in REST, otherwise for someone who can edit theme options.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 71
                },
                {
                    "routes": [
                        "POST /wp/v2/sidebars/{id:[\\w-]+} (cap edit_theme_options)",
                        "PUT /wp/v2/sidebars/{id:[\\w-]+} (cap edit_theme_options)",
                        "PATCH /wp/v2/sidebars/{id:[\\w-]+} (cap edit_theme_options)"
                    ],
                    "name": "save",
                    "static": false,
                    "visibility": "public",
                    "signature": "save(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Saves a sidebar's widgets, in the order given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 94
                },
                {
                    "routes": [
                        "GET /wp/v2/widget-types (cap edit_theme_options)"
                    ],
                    "name": "types",
                    "static": false,
                    "visibility": "public",
                    "signature": "types(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The registered widget types, by id base.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 105
                },
                {
                    "routes": [
                        "GET /wp/v2/widget-types/{id:[a-zA-Z0-9_-]+} (cap edit_theme_options)"
                    ],
                    "name": "widgetType",
                    "static": false,
                    "visibility": "public",
                    "signature": "widgetType(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One widget type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 117
                },
                {
                    "routes": [
                        "POST /wp/v2/widget-types/{id:[a-zA-Z0-9_-]+}/encode (cap edit_theme_options)"
                    ],
                    "name": "encode",
                    "static": false,
                    "visibility": "public",
                    "signature": "encode(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "A widget type's form and preview for settings that are not saved: the\nsettings sent (encoded with their hash) updated from the form's\nfields, the form for them (number -1 unless one is sent), the widget\nas the_widget shows it, and the settings encoded again.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 126,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "ready",
                    "static": true,
                    "visibility": "public",
                    "signature": "ready(): void",
                    "doc": "The widgets are registered on init; a runtime that stopped short of it\nregisters them now. Without the runtime there are no widgets to serve.",
                    "shapes": [],
                    "params": [],
                    "line": 163,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "private",
                    "signature": "item(string $id): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 174,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "type",
                    "static": false,
                    "visibility": "private",
                    "signature": "type(WP_Widget $widget): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 200,
                    "end": 214
                },
                {
                    "routes": [],
                    "name": "widgetTypes",
                    "static": true,
                    "visibility": "private",
                    "signature": "widgetTypes(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, \\WP_Widget> by id base, in id order"
                    ],
                    "params": [],
                    "line": 217,
                    "end": 225
                },
                {
                    "routes": [],
                    "name": "requireSidebar",
                    "static": true,
                    "visibility": "private",
                    "signature": "requireSidebar(string $id): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 232
                }
            ]
        },
        {
            "name": "Minn\\Rest\\StatusesController",
            "short": "StatusesController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/StatusesController.php",
            "lines": 97,
            "doc": "wp/v2/statuses as the reference answers it (probe rest-statuses): every\npost status that is not internal, a plugin's beside core's, by name,\nand trash last. A visitor sees the public ones; someone who can edit a\ntype shown in REST sees them all, and only they may ask for the edit\ncontext of the list.\nEach status links to its posts and goes through rest_prepare_status.\nLike wp/v2/types, the list is keyed by name, so _fields over the whole\nof it keeps nothing.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Runtime\\Registry",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 37,
                "end": 39
            },
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   'embed' =>    array (     0 => 'name',     1 => 'slug',   ),   'view' =>    array (     0 => 'name',     1 => 'public',     2 => 'queryable',     3 => 'slug',     4 => 'date_floating',   ),   'edit' =>    array (     0 => 'name',     1 => 'private',     2 => 'protected',     3 => 'public',     4 => 'queryable',     5 => 'show_in_list',     6 => 'slug',     7 => 'date_floating',   ), )",
                    "doc": "The fields each context shows, in the reference's order.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/statuses (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The statuses the caller may see.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 59
                },
                {
                    "routes": [
                        "GET /wp/v2/statuses/{status:[\\w-]+} (public)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $status): Minn\\Http\\Response",
                    "doc": "One status.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "private",
                    "signature": "item(string $name, array $status, array $fields): array",
                    "doc": "A status as the reference shows it, its link to its posts after its fields.",
                    "shapes": [
                        "@param array<string, mixed> $status",
                        "@param list<string> $fields",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "readable",
                    "static": false,
                    "visibility": "private",
                    "signature": "readable(string $name, array $status): bool",
                    "doc": "Whether the caller may see a status: a public one, or (for someone\nwho edits a type shown in REST) any but an internal one; trash counts\nas not internal.",
                    "shapes": [
                        "@param array<string, mixed> $status"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "statuses",
                    "static": true,
                    "visibility": "private",
                    "signature": "statuses(): array",
                    "doc": "Every registered status: a plugin's too once plugins are loaded. @return array<string, array<string, mixed>>",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 114,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "context",
                    "static": true,
                    "visibility": "private",
                    "signature": "context(Minn\\Http\\Request $request): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 123
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Subjects",
            "short": "Subjects",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/Subjects.php",
            "lines": 53,
            "doc": "Whether the record a route capture names exists, for the policy gate to\nask before it judges the caller. A post kind reads its type from the\n{base} capture when the route has one, a term kind its taxonomy; the\nfixed kinds name their own. Status is not consulted: a trashed post\nexists, and what the caller may do with it is the policy's question.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts",
                "Minn\\Db",
                "Minn\\Http\\Subject"
            ],
            "usedBy": [
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 22,
                "end": 24
            },
            "cases": [],
            "constants": [
                {
                    "name": "POST_TYPES",
                    "value": "array (   'posts' => 'post',   'pages' => 'page',   'blocks' => 'wp_block',   'media' => 'attachment',   'navigation' => 'wp_navigation',   'menu-items' => 'nav_menu_item', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TAXONOMIES",
                    "value": "array (   'categories' => 'category',   'tags' => 'post_tag',   'wp_pattern_category' => 'wp_pattern_category', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "exists",
                    "static": false,
                    "visibility": "public",
                    "signature": "exists(Minn\\Http\\Subject $subject, int $id, array $captures): bool",
                    "doc": "Whether the record exists.",
                    "shapes": [
                        "@param array<string, string> $captures the route's captures, for the {base} a kind reads"
                    ],
                    "params": [
                        {
                            "name": "subject",
                            "type": "Minn\\Http\\Subject",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "the route's captures, for the {base} a kind reads"
                        }
                    ],
                    "line": 31,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "postOfType",
                    "static": false,
                    "visibility": "public",
                    "signature": "postOfType(int $id, string $type): bool",
                    "doc": "Whether a post of the type exists.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "termOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "termOf(int $id, string $taxonomy): bool",
                    "doc": "Whether a term of the taxonomy exists.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "post",
                    "static": false,
                    "visibility": "private",
                    "signature": "post(int $id, string $type): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": false,
                    "visibility": "private",
                    "signature": "term(int $id, string $taxonomy): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 68
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Taxonomies",
            "short": "Taxonomies",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Taxonomies.php",
            "lines": 48,
            "doc": "The taxonomy registry the wp/v2 surface describes: the core set seeded\nfrom the reference (data/taxonomies.json) with the reference's own\nlabels, capabilities, and visibility flags.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Rest\\RestUrl"
            ],
            "usedBy": [
                "Minn\\Admin\\StructureController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "taxonomies",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every taxonomy the surface knows, by slug.",
                    "shapes": [
                        "@return array<string, array> keyed by taxonomy slug"
                    ],
                    "params": [],
                    "line": 27,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(string $slug): ?array",
                    "doc": "One taxonomy by slug, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "forType",
                    "static": false,
                    "visibility": "public",
                    "signature": "forType(string $type): array",
                    "doc": "The taxonomies attached to a post type, in registry order. @return array<string, array>",
                    "shapes": [
                        "@return array<string, array>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "view",
                    "static": true,
                    "visibility": "public",
                    "signature": "view(array $taxonomy): array",
                    "doc": "The reference's view-context projection: the keys an anonymous reader sees.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 60
                }
            ]
        },
        {
            "name": "Minn\\Rest\\TemplateObject",
            "short": "TemplateObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/TemplateObject.php",
            "lines": 101,
            "doc": "The wp/v2/templates and wp/v2/template-parts resource.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\RestUrl",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplateRecord"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\TemplatesController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Theme\\TemplateIndex $index, Minn\\Content\\Posts $posts, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "index",
                        "type": "Minn\\Theme\\TemplateIndex",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 14,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "index",
                    "type": "Minn\\Theme\\TemplateIndex",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "base",
                    "static": false,
                    "visibility": "public",
                    "signature": "base(string $type): string",
                    "doc": "The rest_base of a template type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(Minn\\Theme\\TemplateRecord $record, Minn\\Rest\\Context $context, ?string $as = NULL): array",
                    "doc": "The wp/v2 template shape.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": false,
                    "visibility": "private",
                    "signature": "links(Minn\\Theme\\TemplateRecord $record, string $as): array",
                    "doc": "The write links and their curies show only to a caller who could use\nthem; a reader who may list templates but not change them sees a\nself link that allows GET and nothing else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 111
                }
            ]
        },
        {
            "name": "Minn\\Rest\\TemplatesController",
            "short": "TemplatesController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/TemplatesController.php",
            "lines": 324,
            "doc": "wp/v2/templates and wp/v2/template-parts: the block theme's templates as\none list, whether they come from the theme's files, from a row the site\nsaved over one, or from a plugin. Reading needs only edit_posts (the\nreference lets an editor or author see the layout); changing anything\nneeds edit_theme_options.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Slug",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplateRecord",
                "Minn\\Theme\\TemplateWriter"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Theme\\TemplateIndex $index, Minn\\Theme\\TemplateWriter $writer, Minn\\Rest\\TemplateObject $object, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "index",
                        "type": "Minn\\Theme\\TemplateIndex",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writer",
                        "type": "Minn\\Theme\\TemplateWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\TemplateObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 50,
                "end": 56
            },
            "cases": [],
            "constants": [
                {
                    "name": "CREATE_BODY",
                    "value": "array (   'slug' =>    array (     'description' => 'Unique slug identifying the template.',     'type' => 'string',     'minLength' => 1,     'pattern' => '[a-zA-Z0-9_\\\\%-]+',     'required' => true,   ), )",
                    "doc": "What creating a template must send (the reference's create arguments).",
                    "visibility": "private"
                },
                {
                    "name": "LOOKUP",
                    "value": "array (   'slug' =>    array (     'description' => 'The slug of the template to get the fallback for',     'type' => 'string',     'required' => true,   ),   'is_custom' =>    array (     'description' => 'Indicates if a template is custom or part of the template hierarchy',     'type' => 'boolean',     'required' => false,   ),   'template_prefix' =>    array (     'description' => 'The template prefix for the created template. This is used to extract the main template type, e.g. in `taxonomy-books` extracts the `taxonomy`',     'type' => 'string',     'required' => false,   ), )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "LIST",
                    "value": "array (   'wp_id' =>    array (     'description' => 'Limit to the specified post id.',     'type' => 'integer',   ),   'area' =>    array (     'description' => 'Limit to the specified template part area.',     'type' => 'string',   ),   'post_type' =>    array (     'description' => 'Post type to get the templates for.',     'type' => 'string',   ), )",
                    "doc": "The list filters both routes take, as the reference declares them.",
                    "visibility": "private"
                },
                {
                    "name": "READ_CAP",
                    "value": "'edit_posts'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "WRITE_CAP",
                    "value": "'edit_theme_options'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "REFUSAL",
                    "value": "'Sorry, you are not allowed to access the templates on this site.'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "index",
                    "type": "Minn\\Theme\\TemplateIndex",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writer",
                    "type": "Minn\\Theme\\TemplateWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\TemplateObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/templates (cap edit_posts)"
                    ],
                    "name": "templates",
                    "static": false,
                    "visibility": "public",
                    "signature": "templates(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The templates list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                },
                {
                    "routes": [
                        "GET /wp/v2/template-parts (cap edit_posts)"
                    ],
                    "name": "parts",
                    "static": false,
                    "visibility": "public",
                    "signature": "parts(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The template parts list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [
                        "GET /wp/v2/templates/lookup (cap edit_posts)"
                    ],
                    "name": "lookupTemplate",
                    "static": false,
                    "visibility": "public",
                    "signature": "lookupTemplate(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The template a slug would use: the first in its hierarchy the theme or the site has.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 77
                },
                {
                    "routes": [
                        "GET /wp/v2/template-parts/lookup (cap edit_posts)"
                    ],
                    "name": "lookupPart",
                    "static": false,
                    "visibility": "public",
                    "signature": "lookupPart(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The same lookup under the parts route: it searches templates, not parts, as the reference's does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 84
                },
                {
                    "routes": [
                        "GET /wp/v2/templates/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts)"
                    ],
                    "name": "template",
                    "static": false,
                    "visibility": "public",
                    "signature": "template(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One template.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [
                        "GET /wp/v2/template-parts/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts)"
                    ],
                    "name": "part",
                    "static": false,
                    "visibility": "public",
                    "signature": "part(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One template part.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 98
                },
                {
                    "routes": [
                        "POST /wp/v2/templates (cap edit_posts + edit_theme_options)"
                    ],
                    "name": "createTemplate",
                    "static": false,
                    "visibility": "public",
                    "signature": "createTemplate(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Creates a template.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 105
                },
                {
                    "routes": [
                        "POST /wp/v2/template-parts (cap edit_posts + edit_theme_options)"
                    ],
                    "name": "createPart",
                    "static": false,
                    "visibility": "public",
                    "signature": "createPart(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Creates a template part.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 112
                },
                {
                    "routes": [
                        "POST /wp/v2/templates/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)",
                        "PUT /wp/v2/templates/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)",
                        "PATCH /wp/v2/templates/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)"
                    ],
                    "name": "saveTemplate",
                    "static": false,
                    "visibility": "public",
                    "signature": "saveTemplate(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Saves a template.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 121
                },
                {
                    "routes": [
                        "POST /wp/v2/template-parts/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)",
                        "PUT /wp/v2/template-parts/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)",
                        "PATCH /wp/v2/template-parts/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)"
                    ],
                    "name": "savePart",
                    "static": false,
                    "visibility": "public",
                    "signature": "savePart(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Saves a template part.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 130
                },
                {
                    "routes": [
                        "DELETE /wp/v2/templates/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)"
                    ],
                    "name": "deleteTemplate",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteTemplate(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Deletes a customised template.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 137
                },
                {
                    "routes": [
                        "DELETE /wp/v2/template-parts/{id:([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+} (cap edit_posts + edit_theme_options)"
                    ],
                    "name": "deletePart",
                    "static": false,
                    "visibility": "public",
                    "signature": "deletePart(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Deletes a customised template part.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "listing",
                    "static": false,
                    "visibility": "private",
                    "signature": "listing(Minn\\Http\\Request $request, string $type): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "listed",
                    "static": false,
                    "visibility": "private",
                    "signature": "listed(Minn\\Theme\\TemplateRecord $record, array $query, Minn\\Theme\\TemplateIndex $index): bool",
                    "doc": "Whether a record passes the list's filters (probe patch-security):\nwp_id matches only a stored one with that id, so a theme file (wp_id 0)\nnever does; post_type keeps templates that declare that type; area\nkeeps parts in that area. Each filter applies only where it means\nsomething.",
                    "shapes": [
                        "@param array<string, mixed> $query"
                    ],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "index",
                            "type": "Minn\\Theme\\TemplateIndex",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 181
                },
                {
                    "routes": [],
                    "name": "lookup",
                    "static": false,
                    "visibility": "private",
                    "signature": "lookup(Minn\\Http\\Request $request, string $as): Minn\\Http\\Response",
                    "doc": "The first template in the slug's hierarchy that exists, shown as the\nroute's own type shows an item (the parts route searches templates\ntoo, as the reference's does); the plugins' templates count once\nplugins are loaded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "as",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "single",
                    "static": false,
                    "visibility": "private",
                    "signature": "single(Minn\\Http\\Request $request, string $type, string $id): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 214
                },
                {
                    "routes": [],
                    "name": "save",
                    "static": false,
                    "visibility": "private",
                    "signature": "save(Minn\\Http\\Request $request, string $type, string $id): Minn\\Http\\Response",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 225
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": false,
                    "visibility": "private",
                    "signature": "create(Minn\\Http\\Request $request, string $type): Minn\\Http\\Response",
                    "doc": "A new template from the collection (probe rest-template-create): its\nslug sanitised and made unique among the site's own copies of the\ntype (-2, -3...). A slug only a theme file holds makes the site's copy\nof that file, blank but for what the body sends. Whatever status is\nasked for, it is published; the answer is in the request's context.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 234,
                    "end": 248
                },
                {
                    "routes": [],
                    "name": "fields",
                    "static": false,
                    "visibility": "private",
                    "signature": "fields(array $body): array",
                    "doc": "The fields a write sets, those the body sends.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 267
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "private",
                    "signature": "delete(Minn\\Http\\Request $request, string $type, string $id): Minn\\Http\\Response",
                    "doc": "Removing a template means removing the site's own copy of it. Without\nforce that copy goes to the trash, which already hands the theme's\nfile back; with force the row goes for good. A template that exists\nonly as a theme file has nothing to remove.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 275,
                    "end": 290
                },
                {
                    "routes": [],
                    "name": "trashed",
                    "static": false,
                    "visibility": "private",
                    "signature": "trashed(Minn\\Theme\\TemplateRecord $record): Minn\\Theme\\TemplateRecord",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 292,
                    "end": 312
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": false,
                    "visibility": "private",
                    "signature": "record(string $type, string $id): Minn\\Theme\\TemplateRecord",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 314,
                    "end": 321
                },
                {
                    "routes": [],
                    "name": "readable",
                    "static": false,
                    "visibility": "private",
                    "signature": "readable(): Minn\\Theme\\TemplateIndex",
                    "doc": "Reading the layout is an editor's business, not only an administrator's.",
                    "shapes": [],
                    "params": [],
                    "line": 324,
                    "end": 333
                },
                {
                    "routes": [],
                    "name": "requireWrite",
                    "static": false,
                    "visibility": "private",
                    "signature": "requireWrite(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 335,
                    "end": 341
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": false,
                    "visibility": "private",
                    "signature": "text(mixed $value): ?string",
                    "doc": "A title or content field arrives either bare or as the raw member of its object.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 344,
                    "end": 350
                }
            ]
        },
        {
            "name": "Minn\\Rest\\TermCollectionParams",
            "short": "TermCollectionParams",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/TermCollectionParams.php",
            "lines": 13,
            "doc": "A taxonomy's term list parameters as the reference declares them (probe\nrest-term-lists): the context and Args::TERMS, a hierarchical taxonomy's\nwith a parent and no offset, a flat one's with an offset and no parent.\nPlugins change them through rest_{taxonomy}_collection_params when the\nlist runs.",
            "implements": [
                "Minn\\Http\\RouteParams"
            ],
            "extends": null,
            "uses": [
                "Minn\\Http\\Args",
                "Minn\\Http\\RouteMiss",
                "Minn\\Http\\RouteParams",
                "Minn\\Rest\\TermObject"
            ],
            "usedBy": [
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\TermsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "for",
                    "static": true,
                    "visibility": "public",
                    "signature": "for(array $captures): array",
                    "doc": "The parameters of the list a {base} capture names; none for a base no REST taxonomy has.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 29
                }
            ]
        },
        {
            "name": "Minn\\Rest\\TermFilters",
            "short": "TermFilters",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/TermFilters.php",
            "lines": 25,
            "doc": "A term a REST read answers with, as plugin code filters it on the\nreference (probe rest-term-filters): through get_term and\nget_{taxonomy}. What a filter changes (a count, a name) is what the\nanswer shows. Without the runtime, or with nothing hooked, the engine's\nown row stands. (Lists run get_terms itself.)",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\TermRecord",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\TermsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "one",
                    "static": true,
                    "visibility": "public",
                    "signature": "one(Minn\\Content\\TermRecord $term, string $taxonomy): Minn\\Content\\TermRecord",
                    "doc": "A term as get_term hands it back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "record",
                    "static": true,
                    "visibility": "private",
                    "signature": "record(WP_Term $object, Minn\\Content\\TermRecord $term): Minn\\Content\\TermRecord",
                    "doc": "The record with the fields a filter may have changed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Term",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 40
                }
            ]
        },
        {
            "name": "Minn\\Rest\\TermListArgs",
            "short": "TermListArgs",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/TermListArgs.php",
            "lines": 28,
            "doc": "The get_terms arguments a term list request makes, as the reference\nmakes them before rest_{taxonomy}_query (probe rest-term-lists): the\ntaxonomy, each declared parameter the request carries under its query\nname (include_slugs ordering as slug__in), the offset (the page's unless\nthe list takes one and it is given), the parent a hierarchical list\ntakes, and ids alone for a HEAD request.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\TermsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAPPINGS",
                    "value": "array (   'exclude' => 'exclude',   'include' => 'include',   'order' => 'order',   'orderby' => 'orderby',   'post' => 'post',   'hide_empty' => 'hide_empty',   'per_page' => 'number',   'search' => 'search',   'slug' => 'slug', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(WP_REST_Request $wp, array $registered, string $taxonomy, string $method): array",
                    "doc": "The arguments before plugins see them.",
                    "shapes": [
                        "@param array<string, mixed> $registered the collection, as rest_{taxonomy}_collection_params left it",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "wp",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the collection, as rest_{taxonomy}_collection_params left it"
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "method",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 41
                }
            ]
        },
        {
            "name": "Minn\\Rest\\TermObject",
            "short": "TermObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/TermObject.php",
            "lines": 107,
            "doc": "The wp/v2 category and tag objects.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\TermRecord",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Http\\RouteMiss",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\TermCollectionParams",
                "Minn\\Rest\\TermsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 29
            },
            "cases": [],
            "constants": [
                {
                    "name": "TAXONOMIES",
                    "value": "array (   'categories' =>    array (     'taxonomy' => 'category',     'has_parent' => true,     'post_arg' => 'categories',     'post_base' => 'posts',   ),   'tags' =>    array (     'taxonomy' => 'post_tag',     'has_parent' => false,     'post_arg' => 'tags',     'post_base' => 'posts',   ),   'wp_pattern_category' =>    array (     'taxonomy' => 'wp_pattern_category',     'has_parent' => false,     'post_arg' => 'wp_pattern_category',     'post_base' => 'blocks',   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(Minn\\Content\\TermRecord $term, string $restBase): array",
                    "doc": "A term as its REST base shows it, through rest_prepare_{taxonomy} when a plugin hooks it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "restBase",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": false,
                    "visibility": "public",
                    "signature": "url(): Minn\\Rest\\RestUrl",
                    "doc": "The REST URL builder.",
                    "shapes": [],
                    "params": [],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "config",
                    "static": true,
                    "visibility": "public",
                    "signature": "config(string $restBase): array",
                    "doc": "The taxonomy behind a rest_base.",
                    "shapes": [
                        "@return array{taxonomy: string, has_parent: bool, post_arg: string, post_base: string}"
                    ],
                    "params": [
                        {
                            "name": "restBase",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "registered",
                    "static": true,
                    "visibility": "public",
                    "signature": "registered(string $restBase): ?array",
                    "doc": "A taxonomy plugin code registered to show in REST under wp/v2, by its\nREST base (probe rest-plugin-types), as a term route's config: its\nterms nest when it is hierarchical, and its posts are those of the\nfirst type it belongs to.",
                    "shapes": [
                        "@return array{taxonomy: string, has_parent: bool, post_arg: string, post_base: string}|null"
                    ],
                    "params": [
                        {
                            "name": "restBase",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "viewFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "viewFields(Minn\\Content\\TermRecord $term, string $restBase): array",
                    "doc": "The wp/v2 term shape.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "restBase",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "allowedVerbs",
                    "static": false,
                    "visibility": "private",
                    "signature": "allowedVerbs(Minn\\Content\\TermRecord $term, array $config): array",
                    "doc": "Managers may write; nobody may delete the default category.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "Minn\\Content\\TermRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "config",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\Rest\\TermsController",
            "short": "TermsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/TermsController.php",
            "lines": 193,
            "doc": "wp/v2 categories, tags, and pattern categories: list, single, and the create/update/delete the taxonomy admin drives.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\RegisteredCaps",
                "Minn\\Content\\Site",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\TermCollectionParams",
                "Minn\\Rest\\TermFilters",
                "Minn\\Rest\\TermListArgs",
                "Minn\\Rest\\TermObject",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\DeclaredTermsController",
                "Minn\\Rest\\PolicyGate"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Terms $terms, Minn\\Content\\Site $site, Minn\\Rest\\TermObject $object, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\TermObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 35
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\TermObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/{base:categories|tags|wp_pattern_category} (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "A taxonomy's term list as the reference serves it: the request's\nget_terms (wp_get_object_terms for a post's) through\nrest_{taxonomy}_collection_params and rest_{taxonomy}_query, counted\nby wp_count_terms without the page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 81
                },
                {
                    "routes": [
                        "GET /wp/v2/{base:categories|tags|wp_pattern_category}/{id:[\\d]+} (public; term {id} must exist; edit context: cap manage_categories)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "One category or tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 102
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:categories} (cap manage_categories)",
                        "POST /wp/v2/{base:tags|wp_pattern_category} (cap edit_posts)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request, string $base): Minn\\Http\\Response",
                    "doc": "Tags and pattern categories are open to edit_posts holders; categories need manage_categories.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 127
                },
                {
                    "routes": [
                        "POST /wp/v2/{base:categories|tags|wp_pattern_category}/{id:[\\d]+} (cap manage_categories; term {id} must exist)",
                        "PUT /wp/v2/{base:categories|tags|wp_pattern_category}/{id:[\\d]+} (cap manage_categories; term {id} must exist)",
                        "PATCH /wp/v2/{base:categories|tags|wp_pattern_category}/{id:[\\d]+} (cap manage_categories; term {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "Updates a category or tag.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 151
                },
                {
                    "routes": [
                        "DELETE /wp/v2/{base:categories|tags|wp_pattern_category}/{id:[\\d]+} (cap manage_categories; term {id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $base, string $id): Minn\\Http\\Response",
                    "doc": "The default category is capability-denied before the force check.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 163,
                    "end": 184
                },
                {
                    "routes": [],
                    "name": "createCapability",
                    "static": true,
                    "visibility": "public",
                    "signature": "createCapability(string $taxonomy): string",
                    "doc": "What creating a term needs (probe rest-plugin-caps): a plugin's\ntaxonomy, its edit_terms when hierarchical and its assign_terms when\nflat; categories, manage_categories; the others, edit_posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "requireParent",
                    "static": false,
                    "visibility": "private",
                    "signature": "requireParent(int $parent, string $taxonomy): void",
                    "doc": "The reference's refusal of a parent that is not there, before anything is saved.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "termsReadable",
                    "static": false,
                    "visibility": "private",
                    "signature": "termsReadable(WP_Post $post, array $objectTypes): bool",
                    "doc": "Whether a post's terms may be listed: the taxonomy must be one of its\ntype's, and the post publicly viewable (a public status of a viewable\ntype, a password or not) or one the caller may read, as the reference\njudges it.",
                    "shapes": [
                        "@param list<string> $objectTypes the taxonomy's post types"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectTypes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the taxonomy's post types"
                        }
                    ],
                    "line": 208,
                    "end": 217
                }
            ]
        },
        {
            "name": "Minn\\Rest\\Types",
            "short": "Types",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/Types.php",
            "lines": 190,
            "doc": "The engine's registry of built-in post types, seeded from the observed\ncontract (src/data/types.json) with _links attached at runtime.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Rest\\RestUrl",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Admin\\AdminTypes",
                "Minn\\Admin\\StructureController",
                "Minn\\Engine",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\DeclaredPostsController",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PolicyGate",
                "Minn\\Rest\\RouteCatalogue",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\SearchController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url, array $declared = array ( ))",
                "doc": "",
                "shapes": [
                    "@param array<string, array<string, mixed>> $declared extra types from active extensions"
                ],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "declared",
                        "type": "array",
                        "shape": "array<string, array<string, mixed>>",
                        "default": "array ( )",
                        "doc": "extra types from active extensions"
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "types",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "declared",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every post type the surface knows, by slug.",
                    "shapes": [
                        "@return array<string, array> keyed by type slug"
                    ],
                    "params": [],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(string $slug): ?array",
                    "doc": "One post type by slug, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "slugForRestBase",
                    "static": false,
                    "visibility": "public",
                    "signature": "slugForRestBase(string $base): ?string",
                    "doc": "The type behind a rest_base, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "declaredBases",
                    "static": false,
                    "visibility": "public",
                    "signature": "declaredBases(): array",
                    "doc": "The rest_base of every type an extension declared or plugin code registered under wp/v2. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 134,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "routeBases",
                    "static": false,
                    "visibility": "public",
                    "signature": "routeBases(): array",
                    "doc": "Every base the {base} routes serve: the declared post types' and the\ntaxonomies plugin code registered to show in REST under wp/v2.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 149,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "isDeclared",
                    "static": false,
                    "visibility": "public",
                    "signature": "isDeclared(string $slug): bool",
                    "doc": "Whether the engine serves this type through its {base} routes: an extension declared it, or plugin code registered it to show in REST under wp/v2 (probe rest-plugin-types).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 161,
                    "end": 164
                },
                {
                    "routes": [],
                    "name": "searchable",
                    "static": false,
                    "visibility": "public",
                    "signature": "searchable(): array",
                    "doc": "The types a post search covers: the built-in post and page, the ones\nextensions declare, and the public types plugin code shows in REST,\nas the reference's post search handler takes them.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 173,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "restBase",
                    "static": false,
                    "visibility": "public",
                    "signature": "restBase(string $slug): string",
                    "doc": "The rest_base of a type slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 202
                },
                {
                    "routes": [],
                    "name": "core",
                    "static": false,
                    "visibility": "private",
                    "signature": "core(): array",
                    "doc": "The built-in types and the ones extensions declare. @return array<string, array>",
                    "shapes": [
                        "@return array<string, array>"
                    ],
                    "params": [],
                    "line": 38,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "registered",
                    "static": false,
                    "visibility": "private",
                    "signature": "registered(): array",
                    "doc": "The types plugin code registered to show in REST (probe\nrest-types-edit), in registration order, as the reference describes\nthem: their label, icon, the taxonomies they show in REST.",
                    "shapes": [
                        "@return array<string, array>"
                    ],
                    "params": [],
                    "line": 79,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "servedRegistered",
                    "static": false,
                    "visibility": "private",
                    "signature": "servedRegistered(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, array> the registered types under wp/v2"
                    ],
                    "params": [],
                    "line": 182,
                    "end": 190
                }
            ]
        },
        {
            "name": "Minn\\Rest\\UrlDetails",
            "short": "UrlDetails",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/UrlDetails.php",
            "lines": 64,
            "doc": "A page's details as the editor's link previews read them (probe\nrest-embed-details), from the document's head: everything up to its\ncloser, the whole page when it has none. The first title, as text with\nits tags gone; the first link whose rel names \"icon\" (not an\napple-touch-icon); the first meta named description; the first meta\nwhose property is og:image or og:image:url. Twitter tags, og:title and\nog:description count for nothing. Each is trimmed. An address with no\nhost hangs off the page's root whatever its own path, and one with no\nscheme takes the page's.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Tags"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $html, string $url): array",
                    "doc": "The page's four details, read from its markup; addresses made whole against the page's own. @return array{title: string, icon: string, description: string, image: string}",
                    "shapes": [
                        "@return array{title: string, icon: string, description: string, image: string}"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "private",
                    "signature": "read(Minn\\Html\\Tags $tags): array",
                    "doc": "Which detail the tag holds, and its value. @return array{0: ?string, 1: string}",
                    "shapes": [
                        "@return array{0: ?string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "tags",
                            "type": "Minn\\Html\\Tags",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "private",
                    "signature": "text(?string $value): string",
                    "doc": "Text as a preview shows it: tags gone, trimmed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "absolute",
                    "static": true,
                    "visibility": "private",
                    "signature": "absolute(string $value, string $url): string",
                    "doc": "An address made whole against the page's root.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 82
                }
            ]
        },
        {
            "name": "Minn\\Rest\\UserCollectionParams",
            "short": "UserCollectionParams",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/UserCollectionParams.php",
            "lines": 11,
            "doc": "The users list's parameters as the reference declares them (probe\nrest-user-lists): the context, Args::USERS, and has_published_posts\ntaking the REST post types by name. Plugins change them through\nrest_user_collection_params when the list runs.",
            "implements": [
                "Minn\\Http\\RouteParams"
            ],
            "extends": null,
            "uses": [
                "Minn\\Http\\Args",
                "Minn\\Http\\RouteParams",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\UsersController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "for",
                    "static": true,
                    "visibility": "public",
                    "signature": "for(array $captures): array",
                    "doc": "The list's parameters (the route has no captures).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "captures",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 26
                }
            ]
        },
        {
            "name": "Minn\\Rest\\UserListArgs",
            "short": "UserListArgs",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/UserListArgs.php",
            "lines": 47,
            "doc": "The WP_User_Query arguments a user list request makes, as the reference\nmakes them before rest_user_query (probe rest-user-lists): each declared\nparameter the request carries under its query name (a search wrapped in\nwildcards), the offset (the page's when none is given), the orderby name\nmapped to the query's, the published authors (every REST post type, for\na reader who may not list users), the authors shorthand, the search\ncolumns (a reader who may not list users searches names and logins\nonly), and ids alone for a HEAD request.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\UsersController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAPPINGS",
                    "value": "array (   'exclude' => 'exclude',   'include' => 'include',   'order' => 'order',   'per_page' => 'number',   'search' => 'search',   'roles' => 'role__in',   'capabilities' => 'capability__in',   'slug' => 'nicename__in', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ORDERBY",
                    "value": "array (   'id' => 'ID',   'include' => 'include',   'name' => 'display_name',   'registered_date' => 'registered',   'slug' => 'user_nicename',   'include_slugs' => 'nicename__in',   'email' => 'user_email',   'url' => 'user_url', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "COLUMNS",
                    "value": "array (   'email' => 'user_email',   'name' => 'display_name',   'id' => 'ID',   'username' => 'user_login',   'slug' => 'user_nicename', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "PUBLIC_COLUMNS",
                    "value": "array (   0 => 'ID',   1 => 'user_login',   2 => 'user_nicename',   3 => 'display_name', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(WP_REST_Request $wp, array $registered, string $method, array $types, string $reader): array",
                    "doc": "The arguments before plugins see them, for a reader who is a 'lister'\n(may list users) or 'public'.",
                    "shapes": [
                        "@param array<string, mixed> $registered the collection, as rest_user_collection_params left it",
                        "@param array<string, string> $types the REST post types, by name",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "wp",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the collection, as rest_user_collection_params left it"
                        },
                        {
                            "name": "method",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "the REST post types, by name"
                        },
                        {
                            "name": "reader",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 62
                }
            ]
        },
        {
            "name": "Minn\\Rest\\UserObject",
            "short": "UserObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/UserObject.php",
            "lines": 103,
            "doc": "The wp/v2 user objects: the public view shape and the edit-context shape.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Front\\Permalinks",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\PostObject",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\CommentObject",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\UsersController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Users $users, Minn\\Front\\Permalinks $permalinks, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 22
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(Minn\\Content\\UserRecord $u): array",
                    "doc": "A user as the view context shows one, through rest_prepare_user when a plugin hooks it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "u",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "edit",
                    "static": false,
                    "visibility": "public",
                    "signature": "edit(Minn\\Content\\UserRecord $u): array",
                    "doc": "A user as the edit context shows one, through rest_prepare_user when a plugin hooks it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "u",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "avatarUrls",
                    "static": true,
                    "visibility": "public",
                    "signature": "avatarUrls(string $email): array",
                    "doc": "Gravatar URLs in the sizes the reference emits (sha256 of the email).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "viewFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "viewFields(Minn\\Content\\UserRecord $u): array",
                    "doc": "The wp/v2 user shape in the view context.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "u",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "editFields",
                    "static": false,
                    "visibility": "private",
                    "signature": "editFields(Minn\\Content\\UserRecord $u): array",
                    "doc": "The private fields a caller who can edit the user sees. The\ncapabilities map is everything the user holds (allcaps), the extra\nones what is stored on the user, exactly as the reference emits.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "u",
                            "type": "Minn\\Content\\UserRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 114
                }
            ]
        },
        {
            "name": "Minn\\Rest\\UsersController",
            "short": "UsersController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/UsersController.php",
            "lines": 379,
            "doc": "wp/v2 users: me, list, single, and the create/update/delete-with-reassign the Users view drives.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Password",
                "Minn\\Auth\\Roles",
                "Minn\\Content\\Site",
                "Minn\\Content\\UserRecord",
                "Minn\\Content\\Users",
                "Minn\\Db",
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Http\\Subject",
                "Minn\\I18n\\TranslationFiles",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Schema",
                "Minn\\Rest\\UserCollectionParams",
                "Minn\\Rest\\UserListArgs",
                "Minn\\Rest\\UserObject",
                "Minn\\Runtime\\Refusal",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\UserEvents",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Users $users, Minn\\Content\\Site $site, Minn\\Rest\\UserObject $object, Minn\\Rest\\RestUrl $url, Minn\\Rest\\Caller $caller, Minn\\Auth\\Roles $roles, Minn\\Rest\\Schema $schema)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "users",
                        "type": "Minn\\Content\\Users",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\UserObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "roles",
                        "type": "Minn\\Auth\\Roles",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "schema",
                        "type": "Minn\\Rest\\Schema",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 31,
                "end": 41
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "users",
                    "type": "Minn\\Content\\Users",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "object",
                    "type": "Minn\\Rest\\UserObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "roles",
                    "type": "Minn\\Auth\\Roles",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "schema",
                    "type": "Minn\\Rest\\Schema",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/users/me (public)"
                    ],
                    "name": "me",
                    "static": false,
                    "visibility": "public",
                    "signature": "me(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The signed-in user.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 53
                },
                {
                    "routes": [
                        "POST /wp/v2/users/me (signed in)",
                        "PUT /wp/v2/users/me (signed in)",
                        "PATCH /wp/v2/users/me (signed in)"
                    ],
                    "name": "updateMe",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateMe(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Updates the signed-in user; signed out there is no such user (404), and the Allow header leaves the writes out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [
                        "DELETE /wp/v2/users/me (cap delete_users)"
                    ],
                    "name": "deleteMe",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteMe(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Deletes the signed-in user as users/{id} deletes any; signed out there is no such user (404).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 69
                },
                {
                    "routes": [
                        "GET /wp/v2/users (public)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The users list as the reference serves it: the request's WP_User_Query\nthrough rest_user_collection_params and rest_user_query (a reader who\nmay not list users sees published authors only), its totals (counted\nagain without the page when it found none), and the users it found.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 101
                },
                {
                    "routes": [
                        "GET /wp/v2/users/{id:[\\d]+} (public; user {id} must exist)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One user.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 165
                },
                {
                    "routes": [
                        "POST /wp/v2/users (cap create_users)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Engine-created users carry real scheme hashes and the full default meta set.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 219,
                    "end": 268
                },
                {
                    "routes": [
                        "POST /wp/v2/users/{id:[\\d]+} (cap edit_user on {id}; user {id} must exist)",
                        "PUT /wp/v2/users/{id:[\\d]+} (cap edit_user on {id}; user {id} must exist)",
                        "PATCH /wp/v2/users/{id:[\\d]+} (cap edit_user on {id}; user {id} must exist)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Updates a user.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 274,
                    "end": 341
                },
                {
                    "routes": [
                        "DELETE /wp/v2/users/{id:[\\d]+} (cap delete_users; user {id} must exist)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "reassign is REQUIRED (checked before the user lookup), and so is force.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 345,
                    "end": 391
                },
                {
                    "routes": [],
                    "name": "listAllowed",
                    "static": false,
                    "visibility": "private",
                    "signature": "listAllowed(WP_REST_Request $wp, Minn\\Rest\\Context $context): void",
                    "doc": "What a reader who may not list users may not ask the list for: the\nedit context, an email or registration order, roles, capabilities;\nthe authors shorthand is for those who may edit posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "wp",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "totals",
                    "static": true,
                    "visibility": "private",
                    "signature": "totals(WP_User_Query $query, array $args): array",
                    "doc": "The total and the page count: the query's own, or, when it found\nnone, a count without the page; pages by the query's own number.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array{0: int, 1: int}"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "hasPublishedContent",
                    "static": false,
                    "visibility": "private",
                    "signature": "hasPublishedContent(int $userId): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 167,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "validRole",
                    "static": false,
                    "visibility": "private",
                    "signature": "validRole(string $role): string",
                    "doc": "A role must be registered, as the reference insists.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "role",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "validLocale",
                    "static": false,
                    "visibility": "private",
                    "signature": "validLocale(array $body): void",
                    "doc": "A locale asked for is one the site can show: none, en_US, or an\ninstalled language, as the reference's schema lists them (audit Low:\nany string was stored, and pasted into the reset link).",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "assignableRole",
                    "static": false,
                    "visibility": "private",
                    "signature": "assignableRole(string $role): string",
                    "doc": "A role asked for: registered, and one editable_roles lets this caller give (audit Low).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "role",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 203,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "validEmail",
                    "static": true,
                    "visibility": "private",
                    "signature": "validEmail(string $email): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 212,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "loginRefusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "loginRefusal(string $login): ?string",
                    "doc": "Why a new login is refused, in the reference's words, or null: it must\ncome through strict sanitizing unchanged (validate_username, with\nplugins loaded), and no illegal_user_logins entry may name it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 398,
                    "end": 406
                }
            ]
        },
        {
            "name": "Minn\\Rest\\ViewConfigPatch",
            "short": "ViewConfigPatch",
            "namespace": "Minn\\Rest",
            "kind": "final class",
            "file": "public/minn/src/Minn/Rest/ViewConfigPatch.php",
            "lines": 151,
            "doc": "A patch to a view configuration (WP_View_Config_Data; probe\nrest-view-config), applied as the reference applies it. Only schema\nversion 1 is taken, and only the documented keys: each is set (its value\nreplaced), merged (maps merged key by key, lists joined with their\nmembers matched by identity), replaced (merged, but lists replaced\nwhole) or removed (keys from a map, members from a list by identity).\nA null in a patch removes what it names. What a caller got wrong comes\nback as problems: the function to name and the words.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(bool $replaceLists)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "replaceLists",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 26,
                "end": 28
            },
            "cases": [],
            "constants": [
                {
                    "name": "KEYS",
                    "value": "array (   0 => 'default_view',   1 => 'default_layouts',   2 => 'view_list',   3 => 'form', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "SHAPE",
                    "value": "'A view configuration patch value must match the shape of the value it patches: a list merges into a list, and an associative array into an associative array.'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "problems",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "replaceLists",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(array $config, array $patch, mixed $version, string $mode): array",
                    "doc": "A configuration with a patch applied in a mode (set, merge, replace,\nremove), and the problems met: [function or null for the mode's own\nmethod, words].",
                    "shapes": [
                        "@param array<string, mixed> $config",
                        "@param array<mixed> $patch",
                        "@return array{0: array<string, mixed>, 1: list<array{0: ?string, 1: string}>}"
                    ],
                    "params": [
                        {
                            "name": "config",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "patch",
                            "type": "array",
                            "shape": "array<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "stripNulls",
                    "static": true,
                    "visibility": "public",
                    "signature": "stripNulls(mixed $value): mixed",
                    "doc": "A value with every null in it removed, lists closed up.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "identity",
                    "static": true,
                    "visibility": "public",
                    "signature": "identity(mixed $item): ?string",
                    "doc": "The identity a list member is matched by: a word itself, a map's id or slug; null for none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "merge",
                    "static": false,
                    "visibility": "private",
                    "signature": "merge(mixed $current, mixed $incoming): mixed",
                    "doc": "Incoming merged over current: maps key by key, lists by identity (or replaced), anything else replaced; a mismatched shape is a problem and leaves current.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "current",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "incoming",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "mergeList",
                    "static": false,
                    "visibility": "private",
                    "signature": "mergeList(array $current, array $incoming): array",
                    "doc": "",
                    "shapes": [
                        "@param list<mixed> $current",
                        "@param list<mixed> $incoming",
                        "@return list<mixed>"
                    ],
                    "params": [
                        {
                            "name": "current",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "incoming",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": true,
                    "visibility": "private",
                    "signature": "remove(mixed $current, mixed $spec): mixed",
                    "doc": "Keys removed from a map (a list of keys, or a key mapped to what to remove inside it); members removed from a list by identity.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "current",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "spec",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 166
                }
            ]
        },
        {
            "name": "Minn\\Rest\\WidgetObject",
            "short": "WidgetObject",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/WidgetObject.php",
            "lines": 55,
            "doc": "A widget as wp/v2/widgets shows it (probe rest-widgets): its id and base,\nits sidebar, its markup as that sidebar wraps it (nothing among the\ninactive widgets) and, in the edit context, its settings form and its\nsettings: serialized and base64 encoded, signed with wp_hash, and raw\nwhen the widget shows its instance in REST. Links to itself, its type\nand its sidebar; through rest_prepare_widget.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Rest\\Context",
                "Minn\\Rest\\RestUrl",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Runtime\\WidgetAreas"
            ],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\RestUrl $url)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "url",
                        "type": "Minn\\Rest\\RestUrl",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 21
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "url",
                    "type": "Minn\\Rest\\RestUrl",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "view",
                    "static": false,
                    "visibility": "public",
                    "signature": "view(string $widgetId, string $sidebarId, Minn\\Rest\\Context $context): array",
                    "doc": "A widget in a sidebar, its form and settings in the edit context. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "widgetId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sidebarId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "Minn\\Rest\\Context",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "instance",
                    "static": true,
                    "visibility": "public",
                    "signature": "instance(WP_Widget $object, int $number): array",
                    "doc": "A widget's settings, encoded and signed, and raw when it shows them. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "form",
                    "static": true,
                    "visibility": "private",
                    "signature": "form(WP_Widget $object, int $number): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 70
                }
            ]
        },
        {
            "name": "Minn\\Rest\\WidgetsController",
            "short": "WidgetsController",
            "namespace": "Minn\\Rest",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Rest/WidgetsController.php",
            "lines": 169,
            "doc": "wp/v2/widgets as the reference answers it (probe rest-widgets), for\nanyone who can edit theme options: the registered widgets of every\nsidebar (or one), a widget created under the next free number for its\ntype, its settings saved through the widget's own update (raw when the\nwidget shows its instance in REST, encoded with a matching hash, or from\nits form's fields) and registered at once, a widget moved between\nsidebars, and a widget deleted, or without force sent to the inactive\nwidgets.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Args",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\RestError",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Context",
                "Minn\\Rest\\Fields",
                "Minn\\Rest\\Reply",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\WidgetObject",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\WidgetAreas"
            ],
            "usedBy": [
                "Minn\\Rest\\Api"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Rest\\WidgetObject $object, Minn\\Rest\\Caller $caller)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "object",
                        "type": "Minn\\Rest\\WidgetObject",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "caller",
                        "type": "Minn\\Rest\\Caller",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 39,
                "end": 41
            },
            "cases": [],
            "constants": [
                {
                    "name": "LIST",
                    "value": "array (   'sidebar' =>    array (     'description' => 'The sidebar to return widgets for.',     'type' => 'string',     'required' => false,   ), )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BODY",
                    "value": "array (   'id_base' =>    array (     'description' => 'The type of the widget. Corresponds to ID in widget-types endpoint.',     'type' => 'string',     'required' => false,   ),   'sidebar' =>    array (     'description' => 'The sidebar the widget belongs to.',     'type' => 'string',     'required' => false,   ),   'instance' =>    array (     'description' => 'Instance settings of the widget, if supported.',     'type' => 'object',     'required' => false,   ),   'form_data' =>    array (     'description' => 'URL-encoded form data from the widget admin form. Used to update a widget that does not support instance. Write only.',     'type' => 'string',     'required' => false,   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "object",
                    "type": "Minn\\Rest\\WidgetObject",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "caller",
                    "type": "Minn\\Rest\\Caller",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [
                        "GET /wp/v2/widgets (cap edit_theme_options)"
                    ],
                    "name": "list",
                    "static": false,
                    "visibility": "public",
                    "signature": "list(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "The registered widgets, sidebar by sidebar.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 63
                },
                {
                    "routes": [
                        "GET /wp/v2/widgets/{id:[\\w\\-]+} (cap edit_theme_options)"
                    ],
                    "name": "single",
                    "static": false,
                    "visibility": "public",
                    "signature": "single(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "One widget.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 71
                },
                {
                    "routes": [
                        "POST /wp/v2/widgets (cap edit_theme_options)"
                    ],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Creates a widget in a sidebar (the inactive widgets unless one is named).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 90
                },
                {
                    "routes": [
                        "POST /wp/v2/widgets/{id:[\\w\\-]+} (cap edit_theme_options)",
                        "PUT /wp/v2/widgets/{id:[\\w\\-]+} (cap edit_theme_options)",
                        "PATCH /wp/v2/widgets/{id:[\\w\\-]+} (cap edit_theme_options)"
                    ],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Saves a widget's settings and moves it, as the body asks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 112
                },
                {
                    "routes": [
                        "DELETE /wp/v2/widgets/{id:[\\w\\-]+} (cap edit_theme_options)"
                    ],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Http\\Request $request, string $id): Minn\\Http\\Response",
                    "doc": "Deletes a widget with force; without, sends it to the inactive widgets.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "saveInstance",
                    "static": false,
                    "visibility": "private",
                    "signature": "saveInstance(WP_Widget $object, int $number, array $body): string",
                    "doc": "Saves a widget's settings through its own update and registers it:\nraw settings (when it shows them), encoded ones with their hash, or\nits form's fields. The widget's id.",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "newInstance",
                    "static": true,
                    "visibility": "private",
                    "signature": "newInstance(WP_Widget $object, int $number, array $body): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $body @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        }
                    ],
                    "line": 164,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "sidebarOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "sidebarOf(string $id): string",
                    "doc": "The sidebar holding a widget; a widget no sidebar holds is no widget.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 188,
                    "end": 195
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Abilities",
            "short": "Abilities",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Abilities.php",
            "lines": 226,
            "doc": "The abilities registry behind WP_Abilities_Registry,\nWP_Ability_Categories_Registry and the wp_*_ability facade, as the\nreference keeps it (probes abilities-registry, abilities-classes). The\ncategories init and then the abilities init fire once each, lazily, on\nthe first lookup of their kind, each handed its registry. The registries\nthemselves take a registration at any time; only the wp_register_*\nfunctions insist on the init action. A registration is checked as the\nreference checks it (name shape, duplicates, a known category, then the\nproperties the ability and category classes check) and refused with its\nnotice. An ability's meta gains the default annotations, show_in_rest\n(public's value when unset) and public.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "STATE",
                    "value": "'abilities'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "CATEGORIES",
                    "value": "'WP_Ability_Categories_Registry'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ABILITIES",
                    "value": "'WP_Abilities_Registry'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "NAME",
                    "value": "'/^[a-z0-9-]+\\\\/[a-z0-9-]+$/'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SLUG",
                    "value": "'/^[a-z0-9]+(?:-[a-z0-9]+)*$/'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ANNOTATIONS",
                    "value": "array (   'readonly' => NULL,   'destructive' => NULL,   'idempotent' => NULL, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "initializeCategories",
                    "static": true,
                    "visibility": "public",
                    "signature": "initializeCategories(): void",
                    "doc": "Fires the categories action once.",
                    "shapes": [],
                    "params": [],
                    "line": 42,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "initialize",
                    "static": true,
                    "visibility": "public",
                    "signature": "initialize(): void",
                    "doc": "Fires the categories action, then the abilities action, each once.",
                    "shapes": [],
                    "params": [],
                    "line": 54,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "registerCategory",
                    "static": true,
                    "visibility": "public",
                    "signature": "registerCategory(string $slug, array $args): ?array",
                    "doc": "Registers a category; its row, or null with the reference's notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(string $name, array $args): ?array",
                    "doc": "Registers an ability; its row, or null with the reference's notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "unregister",
                    "static": true,
                    "visibility": "public",
                    "signature": "unregister(string $name): ?array",
                    "doc": "Removes an ability; its row, or null with the reference's notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "unregisterCategory",
                    "static": true,
                    "visibility": "public",
                    "signature": "unregisterCategory(string $slug): ?array",
                    "doc": "Removes a category; its row, or null with the reference's notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 131,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": true,
                    "visibility": "public",
                    "signature": "find(string $name): ?array",
                    "doc": "One ability, or null with the reference's notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 137,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "ability",
                    "static": true,
                    "visibility": "public",
                    "signature": "ability(string $name): ?array",
                    "doc": "One ability, or null, asked after without a notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "findCategory",
                    "static": true,
                    "visibility": "public",
                    "signature": "findCategory(string $slug): ?array",
                    "doc": "One category, or null with the reference's notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "category",
                    "static": true,
                    "visibility": "public",
                    "signature": "category(string $slug): ?array",
                    "doc": "One category, or null, asked after without a notice. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": true,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every ability, by name. @return array<string, array>",
                    "shapes": [
                        "@return array<string, array>"
                    ],
                    "params": [],
                    "line": 171,
                    "end": 175
                },
                {
                    "routes": [],
                    "name": "allCategories",
                    "static": true,
                    "visibility": "public",
                    "signature": "allCategories(): array",
                    "doc": "Every category, by slug. @return array<string, array>",
                    "shapes": [
                        "@return array<string, array>"
                    ],
                    "params": [],
                    "line": 178,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "abilityRefusal",
                    "static": true,
                    "visibility": "public",
                    "signature": "abilityRefusal(array $args): ?string",
                    "doc": "Why an ability's properties are refused, as WP_Ability::prepare_properties says it, or null. @param array<string, mixed> $args",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 185,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "categoryRefusal",
                    "static": true,
                    "visibility": "public",
                    "signature": "categoryRefusal(array $args): ?string",
                    "doc": "Why a category's properties are refused, as WP_Ability_Category::prepare_properties says it, or null. @param array<string, mixed> $args",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": true,
                    "visibility": "public",
                    "signature": "meta(array $meta): array",
                    "doc": "An ability's meta with the reference's defaults: the three annotations\nfirst, show_in_rest (public's value when unset), then public.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 223,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "state",
                    "static": true,
                    "visibility": "private",
                    "signature": "state(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{categoriesFired: bool, abilitiesFired: bool, categories: array<string, array>, abilities: array<string, array>}"
                    ],
                    "params": [],
                    "line": 30,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "save",
                    "static": true,
                    "visibility": "private",
                    "signature": "save(array $state): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "state",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "forget",
                    "static": true,
                    "visibility": "private",
                    "signature": "forget(string $key, string $name, string $function, string $notice): ?array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "function",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "notice",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 244
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\AbilityRun",
            "short": "AbilityRun",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/AbilityRun.php",
            "lines": 28,
            "doc": "The checks of an ability's run, as the reference makes them (probes\nabilities-registry, abilities-classes); WP_Ability::execute strings them:\ninput left out takes the input schema's default, input given to an ability\nwithout an input schema is refused, input that its schema refuses is\nability_invalid_input; a permission callback that does not answer true is\nability_invalid_permissions (an error it returns is reported as a notice);\nthen wp_before_execute_ability, the callback\n(an error it returns is the answer), the output checked against the\noutput schema (ability_invalid_output), and wp_after_execute_ability.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "input",
                    "static": true,
                    "visibility": "public",
                    "signature": "input(string $name, array $schema, mixed $input): WP_Error|true",
                    "doc": "True, or why the input does not fit.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "input",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "allowed",
                    "static": true,
                    "visibility": "public",
                    "signature": "allowed(string $name, mixed $answer): WP_Error|true",
                    "doc": "True, or the error a permission answer other than true becomes (an error it returns is reported as a notice).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "answer",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "output",
                    "static": true,
                    "visibility": "public",
                    "signature": "output(string $name, array $schema, mixed $output): WP_Error|true",
                    "doc": "True, or why the output does not fit the output schema.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "schema",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "output",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 44
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\AccountFlows",
            "short": "AccountFlows",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/AccountFlows.php",
            "lines": 140,
            "doc": "The account functions a sign-in page and plugins call, with the\nreference's checks, words, hooks and mail (probe account-flows): asking\nfor a password reset (retrieve_password), resetting one\n(reset_password), registering (register_new_user), and telling the site\nand the new user about a registration (wp_new_user_notification).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Mail\\Mailer",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Entities"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "NO_ACCOUNT",
                    "value": "'<strong>Error:</strong> There is no account with that username or email address.'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "retrievePassword",
                    "static": true,
                    "visibility": "public",
                    "signature": "retrievePassword(string $login): WP_Error|bool",
                    "doc": "A reset link mailed to the account a login or email names: true, or\nthe refusal (no name, no such account, a plugin's error, reset not\nallowed, or the mail failing).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "resetPassword",
                    "static": true,
                    "visibility": "public",
                    "signature": "resetPassword(WP_User $user, string $password): void",
                    "doc": "A new password for a user, announced before (password_reset) and after (after_password_reset).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "WP_User",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "registerNewUser",
                    "static": true,
                    "visibility": "public",
                    "signature": "registerNewUser(string $login, string $email): WP_Error|int",
                    "doc": "A new account for a login and an email, with a generated password and\nthe nag to change it: its id, or every refusal at once (the name\nempty, illegal, taken or barred; the email empty, malformed or taken;\nwhatever register_post and registration_errors add).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "login",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "newUserNotification",
                    "static": true,
                    "visibility": "public",
                    "signature": "newUserNotification(int $userId, mixed $deprecated, string $notify): void",
                    "doc": "A new account announced: to the site's address (unless only the user\nis told), then to the user with a link to set their password (unless\nonly the site is, or the old call shape asks for nobody).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deprecated",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "notify",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "resetLink",
                    "static": true,
                    "visibility": "private",
                    "signature": "resetLink(WP_User $user, string $key): string",
                    "doc": "The link that opens the password form for a user's key.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "WP_User",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 156
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\AjaxController",
            "short": "AjaxController",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/AjaxController.php",
            "lines": 80,
            "doc": "admin-ajax.php, the endpoint plugins post their front-end work to: a form\nsubmitted without a reload, a spam check, a background job. The action a\nrequest names runs the handlers registered as wp_ajax_{action} for a\nsigned-in visitor and wp_ajax_nopriv_{action} for anyone else, answered as\nthe reference answers them (contracts/runtime.md \"admin-ajax.php\").\n\nIt is an admin request: is_admin() is true while the plugins load and\nadmin_init fires before the handler. A handler usually ends the request\nitself (wp_send_json, wp_die, exit), so the endpoint's headers go out\nbefore it runs; one that returns is followed by the reference's \"0\".",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Access",
                "Minn\\Http\\Method",
                "Minn\\Http\\Policy",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Http\\Route",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Runtime\\Constants"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "PATH",
                    "value": "'/wp-admin/admin-ajax.php'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "CORE",
                    "value": "array (   'wp_ajax_nopriv_' =>    array (     'heartbeat' => 'wp_ajax_nopriv_heartbeat',   ),   'wp_ajax_' =>    array (     'rest-nonce' => 'wp_ajax_rest_nonce',     'heartbeat' => 'wp_ajax_heartbeat',   ), )",
                    "doc": "The core actions the endpoint answers itself, under the prefix for who is asking: the action => the handler.",
                    "visibility": "private"
                },
                {
                    "name": "ADMIN_FILTERS",
                    "value": "array (   0 =>    array (     0 => 'wp_refresh_nonces',     1 => 'wp_refresh_heartbeat_nonces',   ), )",
                    "doc": "The filters the reference's admin includes add once plugins have loaded: the hook, the callback.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "claims",
                    "static": true,
                    "visibility": "public",
                    "signature": "claims(Minn\\Http\\Request $request): bool",
                    "doc": "Whether a request is for the endpoint, which the runtime boots as an admin request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [
                        "* /wp-admin/admin-ajax.php (public)"
                    ],
                    "name": "dispatch",
                    "static": false,
                    "visibility": "public",
                    "signature": "dispatch(Minn\\Http\\Request $request): Minn\\Http\\Response",
                    "doc": "Runs the handlers registered for the action the request names.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "action",
                    "static": false,
                    "visibility": "private",
                    "signature": "action(Minn\\Http\\Request $request): ?string",
                    "doc": "The action the request names, the posted field over the query's, or null when there is none to run.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "allowedOrigin",
                    "static": false,
                    "visibility": "private",
                    "signature": "allowedOrigin(): array",
                    "doc": "The two cross-origin headers, for an Origin that is this site's own address; empty for any other.",
                    "shapes": [],
                    "params": [],
                    "line": 89,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "registerCore",
                    "static": false,
                    "visibility": "private",
                    "signature": "registerCore(string $prefix): void",
                    "doc": "The reference registers its own actions after admin_init, only those for who is asking, ahead of a plugin's.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 104
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\AllowedOptions",
            "short": "AllowedOptions",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/AllowedOptions.php",
            "lines": 26,
            "doc": "The settings-page allowlist plugins extend: option group => the option\nnames a settings form in that group may save. The engine renders no\nsettings pages, so the list is only recorded, never enforced.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "merge",
                    "static": true,
                    "visibility": "public",
                    "signature": "merge(array $add, array $into): array",
                    "doc": "The allowlist with each new name appended to its group once, groups\ncreated as needed. A group handed as anything but a list adds nothing.",
                    "shapes": [
                        "@param array<string, mixed> $add",
                        "@param array<string, list<string>> $into",
                        "@return array<string, list<string>>"
                    ],
                    "params": [
                        {
                            "name": "add",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "into",
                            "type": "array",
                            "shape": "array<string, list<string>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 36
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ApplicationPasswordEvents",
            "short": "ApplicationPasswordEvents",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ApplicationPasswordEvents.php",
            "lines": 46,
            "doc": "Application password changes made over REST, as the reference makes them\n(probe rest-application-password-hooks): the prepared item (the name,\nand an app id a new one is given) through\nrest_pre_insert_application_password, then WP_Application_Passwords\n(which tells plugins through wp_create_, wp_update_ and\nwp_delete_application_password), then rest_after_insert_application_password.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [
                "Minn\\Rest\\ApplicationPasswordsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "create",
                    "static": true,
                    "visibility": "public",
                    "signature": "create(int $userId, array $body, WP_REST_Request $request): WP_Error|array",
                    "doc": "A new password: its record and its plain text in groups of four, or\nthe reference's refusal.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array{0: array<string, mixed>, 1: string}|\\WP_Error"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": true,
                    "visibility": "public",
                    "signature": "update(int $userId, string $uuid, array $body, WP_REST_Request $request): WP_Error|array",
                    "doc": "A password renamed (when the body names it): its record as it stands.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array<string, mixed>|\\WP_Error"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uuid",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "prepared",
                    "static": true,
                    "visibility": "private",
                    "signature": "prepared(array $fields, WP_REST_Request $request): object",
                    "doc": "The item the request prepares (its name; a new one's app id), through rest_pre_insert_application_password. @param array<string, mixed> $fields",
                    "shapes": [
                        "@param array<string, mixed> $fields"
                    ],
                    "params": [
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 62
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ApplicationPasswordSignIn",
            "short": "ApplicationPasswordSignIn",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ApplicationPasswordSignIn.php",
            "lines": 85,
            "doc": "wp_authenticate_application_password as the reference answers it (probe\napplication-passwords-api): a user found already stands; outside an API\nrequest (application_password_is_api_request) nothing is tried; then the\nuser by login or email, the feature's availability (for the site, for\nthe user), and each of the user's passwords, a match passing through\nwp_authenticate_application_password_errors, recorded, and announced\n(application_password_did_authenticate); every refusal announced\nthrough application_password_failed_authentication.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Content\\Users",
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "authenticate",
                    "static": true,
                    "visibility": "public",
                    "signature": "authenticate(mixed $input, string $username, string $password): mixed",
                    "doc": "The signed-in user, the input unchanged, or the refusal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "input",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "username",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "validate",
                    "static": true,
                    "visibility": "public",
                    "signature": "validate(mixed $input): mixed",
                    "doc": "determine_current_user's application password step: an earlier\nanswer stands; else the user the REST request's application password\nsigned in (the engine checked the password before plugins loaded),\nheard again as the reference hears it: the feature's availability,\nwp_authenticate_application_password_errors, then\napplication_password_did_authenticate; a refusal is announced and\nleaves the request signed out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "input",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(mixed $user, string $username): ?WP_Error",
                    "doc": "Why the user may not sign in by application password, or null when they may.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "username",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 102
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ArchiveLinks",
            "short": "ArchiveLinks",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ArchiveLinks.php",
            "lines": 41,
            "doc": "A post type's archive address and its feed, as the reference gives them\n(probe archive-links). The posts' archive is the posts page when the\nfront is a page with one, else the bare home; a type with an archive\nlives under its named archive or its rewrite slug (after the\nstructure's front unless it declines it), or at ?post_type= without\nrewrites or pretty permalinks; any other type has none (false, no\nfilter). Its feed is the archive's /feed/ (/feed/{type}/ for one not the\ndefault) when the type's rewrite takes feeds, else ?feed= with the type\nspelled out.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Url"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "archive",
                    "static": true,
                    "visibility": "public",
                    "signature": "archive(string $postType): string|false",
                    "doc": "get_post_type_archive_link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "feed",
                    "static": true,
                    "visibility": "public",
                    "signature": "feed(string $postType, string $feed): string|false",
                    "doc": "get_post_type_archive_feed_link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "feed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\AssetEdits",
            "short": "AssetEdits",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/AssetEdits.php",
            "lines": 33,
            "doc": "What a plugin did to $wp_scripts->registered or $wp_styles->registered\ndirectly, as wp_default_scripts callbacks do (a dependency dropped, a\nsource swapped, an entry unset or added), handed to the registry: each\nhandle as the view showed it last against the view as the plugin left\nit.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Assets"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(Minn\\Runtime\\Assets $assets, array $edited, array $synced): void",
                    "doc": "The edits applied. The view is rebuilt by every change the registry\ntakes, so the edited view is read from the copy handed in.",
                    "shapes": [
                        "@param array<string, mixed> $edited the view as the plugin left it",
                        "@param array<string, array{0: mixed, 1: list<string>, 2: mixed, 3: mixed, 4: mixed}> $synced each handle as the view last showed it (source, dependencies, version, args, data)"
                    ],
                    "params": [
                        {
                            "name": "assets",
                            "type": "Minn\\Runtime\\Assets",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "edited",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the view as the plugin left it"
                        },
                        {
                            "name": "synced",
                            "type": "array",
                            "shape": "array<string, array{0: mixed, 1: list<string>, 2: mixed, 3: mixed, 4: mixed}>",
                            "default": null,
                            "doc": "each handle as the view last showed it (source, dependencies, version, args, data)"
                        }
                    ],
                    "line": 23,
                    "end": 45
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Assets",
            "short": "Assets",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Assets.php",
            "lines": 432,
            "doc": "The registry behind wp_register_/wp_enqueue_ for scripts and styles:\nhandles, sources, dependencies, versions, inline additions, localized\ndata, and the head/footer split. Printing follows the reference's tag\nshapes as far as captured; see contracts/runtime.md.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Runtime\\AssetEdits",
                "Minn\\Runtime\\ScriptLoading"
            ],
            "constructor": {
                "signature": "__construct(string $kind)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "kind",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 31,
                "end": 33
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "items",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "queue",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "done",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "waiting",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "defaults",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "onChange",
                    "type": "?Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "beforeChange",
                    "type": "?Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "kind",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "watch",
                    "static": false,
                    "visibility": "public",
                    "signature": "watch(Closure $listener, ?Closure $before = NULL): void",
                    "doc": "A listener called after every change, so a plugin-facing view can stay\ncurrent; and one called before a script's data changes, so what a\nplugin set in that view lands first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "listener",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Closure",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "setQueue",
                    "static": false,
                    "visibility": "public",
                    "signature": "setQueue(array $queue): void",
                    "doc": "The queue as a plugin left it after editing the view directly.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "queue",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(string $handle, string|false $src, array $deps, string|bool|null $ver, mixed $extra): bool",
                    "doc": "Registers an asset under a handle.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "src",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deps",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ver",
                            "type": "string|bool|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "revise",
                    "static": false,
                    "visibility": "public",
                    "signature": "revise(string $handle, string|false $src, array $deps, string|bool|null $ver, mixed $extra): bool",
                    "doc": "An existing handle's source, dependencies, version and arguments replaced, its data, inline code and place in the queue kept.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "src",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deps",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ver",
                            "type": "string|bool|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "externalHosts",
                    "static": false,
                    "visibility": "public",
                    "signature": "externalHosts(string $ownHost): array",
                    "doc": "The hosts the queued assets load from, other than the site's own.",
                    "shapes": [
                        "@return list<string> hosts of enqueued sources (dependencies first) away from the given host, for dns-prefetch hints"
                    ],
                    "params": [
                        {
                            "name": "ownHost",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "deregister",
                    "static": false,
                    "visibility": "public",
                    "signature": "deregister(string $handle): void",
                    "doc": "Forgets an asset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "enqueue",
                    "static": false,
                    "visibility": "public",
                    "signature": "enqueue(string $handle): void",
                    "doc": "Queues an asset for printing (probe placeholders-admin). One that is\nneither registered nor among the reference's own handles waits, and\njoins the queue when it is registered; one of the reference's own the\nengine ships no file for is queued as the reference would queue it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "dequeue",
                    "static": false,
                    "visibility": "public",
                    "signature": "dequeue(string $handle): void",
                    "doc": "Removes an asset from the queue, or from the handles waiting for registration.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 147,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "registered",
                    "static": false,
                    "visibility": "public",
                    "signature": "registered(string $handle): bool",
                    "doc": "Whether a handle is registered, by the site or as one the reference registers itself (data/default-assets.json).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "dependencies",
                    "static": false,
                    "visibility": "public",
                    "signature": "dependencies(string $handle): array",
                    "doc": "A handle's dependencies: as registered, or as the reference registers it. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 161,
                    "end": 164
                },
                {
                    "routes": [],
                    "name": "dependents",
                    "static": false,
                    "visibility": "public",
                    "signature": "dependents(string $handle): array",
                    "doc": "The registered handles that name a handle among their dependencies. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 167,
                    "end": 170
                },
                {
                    "routes": [],
                    "name": "reaches",
                    "static": false,
                    "visibility": "public",
                    "signature": "reaches(array $from, string $handle): bool",
                    "doc": "Whether a handle is a dependency, however deep, of any of the given\nhandles.",
                    "shapes": [
                        "@param list<string> $from"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 178,
                    "end": 199
                },
                {
                    "routes": [],
                    "name": "enqueued",
                    "static": false,
                    "visibility": "public",
                    "signature": "enqueued(string $handle): bool",
                    "doc": "Queued directly, or pulled in as the dependency of something queued,\nhowever deep. The reference answers the same way, and plugin code\nleans on it: WooCommerce only attaches its settings blob when it\nfinds `wc-settings` \"enqueued\", and nothing queues that handle by\nname, it only ever rides in as a dependency.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 221
                },
                {
                    "routes": [],
                    "name": "doneList",
                    "static": false,
                    "visibility": "public",
                    "signature": "doneList(): array",
                    "doc": "The handles printed so far.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 228,
                    "end": 231
                },
                {
                    "routes": [],
                    "name": "setDone",
                    "static": false,
                    "visibility": "public",
                    "signature": "setDone(array $done): void",
                    "doc": "The printed handles as a plugin left them after editing the view directly.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "done",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 234,
                    "end": 237
                },
                {
                    "routes": [],
                    "name": "done",
                    "static": false,
                    "visibility": "public",
                    "signature": "done(string $handle): bool",
                    "doc": "Whether a handle has been printed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 240,
                    "end": 243
                },
                {
                    "routes": [],
                    "name": "addInline",
                    "static": false,
                    "visibility": "public",
                    "signature": "addInline(string $handle, string $code, string $position): bool",
                    "doc": "Attaches inline code to an asset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "position",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "addData",
                    "static": false,
                    "visibility": "public",
                    "signature": "addData(string $handle, string $key, mixed $value): bool",
                    "doc": "Attaches a data key to an asset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 279,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "setTranslations",
                    "static": false,
                    "visibility": "public",
                    "signature": "setTranslations(string $handle, string $domain, string $path): bool",
                    "doc": "Names the text domain and folder a script's translations come from, and makes the script depend on wp-i18n.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 296,
                    "end": 307
                },
                {
                    "routes": [],
                    "name": "data",
                    "static": false,
                    "visibility": "public",
                    "signature": "data(string $handle, string $key): mixed",
                    "doc": "A data key of an asset, or false.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 310,
                    "end": 313
                },
                {
                    "routes": [],
                    "name": "localize",
                    "static": false,
                    "visibility": "public",
                    "signature": "localize(string $handle, string $name, array $data): bool",
                    "doc": "Attaches a localized object to a script.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 316,
                    "end": 336
                },
                {
                    "routes": [],
                    "name": "toPrint",
                    "static": false,
                    "visibility": "public",
                    "signature": "toPrint(): array",
                    "doc": "Every queued handle not yet printed, dependencies first. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 339,
                    "end": 342
                },
                {
                    "routes": [],
                    "name": "withPath",
                    "static": false,
                    "visibility": "public",
                    "signature": "withPath(): array",
                    "doc": "Enqueued handles that name a file on disk, mapped to that path. A style\nregistered with a `path` datum is saying it can be inlined; whether it\nis small enough to be worth inlining is the caller's decision.",
                    "shapes": [
                        "@return array<string, string> handle => path"
                    ],
                    "params": [],
                    "line": 387,
                    "end": 397
                },
                {
                    "routes": [],
                    "name": "unsource",
                    "static": false,
                    "visibility": "public",
                    "signature": "unsource(string $handle): void",
                    "doc": "Drops a handle's source so it prints as markup rather than a link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 400,
                    "end": 406
                },
                {
                    "routes": [],
                    "name": "markDone",
                    "static": false,
                    "visibility": "public",
                    "signature": "markDone(string $handle): void",
                    "doc": "Records a handle as printed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 409,
                    "end": 413
                },
                {
                    "routes": [],
                    "name": "item",
                    "static": false,
                    "visibility": "public",
                    "signature": "item(string $handle): ?array",
                    "doc": "One registered asset, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 416,
                    "end": 419
                },
                {
                    "routes": [],
                    "name": "items",
                    "static": false,
                    "visibility": "public",
                    "signature": "items(): array",
                    "doc": "Every registered asset.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 426,
                    "end": 429
                },
                {
                    "routes": [],
                    "name": "queue",
                    "static": false,
                    "visibility": "public",
                    "signature": "queue(): array",
                    "doc": "The handles queued.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 436,
                    "end": 439
                },
                {
                    "routes": [],
                    "name": "kind",
                    "static": false,
                    "visibility": "public",
                    "signature": "kind(): string",
                    "doc": "Whether these are scripts or styles.",
                    "shapes": [],
                    "params": [],
                    "line": 442,
                    "end": 445
                },
                {
                    "routes": [],
                    "name": "settle",
                    "static": false,
                    "visibility": "private",
                    "signature": "settle(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 53,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "changed",
                    "static": false,
                    "visibility": "private",
                    "signature": "changed(): void",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 60,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "defaults",
                    "static": true,
                    "visibility": "private",
                    "signature": "defaults(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, array<string, list<string>>>"
                    ],
                    "params": [],
                    "line": 202,
                    "end": 209
                },
                {
                    "routes": [],
                    "name": "held",
                    "static": false,
                    "visibility": "private",
                    "signature": "held(string $handle): bool",
                    "doc": "Whether a handle is an item to attach to: one registered here, or a\nstylesheet the reference registers itself, held from then on with no\nfile (the engine ships none of those) so what a plugin attaches to it\nstill prints. A core script is not held: its inline code without the\nlibrary would only fail in the browser.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 252,
                    "end": 259
                },
                {
                    "routes": [],
                    "name": "ordered",
                    "static": false,
                    "visibility": "private",
                    "signature": "ordered(array $start): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $start",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "start",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 348,
                    "end": 378
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Avatar",
            "short": "Avatar",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Avatar.php",
            "lines": 62,
            "doc": "Avatars the way get_avatar_data and get_avatar decide them: the argument\ndefaults, the email an id, user, post, or comment names, the Gravatar URL,\nand the <img> attributes. Behaviour pinned by contracts/fixtures/api/functions.json.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\Comments"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "dataArgs",
                    "static": true,
                    "visibility": "public",
                    "signature": "dataArgs(array $args): array",
                    "doc": "The data arguments normalised: sizes to integers, the default token, the rating lowercased.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "hash",
                    "static": true,
                    "visibility": "public",
                    "signature": "hash(string $email): string",
                    "doc": "The Gravatar hash an email yields; '' for no email.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "hashFromAddress",
                    "static": true,
                    "visibility": "public",
                    "signature": "hashFromAddress(string $address): ?string",
                    "doc": "A hash given as an md5.gravatar.com address, else null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "urlArgs",
                    "static": true,
                    "visibility": "public",
                    "signature": "urlArgs(array $args): array",
                    "doc": "The Gravatar URL's query arguments for the data arguments. @return array<string, string|int|false>",
                    "shapes": [
                        "@return array<string, string|int|false>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "classes",
                    "static": true,
                    "visibility": "public",
                    "signature": "classes(int $size, bool $isDefault, mixed $extra): array",
                    "doc": "The <img> classes: the size class, a default marker, the caller's own. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "size",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "isDefault",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "extraAttributes",
                    "static": true,
                    "visibility": "public",
                    "signature": "extraAttributes(string $extra, mixed $loading, mixed $decoding): string",
                    "doc": "The extra attribute string with loading and decoding added when the caller did not set them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "extra",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "loading",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "decoding",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 72
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\BlockFilters",
            "short": "BlockFilters",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/BlockFilters.php",
            "lines": 127,
            "doc": "The block-level filters plugin code hooks (pre_render_block,\nrender_block_data, render_block, render_block_{name}), applied around the\nengine's own renderer so a plugin sees every block the page renders, not\nonly the ones it registered.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Renderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "NATIVE_DATA_DONE",
                    "value": "array (   'wp_render_elements_support_styles' => 10,   'wp_render_block_style_variation_support_styles' => 10,   'block_core_gallery_data_id_backcompatibility' => 10, )",
                    "doc": "The data filters the engine's renderer does itself for a block it renders natively: element styles, style variations, a gallery's image ids.",
                    "visibility": "public"
                },
                {
                    "name": "NATIVE_RENDER_DONE",
                    "value": "array (   'wp_render_elements_class_name' => 10,   'wp_render_block_style_variation_class_name' => 10,   'wp_render_layout_support_flag' =>    array (     0 => 10,     1 => '_minn_render_child_layout_support',   ),   'block_core_paragraph_add_class' => 10, )",
                    "doc": "The render filters it does itself: the element and style variation\nclasses, the layout's container classes (a child's own layout left to a\nstand-in), the paragraph's class.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "parsedFor",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "active",
                    "static": true,
                    "visibility": "public",
                    "signature": "active(): bool",
                    "doc": "Whether any block filter is registered.",
                    "shapes": [],
                    "params": [],
                    "line": 18,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": true,
                    "visibility": "public",
                    "signature": "toArray(Minn\\Blocks\\Block $block): array",
                    "doc": "A block as the parsed array plugins receive.",
                    "shapes": [
                        "@return array<string, mixed> the parsed-array shape plugin code reads"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "fromArray",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromArray(array $parsed): Minn\\Blocks\\Block",
                    "doc": "A block from the parsed array plugins hand back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "parsed",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "data",
                    "static": true,
                    "visibility": "public",
                    "signature": "data(array $parsed, ?object $parent, array $done = array ( )): mixed",
                    "doc": "A parsed block through render_block_data, without the callbacks done\nalready (NATIVE_DATA_DONE for a block the engine's renderer renders).",
                    "shapes": [
                        "@param array<string, mixed> $parsed",
                        "@param array<string, int|array{0: int, 1: string}> $done"
                    ],
                    "params": [
                        {
                            "name": "parsed",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "?object",
                            "shape": "object|null",
                            "default": null,
                            "doc": "the WP_Block rendering it, when there is one"
                        },
                        {
                            "name": "done",
                            "type": "array",
                            "shape": "array<string, int|array{0: int, 1: string}>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "rendered",
                    "static": true,
                    "visibility": "public",
                    "signature": "rendered(string $html, array $parsed, ?object $instance, array $done = array ( )): string",
                    "doc": "A rendered block through render_block and its per-name filter, without\nthe callbacks done already (NATIVE_RENDER_DONE, with its stand-ins, for\na block the engine's renderer renders).",
                    "shapes": [
                        "@param array<string, mixed> $parsed",
                        "@param array<string, int|array{0: int, 1: string}> $done"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parsed",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "?object",
                            "shape": "object|null",
                            "default": null,
                            "doc": "the WP_Block the filters receive"
                        },
                        {
                            "name": "done",
                            "type": "array",
                            "shape": "array<string, int|array{0: int, 1: string}>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "before",
                    "static": true,
                    "visibility": "public",
                    "signature": "before(Minn\\Blocks\\Block $block, array $done = array ( )): Minn\\Blocks\\Block|string",
                    "doc": "A short-circuit from pre_render_block, or the block as render_block_data left it.",
                    "shapes": [
                        "@param array<string, int|array{0: int, 1: string}> $done the data filters done already"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "done",
                            "type": "array",
                            "shape": "array<string, int|array{0: int, 1: string}>",
                            "default": "array ( )",
                            "doc": "the data filters done already"
                        }
                    ],
                    "line": 101,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "after",
                    "static": true,
                    "visibility": "public",
                    "signature": "after(Minn\\Blocks\\Block $block, string $html, array $done = array ( )): string",
                    "doc": "A rendered block through render_block and its per-name filter.",
                    "shapes": [
                        "@param array<string, int|array{0: int, 1: string}> $done the render filters done already"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "Minn\\Blocks\\Block",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "done",
                            "type": "array",
                            "shape": "array<string, int|array{0: int, 1: string}>",
                            "default": "array ( )",
                            "doc": "the render filters done already"
                        }
                    ],
                    "line": 123,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "context",
                    "static": true,
                    "visibility": "private",
                    "signature": "context(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 133,
                    "end": 140
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\BlockHooks",
            "short": "BlockHooks",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/BlockHooks.php",
            "lines": 69,
            "doc": "The Block Hooks API on the engine's own front end: a plugin asks for its\nblock to be inserted next to an anchor block in a template part or a\npattern (WooCommerce puts the mini-cart after the navigation in a\nheader), and the markup the renderer reads carries those insertions.\n\nThe facade owns the traversal (wp-api/blocks.php); this is the seam the\ntheme blocks call, and it stays inert until a plugin actually hooks\nsomething, so a site without such a plugin parses nothing extra.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\Structure"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "active",
                    "static": true,
                    "visibility": "public",
                    "signature": "active(): bool",
                    "doc": "Whether block hooks are registered (the runtime's functions are there only once it is up).",
                    "shapes": [],
                    "params": [],
                    "line": 20,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "forPart",
                    "static": true,
                    "visibility": "public",
                    "signature": "forPart(string $markup, string $slug, string $area): string",
                    "doc": "A template part's markup with its hooked blocks inserted. The context\nis the part itself: a plugin reads its area to tell a header from a\nfooter, and its content to see whether its block is already there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "area",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "registeredPattern",
                    "static": true,
                    "visibility": "public",
                    "signature": "registeredPattern(string $slug): ?string",
                    "doc": "A plugin-registered pattern's content, hooks already applied by the\nregistry, for a slug the theme does not carry. Null when the runtime\nis not up or nothing registered that name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "forPattern",
                    "static": true,
                    "visibility": "public",
                    "signature": "forPattern(string $markup, string $slug, array $blockTypes, array $categories): string",
                    "doc": "A theme pattern's markup with its hooked blocks inserted, with the\npattern array as the context (blockTypes and categories are how a\nplugin recognises a header pattern).",
                    "shapes": [
                        "@param list<string> $blockTypes",
                        "@param list<string> $categories"
                    ],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "blockTypes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "categories",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 84
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\BlockMetadata",
            "short": "BlockMetadata",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/BlockMetadata.php",
            "lines": 95,
            "doc": "block.json to the settings a block type registers with: the property\nrenames, the script and style handles (registered through the closures,\none per entry), the view script modules, the block hooks positions, and\nthe render template as a callback. Behaviour pinned by contracts/fixtures/api/blocks.json.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "PROPERTIES",
                    "value": "array (   'apiVersion' => 'api_version',   'name' => 'name',   'title' => 'title',   'category' => 'category',   'parent' => 'parent',   'ancestor' => 'ancestor',   'icon' => 'icon',   'description' => 'description',   'keywords' => 'keywords',   'attributes' => 'attributes',   'providesContext' => 'provides_context',   'usesContext' => 'uses_context',   'selectors' => 'selectors',   'supports' => 'supports',   'styles' => 'styles',   'variations' => 'variations',   'example' => 'example',   'allowedBlocks' => 'allowed_blocks', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SCRIPTS",
                    "value": "array (   'editorScript' => 'editor_script_handles',   'script' => 'script_handles',   'viewScript' => 'view_script_handles', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "STYLES",
                    "value": "array (   'editorStyle' => 'editor_style_handles',   'style' => 'style_handles',   'viewStyle' => 'view_style_handles', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "POSITIONS",
                    "value": "array (   'before' => 'before',   'after' => 'after',   'firstChild' => 'first_child',   'lastChild' => 'last_child', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "FIELD_HANDLES",
                    "value": "array (   'editorScript' => 'editor-script',   'editorStyle' => 'editor-style',   'script' => 'script',   'style' => 'style',   'viewScript' => 'view-script',   'viewScriptModule' => 'view-script-module',   'viewStyle' => 'view-style', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "settings",
                    "static": true,
                    "visibility": "public",
                    "signature": "settings(array $metadata, Closure $scriptHandle, Closure $styleHandle, Closure $moduleId, Closure $render): array",
                    "doc": "Block settings from a block.json, the way the reference maps its properties.",
                    "shapes": [
                        "@param Closure(array, string, int): (string|false) $scriptHandle registers one script entry, answering its handle",
                        "@param Closure(array, string, int): (string|false) $styleHandle registers one style entry",
                        "@param Closure(array, string, int): (string|false) $moduleId registers one view script module entry",
                        "@param Closure(string): ?Closure $render the render callback for a template path, or null when the file is missing",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "metadata",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scriptHandle",
                            "type": "Closure",
                            "shape": "Closure(array, string, int): (string|false)",
                            "default": null,
                            "doc": "registers one script entry, answering its handle"
                        },
                        {
                            "name": "styleHandle",
                            "type": "Closure",
                            "shape": "Closure(array, string, int): (string|false)",
                            "default": null,
                            "doc": "registers one style entry"
                        },
                        {
                            "name": "moduleId",
                            "type": "Closure",
                            "shape": "Closure(array, string, int): (string|false)",
                            "default": null,
                            "doc": "registers one view script module entry"
                        },
                        {
                            "name": "render",
                            "type": "Closure",
                            "shape": "Closure(string): ?Closure",
                            "default": null,
                            "doc": "the render callback for a template path, or null when the file is missing"
                        }
                    ],
                    "line": 31,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "assetHandle",
                    "static": true,
                    "visibility": "public",
                    "signature": "assetHandle(string $block, string $field, int $index = 0): string",
                    "doc": "The script or style handle a block.json field registers under; core blocks keep the `wp-block-` spelling.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "index",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "handles",
                    "static": true,
                    "visibility": "private",
                    "signature": "handles(array $metadata, string $field, Closure $register): ?array",
                    "doc": "The registered handles for one asset field: every entry when the field lists several; null when the field is absent. @return list<string>|null",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "metadata",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "register",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 92
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\BlockTemplates",
            "short": "BlockTemplates",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/BlockTemplates.php",
            "lines": 67,
            "doc": "Block templates plugins register at runtime, by their namespaced name\n(\"plugin//slug\"). A theme file or a saved template of the same slug\nwins; otherwise the registered content renders for that slug.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\Templates"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "templates",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(string $name, array $args): array|string",
                    "doc": "The registered row, or the refusal code the reference reports.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "unregister",
                    "static": false,
                    "visibility": "public",
                    "signature": "unregister(string $name): ?array",
                    "doc": "Forgets a registered template; the row, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every registered template.",
                    "shapes": [
                        "@return array<string, array<string, mixed>> by registered name"
                    ],
                    "params": [],
                    "line": 57,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $name): ?array",
                    "doc": "One registered template, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "bySlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "bySlug(string $slug): ?array",
                    "doc": "A registered template by slug, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 77
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\BlockWidget",
            "short": "BlockWidget",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/BlockWidget.php",
            "lines": 30,
            "doc": "A block widget's legacy class name. Every widget the block editor saves\nis one block of markup, and a classic theme styles it by the widget\nclass the equivalent legacy widget used, so the wrapper carries a\nsecond class named after the FIRST block in the content. A block with\nno legacy equivalent adds nothing.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "BASE_CLASS",
                    "value": "'widget_block'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "LEGACY_CLASSES",
                    "value": "array (   'core/paragraph' => 'widget_text',   'core/search' => 'widget_search',   'core/html' => 'widget_custom_html',   'core/archives' => 'widget_archive',   'core/latest-posts' => 'widget_recent_entries',   'core/latest-comments' => 'widget_recent_comments',   'core/tag-cloud' => 'widget_tag_cloud',   'core/categories' => 'widget_categories',   'core/calendar' => 'widget_calendar',   'core/rss' => 'widget_rss', )",
                    "doc": "First block name => the legacy widget class a theme styles.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "classNameFor",
                    "static": true,
                    "visibility": "public",
                    "signature": "classNameFor(array $blocks): string",
                    "doc": "The legacy widget class a block widget maps to.",
                    "shapes": [
                        "@param list<array<string, mixed>> $blocks the parsed content"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "the parsed content"
                        }
                    ],
                    "line": 37,
                    "end": 42
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\BrowserGlobals",
            "short": "BrowserGlobals",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/BrowserGlobals.php",
            "lines": 45,
            "doc": "The browser and web server a request names, as the reference's globals\nhave them from boot ($is_chrome, $is_safari, $is_IE, $is_apache,\n$is_nginx, …; probe vars-matrix): one browser at most, read from the\nuser agent in the reference's order (Lynx, Edge, Opera, Chrome, Safari,\nInternet Explorer on a Mac then elsewhere, Gecko, Netscape 4), an\niPhone being a mobile Safari; the server from SERVER_SOFTWARE, IIS 7 and\nup apart. Chrome Frame's switch is the facade's (use_google_chrome_frame).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "NAMES",
                    "value": "array (   0 => 'is_lynx',   1 => 'is_gecko',   2 => 'is_winIE',   3 => 'is_macIE',   4 => 'is_opera',   5 => 'is_NS4',   6 => 'is_safari',   7 => 'is_chrome',   8 => 'is_iphone',   9 => 'is_IE',   10 => 'is_edge',   11 => 'is_apache',   12 => 'is_IIS',   13 => 'is_iis7',   14 => 'is_nginx',   15 => 'is_caddy', )",
                    "doc": "The globals, in the order the reference sets them.",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "detect",
                    "static": true,
                    "visibility": "public",
                    "signature": "detect(string $agent, string $software): array",
                    "doc": "Each global's value for this user agent and server software.",
                    "shapes": [
                        "@return array<string, bool>"
                    ],
                    "params": [
                        {
                            "name": "agent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "software",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "browser",
                    "static": true,
                    "visibility": "private",
                    "signature": "browser(string $agent): ?string",
                    "doc": "The one browser global the user agent sets, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "agent",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentCloser",
            "short": "CommentCloser",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/CommentCloser.php",
            "lines": 30,
            "doc": "The Discussion setting that closes comments on old posts. Observed on the\nreference: only the \"post\" type closes (the types filter changes nothing),\nstatus is not consulted, the age is whole days on post_date_gmt and must\nexceed the setting (a fifteen-day-old post stays open at fifteen), and zero\ndays switches the rule off.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(bool $enabled, int $days)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "enabled",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "days",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 18,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "enabled",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "days",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "open",
                    "static": false,
                    "visibility": "public",
                    "signature": "open(bool $open, Minn\\Content\\PostRecord|array|null $post, int $now): bool",
                    "doc": "Whether comments stay open on a post under the close-after-days setting.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "open",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord|array|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "closes",
                    "static": false,
                    "visibility": "public",
                    "signature": "closes(string $postType, string $postDateGmt, array $types, int $now): bool",
                    "doc": "Whether the setting closes a post of $postType published at\n$postDateGmt: the type is one of $types, the setting is on, and the\npost is older than the days allowed. The posts a single query hands\nover (_close_comments_for_old_posts) take their types from the\nclose_comments_for_post_types filter, which is honoured there.",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "postType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postDateGmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 44
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentEvents",
            "short": "CommentEvents",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/CommentEvents.php",
            "lines": 254,
            "doc": "What the reference's REST comments controller tells plugins, for the\nengine's own: with plugins loaded every change goes through the\nruntime's comment functions (wp_insert_comment, wp_update_comment,\nwp_set_comment_status, wp_trash_comment, wp_delete_comment), which fire\nthe reference's actions in its order, and the REST actions follow.\nWithout a booted runtime the rows are written as before and nothing is\ntold.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\CommentRecord",
                "Minn\\Content\\Comments",
                "Minn\\Http\\Request",
                "Minn\\RestError",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [
                "Minn\\Rest\\CommentsController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Comments $comments)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "comments",
                        "type": "Minn\\Content\\Comments",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 29
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "comments",
                    "type": "Minn\\Content\\Comments",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "live",
                    "static": false,
                    "visibility": "public",
                    "signature": "live(): bool",
                    "doc": "Whether plugins are loaded to be told anything.",
                    "shapes": [],
                    "params": [],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "allow",
                    "static": false,
                    "visibility": "public",
                    "signature": "allow(string $address, string $email, string $dateGmt): void",
                    "doc": "The check a new comment passes on the reference before it is written: check_comment_flood, with the address, the email and the GMT date.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dateGmt",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "restCreate",
                    "static": false,
                    "visibility": "public",
                    "signature": "restCreate(array $prepared, Minn\\Http\\Request $request): int",
                    "doc": "A comment created over REST with plugins loaded, as the reference's\ncontroller creates one (probe rest-comment-save): the request's\nfields through rest_preprocess_comment, the signed-in author filled\nin, the content check (allow_empty_comment), the date, the length\ncheck, wp_allow_comment (a duplicate is a 409, a flood a 400),\nrest_pre_insert_comment, then wp_insert_comment over\nwp_filter_comment; a refusal is its REST error.",
                    "shapes": [
                        "@param array<string, mixed> $prepared the request's fields as the controller prepares them"
                    ],
                    "params": [
                        {
                            "name": "prepared",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the request's fields as the controller prepares them"
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "restUpdate",
                    "static": false,
                    "visibility": "public",
                    "signature": "restUpdate(Minn\\Content\\CommentRecord $comment, array $prepared, ?string $status, Minn\\Http\\Request $request): void",
                    "doc": "A comment changed over REST with plugins loaded: the request's fields\nthrough rest_preprocess_comment, the content and length checks,\nwp_update_comment, then the status, as the reference's controller\nchanges one.",
                    "shapes": [
                        "@param array<string, mixed> $prepared"
                    ],
                    "params": [
                        {
                            "name": "comment",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prepared",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "changeStatus",
                    "static": true,
                    "visibility": "public",
                    "signature": "changeStatus(int $id, string $asked): void",
                    "doc": "A REST status asked for, as the reference's controller changes it:\nnothing when it is already so; approve and hold through\nwp_set_comment_status with that word, spam, unspam, trash and untrash\nthrough their own functions.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "asked",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "insert",
                    "static": false,
                    "visibility": "public",
                    "signature": "insert(array $columns): int",
                    "doc": "Writes a new comment and returns its id; an approved one is counted on its post. @param array<string, mixed> $columns",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(Minn\\Content\\CommentRecord $comment, array $columns, ?string $status): void",
                    "doc": "An edit through REST: the fields, as wp_update_comment writes them\n(which tells plugins even when nothing changed), then the status\nthrough wp_set_comment_status when it moves.",
                    "shapes": [
                        "@param array<string, string> $columns"
                    ],
                    "params": [
                        {
                            "name": "comment",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 206,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "trash",
                    "static": false,
                    "visibility": "public",
                    "signature": "trash(Minn\\Content\\CommentRecord $comment): void",
                    "doc": "Moves a comment to the trash, keeping its status and the time for the way back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "comment",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 243
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(Minn\\Content\\CommentRecord $comment): void",
                    "doc": "Removes a comment for good.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "comment",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 246,
                    "end": 254
                },
                {
                    "routes": [],
                    "name": "restSaved",
                    "static": false,
                    "visibility": "public",
                    "signature": "restSaved(int $id, Minn\\Http\\Request $request, ?Minn\\Content\\CommentRecord $before): void",
                    "doc": "rest_insert_comment, then rest_after_insert_comment, with the comment as it stands and the request; no $before is a new comment.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 257,
                    "end": 268
                },
                {
                    "routes": [],
                    "name": "restDeleted",
                    "static": false,
                    "visibility": "public",
                    "signature": "restDeleted(Minn\\Content\\CommentRecord $comment, array $data, Minn\\Http\\Request $request): void",
                    "doc": "rest_delete_comment, after a trash or a delete, with the comment as it was and the response. @param array<string, mixed> $data",
                    "shapes": [
                        "@param array<string, mixed> $data"
                    ],
                    "params": [
                        {
                            "name": "comment",
                            "type": "Minn\\Content\\CommentRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 277
                },
                {
                    "routes": [],
                    "name": "preprocessed",
                    "static": true,
                    "visibility": "private",
                    "signature": "preprocessed(array $prepared, WP_REST_Request $request): array",
                    "doc": "rest_preprocess_comment over the prepared comment.",
                    "shapes": [
                        "@param array<string, mixed> $prepared",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "prepared",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "requireContent",
                    "static": true,
                    "visibility": "private",
                    "signature": "requireContent(array $prepared): void",
                    "doc": "The reference's content check: allow_empty_comment, handed the comment\nwith the author, parent, post and user filled in; empty content is a 400.",
                    "shapes": [
                        "@param array<string, mixed> $prepared"
                    ],
                    "params": [
                        {
                            "name": "prepared",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "field",
                    "static": true,
                    "visibility": "private",
                    "signature": "field(array $row, string $key): mixed",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 167
                },
                {
                    "routes": [],
                    "name": "requireLengths",
                    "static": true,
                    "visibility": "private",
                    "signature": "requireLengths(array $prepared): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $prepared"
                    ],
                    "params": [
                        {
                            "name": "prepared",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 170,
                    "end": 176
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(WP_Error $error): Minn\\RestError",
                    "doc": "A plugin's error as REST serves it: its own status, or 500.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "WP_Error",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 183
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentFeedQuery",
            "short": "CommentFeedQuery",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CommentFeedQuery.php",
            "lines": 50,
            "doc": "The comments a comments feed's main query carries, as the reference\nfinds them (probe comment-feed-query). For a listing (the site's, an\narchive's, a search's) they come before its posts, which are then\nnarrowed to the posts those comments are on; for a single post they come\nafter it. Either way the comment_feed_* filters shape the query (handed\nthe WP_Query), only approved comments that are not notes count, newest\nfirst, as many as a feed carries.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\PostQueryParts",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\PostQuery"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "listing",
                    "static": true,
                    "visibility": "public",
                    "signature": "listing(WP_Query $query, Minn\\Runtime\\PostQueryParts $parts, object $wpdb): void",
                    "doc": "A listing's comments, then its posts narrowed to theirs: the posts query's join and where as they stand after posts_join.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parts",
                            "type": "Minn\\Runtime\\PostQueryParts",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpdb",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "single",
                    "static": true,
                    "visibility": "public",
                    "signature": "single(WP_Query $query, object $wpdb): void",
                    "doc": "A single post's comments, once the query has found the post.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpdb",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "request",
                    "static": true,
                    "visibility": "private",
                    "signature": "request(WP_Query $query, string $join, string $where, string $groupby, string $select): string",
                    "doc": "The request, its pieces through the comment_feed_* filters.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "join",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "groupby",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "select",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "keep",
                    "static": true,
                    "visibility": "private",
                    "signature": "keep(WP_Query $query, array $rows): void",
                    "doc": "",
                    "shapes": [
                        "@param list<mixed> $rows rows or ids, each made a WP_Comment"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": "rows or ids, each made a WP_Comment"
                        }
                    ],
                    "line": 60,
                    "end": 64
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentForm",
            "short": "CommentForm",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CommentForm.php",
            "lines": 107,
            "doc": "The comment form's submission with plugins loaded\n(wp_handle_comment_submission), in the order the reference runs it\n(contracts/runtime.md \"The comment form\"): a reply to a comment still\nheld is refused; the post is looked at, each refusal with its action\n(comment_id_not_found, comment_closed, comment_on_trash, comment_on_draft,\ncomment_on_password_protected) and pre_comment_on_post when it takes\ncomments; the signed-in user's own name and addresses replace the form's,\nor a site that requires sign-in refuses; the required fields, an empty\ncomment (allow_empty_comment) and the column lengths are checked; then\nwp_new_comment stores it, where preprocess_comment, the duplicate and\nflood checks and pre_comment_approved have their say. A refusal is a\nWP_Error whose data is the status the form answers with; none means a\nblank page.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "submit",
                    "static": true,
                    "visibility": "public",
                    "signature": "submit(array $form): WP_Comment|WP_Error",
                    "doc": "The stored comment, or the refusal the form answers with.",
                    "shapes": [
                        "@param array<string, mixed> $form the posted fields, unslashed"
                    ],
                    "params": [
                        {
                            "name": "form",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the posted fields, unslashed"
                        }
                    ],
                    "line": 31,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "store",
                    "static": true,
                    "visibility": "private",
                    "signature": "store(array $data, string $content): WP_Comment|WP_Error",
                    "doc": "The comment checked for content and length, then stored through wp_new_comment. @param array<string, mixed> $data",
                    "shapes": [
                        "@param array<string, mixed> $data"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "postRefusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "postRefusal(int $postId): ?WP_Error",
                    "doc": "Why the post takes no comment, or null after pre_comment_on_post when it does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "fieldRefusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "fieldRefusal(WP_User $user, string $author, string $email): ?WP_Error",
                    "doc": "A signed-out commenter's name and email, when the site requires them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "user",
                            "type": "WP_User",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "author",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 129
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentPages",
            "short": "CommentPages",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CommentPages.php",
            "lines": 115,
            "doc": "Which page of a post's comments a comment falls on, and the link that\nopens it there, as the reference works them out (probe comment-pages):\nthe page size from the arguments, the comments_per_page query variable\nor the option (no pages at all when comments are not paged); a reply\ntakes its top-level comment's page while comments are threaded; a page\nis the count of older top-level comments over the page size. The\ndefault page loses its number when the oldest comments come first.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Lists",
                "Minn\\Support\\Url"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULTS",
                    "value": "array (   'type' => 'all',   'page' => '',   'per_page' => '',   'max_depth' => '', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "pageOf",
                    "static": true,
                    "visibility": "public",
                    "signature": "pageOf(mixed $commentId, array $args): ?int",
                    "doc": "The page a comment is on, through get_page_of_comment (handed the\narguments as settled and as given); a threaded reply answers with\nits top-level comment's page. Null for a comment that is not there.",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "commentId",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "linkPage",
                    "static": true,
                    "visibility": "public",
                    "signature": "linkPage(?WP_Comment $comment, array $args): mixed",
                    "doc": "The page a comment's link names (before get_comment_link): the one\nasked for, the loop's, or the comment's own; '' for the default page\nwhen the oldest comments come first.",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "comment",
                            "type": "?WP_Comment",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "shown",
                    "static": true,
                    "visibility": "public",
                    "signature": "shown(mixed $cpage): mixed",
                    "doc": "The comments page being shown (the cpage query variable) as the list's\nlinks and reply links name it: '' for the default page when the\noldest comments come first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "cpage",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "link",
                    "static": true,
                    "visibility": "public",
                    "signature": "link(string $permalink, mixed $page): string",
                    "doc": "A post's link opened at a page of its comments, as pretty or plain links write it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "permalink",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "olderQuery",
                    "static": true,
                    "visibility": "private",
                    "signature": "olderQuery(WP_Comment $comment, array $args): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $args the count of the top-level comments older than this one, through get_page_of_comment_query_args"
                    ],
                    "params": [
                        {
                            "name": "comment",
                            "type": "WP_Comment",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the count of the top-level comments older than this one, through get_page_of_comment_query_args"
                        }
                    ],
                    "line": 64,
                    "end": 81
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentQuery",
            "short": "CommentQuery",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/CommentQuery.php",
            "lines": 28,
            "doc": "The approval breakdown wp_count_comments reports (comment lists run through WP_Comment_Query and Minn\\Runtime\\CommentQueryRunner).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db",
                "Minn\\Runtime\\CommentQueryRunner"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 12,
                "end": 14
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "breakdown",
                    "static": false,
                    "visibility": "public",
                    "signature": "breakdown(int $postId): array",
                    "doc": "The counts wp_count_comments reports, for one post or the site. @return array<string, int>",
                    "shapes": [
                        "@return array<string, int>"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 36
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentQueryRunner",
            "short": "CommentQueryRunner",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CommentQueryRunner.php",
            "lines": 131,
            "doc": "WP_Comment_Query as the reference runs it (probe wp-comment-query-sql):\nthe variables filled and handed to pre_get_comments, the meta query's\nSQL, comments_pre_query (which may answer), the clauses (the date query\namong them) handed to comments_clauses, the request, found_comments_query\nwhen a limited query counts what it found, then the ids, the count, or\nthe comments through the_comments, threaded or flattened when asked.\nResults are not cached between queries (the reference keeps them in the\nobject cache by last_changed).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\RowCache",
                "Minn\\Query\\CommentOrder",
                "Minn\\Runtime\\CommentQueryWhere",
                "Minn\\Runtime\\CommentThreads"
            ],
            "usedBy": [
                "Minn\\Runtime\\CommentQuery"
            ],
            "constructor": {
                "signature": "__construct(object $wpdb)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "wpdb",
                        "type": "object",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 25
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "wpdb",
                    "type": "object",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(WP_Comment_Query $query): mixed",
                    "doc": "Runs the query, as WP_Comment_Query::get_comments() does: a count, ids, or comments.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Comment_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": false,
                    "visibility": "public",
                    "signature": "ids(WP_Comment_Query $query, array $meta): array|int",
                    "doc": "The comment IDs for the query's vars (get_comment_ids), or the count\nwhen it counts; the request is written, and the found rows read when\nthe request counts them and found some.",
                    "shapes": [
                        "@param array{join?: string, where?: string} $meta",
                        "@return list<int>|int"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Comment_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array{join?: string, where?: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "request",
                    "static": false,
                    "visibility": "private",
                    "signature": "request(WP_Comment_Query $query, array $meta): array",
                    "doc": "The clauses through comments_clauses, kept on the query and written\nas its request, and whether the request counts the rows it found.",
                    "shapes": [
                        "@param array{join?: string, where?: string} $meta",
                        "@return array{0: string, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Comment_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array{join?: string, where?: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "comments",
                    "static": false,
                    "visibility": "private",
                    "signature": "comments(array $ids, array $qv): array",
                    "doc": "The comments for the ids in their order, each through get_comment(),\ntheir posts loaded first when asked.",
                    "shapes": [
                        "@param list<int> $ids",
                        "@param array<string, mixed> $qv",
                        "@return list<\\WP_Comment>"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 121,
                    "end": 150
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentQueryWhere",
            "short": "CommentQueryWhere",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CommentQueryWhere.php",
            "lines": 196,
            "doc": "WP_Comment_Query's WHERE pieces and the posts join, in the reference's\norder (probe wp-comment-query-sql): the approval statuses (with the\nreaders whose held comments show), the post, the id lists, the author's\nemail and url, karma, the types (notes left out unless asked for), the\nparent (0 for a threaded or flat query that names none), the user, the\nsearch, the post's own fields, the author lists, then the meta and date\nqueries.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Query\\Sql",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Runtime\\CommentQueryRunner"
            ],
            "constructor": {
                "signature": "__construct(object $wpdb)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "wpdb",
                        "type": "object",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 29
            },
            "cases": [],
            "constants": [
                {
                    "name": "ID_LISTS",
                    "value": "array (   'comment__in' => '{c}.comment_ID IN',   'comment__not_in' => '{c}.comment_ID NOT IN',   'parent__in' => 'comment_parent IN',   'parent__not_in' => 'comment_parent NOT IN',   'post__in' => 'comment_post_ID IN',   'post__not_in' => 'comment_post_ID NOT IN', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "AUTHOR_LISTS",
                    "value": "array (   'author__in' => 'user_id IN',   'author__not_in' => 'user_id NOT IN',   'post_author__in' => 'post_author IN',   'post_author__not_in' => 'post_author NOT IN', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "POST_FIELDS",
                    "value": "array (   0 => 'post_author',   1 => 'post_name',   2 => 'post_parent',   3 => 'post_status',   4 => 'post_type', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SEARCHED",
                    "value": "array (   0 => 'comment_author',   1 => 'comment_author_email',   2 => 'comment_author_url',   3 => 'comment_author_IP',   4 => 'comment_content', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ALL",
                    "value": "'( comment_approved = \\'0\\' OR comment_approved = \\'1\\' )'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "wpdb",
                    "type": "object",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "pieces",
                    "static": false,
                    "visibility": "public",
                    "signature": "pieces(WP_Comment_Query $query, array $meta): array",
                    "doc": "The WHERE pieces (joined with AND by the caller) and the posts join\n('' when no post field is asked after).",
                    "shapes": [
                        "@param array{join?: string, where?: string} $meta the meta query's SQL, when it has clauses",
                        "@return array{0: list<string>, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Comment_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array{join?: string, where?: string}",
                            "default": null,
                            "doc": "the meta query's SQL, when it has clauses"
                        }
                    ],
                    "line": 38,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "searchSql",
                    "static": true,
                    "visibility": "public",
                    "signature": "searchSql(string $search, array $columns): string",
                    "doc": "A LIKE test over the columns (get_search_sql), as an AND clause. @param list<string> $columns",
                    "shapes": [
                        "@param list<string> $columns"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 166
                },
                {
                    "routes": [],
                    "name": "approved",
                    "static": false,
                    "visibility": "private",
                    "signature": "approved(array $qv): string",
                    "doc": "The approval test: each status (all is approved or held, any is no\ntest), and the held comments of the readers named by email or user id.",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "post",
                    "static": false,
                    "visibility": "private",
                    "signature": "post(array $qv): string",
                    "doc": "The one post asked for. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "types",
                    "static": false,
                    "visibility": "private",
                    "signature": "types(array $qv): array",
                    "doc": "The types in (comment stands for itself and the empty type, pings for\npingbacks and trackbacks) and out; notes stay out unless asked for,\nand all asks for no test at all.",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "parentAndUser",
                    "static": false,
                    "visibility": "private",
                    "signature": "parentAndUser(array $qv): array",
                    "doc": "The parent (top level for a threaded or flat query naming none), then the user. @param array<string, mixed> $qv @return list<string>",
                    "shapes": [
                        "@param array<string, mixed> $qv @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 139,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "search",
                    "static": false,
                    "visibility": "private",
                    "signature": "search(array $qv): array",
                    "doc": "A LIKE test over the author's name, email, url, IP and the content. @param array<string, mixed> $qv @return list<string>",
                    "shapes": [
                        "@param array<string, mixed> $qv @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 152,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "posts",
                    "static": false,
                    "visibility": "private",
                    "signature": "posts(array $qv): array",
                    "doc": "The post's own fields, then the comment and post author lists, and\nthe posts join when a post column is tested.",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@return array{0: list<string>, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 175,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "given",
                    "static": true,
                    "visibility": "private",
                    "signature": "given(mixed $value): bool",
                    "doc": "A value the query tests: anything but '', null and false.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "listOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "listOf(mixed $value): array",
                    "doc": "An array as given, or a comma (or space) separated string split. @return list<mixed>",
                    "shapes": [
                        "@return list<mixed>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 201,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "bare",
                    "static": true,
                    "visibility": "private",
                    "signature": "bare(string $sql): string",
                    "doc": "A meta or date query's SQL without its leading AND.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "sql",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 210,
                    "end": 213
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CommentThreads",
            "short": "CommentThreads",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CommentThreads.php",
            "lines": 68,
            "doc": "A threaded or flat comment query's descendants as the reference fills\nthem (probe wp-comment-query-sql): one more comment query a level, with\nthe query's own variables but the level's parents, no parent, no limit\nand no count; a threaded query hangs each reply under its parent, marks\nevery comment's children as known and keeps the top level by id, a flat\none lists the top level and then each level in its query's order.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\CommentQueryRunner"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "LEVEL",
                    "value": "array (   'parent' => '',   'hierarchical' => false,   'number' => 0,   'offset' => 0,   'no_found_rows' => true, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "fill",
                    "static": false,
                    "visibility": "public",
                    "signature": "fill(WP_Comment_Query $query, array $top): array",
                    "doc": "The query's top-level comments with their descendants filled in.",
                    "shapes": [
                        "@param list<\\WP_Comment> $top",
                        "@return array<int, \\WP_Comment>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Comment_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "top",
                            "type": "array",
                            "shape": "list<\\WP_Comment>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "flatten",
                    "static": true,
                    "visibility": "public",
                    "signature": "flatten(array $children, array $args): array",
                    "doc": "A comment's children, then each one's own, depth first, as a list.",
                    "shapes": [
                        "@param array<array-key, mixed> $children",
                        "@param array<string, mixed> $args get_children()'s arguments, handed down",
                        "@return list<\\WP_Comment>"
                    ],
                    "params": [
                        {
                            "name": "children",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "get_children()'s arguments, handed down"
                        }
                    ],
                    "line": 71,
                    "end": 81
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Connectors",
            "short": "Connectors",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Connectors.php",
            "lines": 221,
            "doc": "The connectors registry: the external services a site talks to (AI\nproviders, spam filters, cloud services) and how each authenticates.\nRows are normalised on the way in, the way the reference keeps them;\nthe facade class hands them back to plugin code.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "Methods",
                    "value": "array (   0 => 'api_key',   1 => 'application_password',   2 => 'none', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "AuthenticationKeys",
                    "value": "array (   0 => 'method',   1 => 'credentials_url',   2 => 'setting_name',   3 => 'constant_name',   4 => 'env_var_name', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "MaskCap",
                    "value": "16",
                    "doc": "The reference stops adding bullets after sixteen, whatever the key's length.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "rows",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(string $id, array $args): ?Minn\\Runtime\\Refusal",
                    "doc": "Registers a connector, or the refusal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "unregister",
                    "static": false,
                    "visibility": "public",
                    "signature": "unregister(string $id): ?array",
                    "doc": "Forgets a connector; its row, or null.",
                    "shapes": [
                        "@return array<string, mixed>|null the row that was registered, null when there was none"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every connector.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 97,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $id): ?array",
                    "doc": "One connector, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": false,
                    "visibility": "public",
                    "signature": "has(string $id): bool",
                    "doc": "Whether a connector is registered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "registerAiProviders",
                    "static": false,
                    "visibility": "public",
                    "signature": "registerAiProviders(Closure $loaded): void",
                    "doc": "The reference's three AI providers. Whether a provider's plugin is\nactive is asked of the caller's closure, by the connector's id, when\nasked (probe connector-defaults).",
                    "shapes": [
                        "@param Closure(string): bool $loaded"
                    ],
                    "params": [
                        {
                            "name": "loaded",
                            "type": "Closure",
                            "shape": "Closure(string): bool",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "registerAkismet",
                    "static": false,
                    "visibility": "public",
                    "signature": "registerAkismet(Closure $loaded): void",
                    "doc": "Akismet, the spam filter connector the reference adds after the AI\nproviders. Whether its plugin is active is asked of the caller's closure.",
                    "shapes": [
                        "@param Closure(): bool $loaded"
                    ],
                    "params": [
                        {
                            "name": "loaded",
                            "type": "Closure",
                            "shape": "Closure(): bool",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "mask",
                    "static": true,
                    "visibility": "public",
                    "signature": "mask(string $key): string",
                    "doc": "Keys of four characters or fewer are shown whole; longer ones keep their last four behind at most sixteen bullets.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 157
                },
                {
                    "routes": [],
                    "name": "keySource",
                    "static": true,
                    "visibility": "public",
                    "signature": "keySource(string $setting, string $envVar, string $constant, Closure $option): string",
                    "doc": "Where a key comes from, in the reference's precedence: the environment,\nthen a constant, then the stored option; empty values do not count.",
                    "shapes": [
                        "@param Closure(string): mixed $option"
                    ],
                    "params": [
                        {
                            "name": "setting",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "envVar",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "constant",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "option",
                            "type": "Closure",
                            "shape": "Closure(string): mixed",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 176
                },
                {
                    "routes": [],
                    "name": "parseCredentials",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseCredentials(string $value): array",
                    "doc": "\"user:password\" split at the first colon, both halves trimmed; anything else is empty credentials.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "sanitizeCredentials",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitizeCredentials(mixed $value, Closure $clean): array",
                    "doc": "Stored credentials are an array of two text fields; a string, even a\n\"user:password\" one, is not accepted from storage.",
                    "shapes": [
                        "@param Closure(string): string $clean"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clean",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "credentials",
                    "static": true,
                    "visibility": "public",
                    "signature": "credentials(array $auth, Closure $option, Closure $clean): array",
                    "doc": "The credentials a connector authenticates with, from the same three\nsources as a key, plus where they came from.",
                    "shapes": [
                        "@param Closure(string): mixed $option",
                        "@param Closure(string): string $clean"
                    ],
                    "params": [
                        {
                            "name": "auth",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "option",
                            "type": "Closure",
                            "shape": "Closure(string): mixed",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clean",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "normalise",
                    "static": false,
                    "visibility": "private",
                    "signature": "normalise(string $id, array $args, array $authentication, array $plugin): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authentication",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "plugin",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 78
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Constants",
            "short": "Constants",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Constants.php",
            "lines": 91,
            "doc": "The constants plugin code expects: the fixed set from data/constants.json\n(captured from the reference) and the per-site ones computed here. Nothing\nalready defined is touched, so wp-config.php keeps the last word.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Runtime\\AjaxController",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "define",
                    "static": true,
                    "visibility": "public",
                    "signature": "define(Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "Defines the constants the reference defines at boot.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "maxMemoryLimit",
                    "static": true,
                    "visibility": "private",
                    "signature": "maxMemoryLimit(): string",
                    "doc": "256M, unless PHP starts with no limit or a higher one, which is then\nkept as written (probe: the reference started at 128M, 300M, 1G, -1).",
                    "shapes": [],
                    "params": [],
                    "line": 92,
                    "end": 103
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CronTable",
            "short": "CronTable",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CronTable.php",
            "lines": 133,
            "doc": "The cron option's shape, operated on as data: timestamp => hook => key =>\nentry, kept in natural timestamp order. The key is the reference's own\n(a hash of the serialized argument list), so both stacks read one table.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cron\\Cron",
                "Minn\\Ops\\Diagnostics"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "key",
                    "static": true,
                    "visibility": "public",
                    "signature": "key(array $args): string",
                    "doc": "The key an event's arguments hash to.",
                    "shapes": [
                        "@param array<int, array<string, array<string, array<string, mixed>>>> $crons"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "fromBlob",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromBlob(?string $blob): array",
                    "doc": "The table read from the option's stored blob: the version marker\ndropped, timestamps in order, an unreadable or absent blob empty.",
                    "shapes": [
                        "@return array<int, array<string, array<string, array<string, mixed>>>>"
                    ],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "hasNear",
                    "static": true,
                    "visibility": "public",
                    "signature": "hasNear(array $crons, int $timestamp, string $hook, string $key, int $window): bool",
                    "doc": "Whether the same hook and arguments are already scheduled within the window around the timestamp.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "timestamp",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "window",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "insert",
                    "static": true,
                    "visibility": "public",
                    "signature": "insert(array $crons, int $timestamp, string $hook, string $key, array $entry): array",
                    "doc": "The table with an event added at a timestamp.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "timestamp",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "entry",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": true,
                    "visibility": "public",
                    "signature": "remove(array $crons, int $timestamp, string $hook, string $key): array",
                    "doc": "The table with one event removed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "timestamp",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "removeHook",
                    "static": true,
                    "visibility": "public",
                    "signature": "removeHook(array $crons, string $hook): array",
                    "doc": "The table with every event of a hook removed.",
                    "shapes": [
                        "@return array{0: array, 1: int} the table without the hook, and how many entries went"
                    ],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "timestampsFor",
                    "static": true,
                    "visibility": "public",
                    "signature": "timestampsFor(array $crons, string $hook, string $key): array",
                    "doc": "When a hook and key are scheduled.",
                    "shapes": [
                        "@return list<int> every timestamp the hook and arguments are scheduled at"
                    ],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": true,
                    "visibility": "public",
                    "signature": "find(array $crons, string $hook, string $key, ?int $timestamp): ?array",
                    "doc": "The entry for the hook and arguments at a timestamp, or at the next one when no timestamp is given, as [timestamp, entry].",
                    "shapes": [],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "timestamp",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "nextRun",
                    "static": true,
                    "visibility": "public",
                    "signature": "nextRun(int $timestamp, int $interval, int $now): int",
                    "doc": "The next run of a recurring event: one interval from now, aligned to the original timestamp when it is in the past.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "timestamp",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "interval",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "due",
                    "static": true,
                    "visibility": "public",
                    "signature": "due(array $crons, int $now): array",
                    "doc": "The timestamps at or before now, in order.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "crons",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 140,
                    "end": 145
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\CurrentUser",
            "short": "CurrentUser",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/CurrentUser.php",
            "lines": 13,
            "doc": "Who the request is, as the reference settles it before init: the user\ndetermine_current_user names (the engine's own session, through\nwp_validate_auth_cookie, when no plugin hooks it), which the request's\nreader then follows. A plugin that signs in by its own token or cookie\n(JWT, OAuth, single sign-on) is heard; one that names nobody signs the\nrequest out.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Reader",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\Plugins"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "settle",
                    "static": true,
                    "visibility": "public",
                    "signature": "settle(Minn\\Runtime\\Runtime $runtime): int",
                    "doc": "Settles the request's user and reader; returns the user's id (0 for nobody).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 28
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\DbDelta",
            "short": "DbDelta",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/DbDelta.php",
            "lines": 125,
            "doc": "dbDelta as the reference does it: a CREATE TABLE statement creates the\ntable when it is missing, otherwise the columns and keys the statement\nhas and the table lacks are added. Nothing is ever dropped or altered.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "creates",
                    "static": true,
                    "visibility": "public",
                    "signature": "creates(array $queries): array",
                    "doc": "The CREATE TABLE statements in a batch, keyed by table name. @param list<string> $queries @return array<string, string>",
                    "shapes": [
                        "@param list<string> $queries @return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@return array<string, string>"
                        }
                    ],
                    "line": 21,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "apply",
                    "static": false,
                    "visibility": "public",
                    "signature": "apply(array $creates, bool $execute): array",
                    "doc": "Applies CREATE TABLE statements as dbDelta does; the statements run.",
                    "shapes": [
                        "@param array<string, string> $creates @return array<string, string> what was (or would be) done, by table or table.column"
                    ],
                    "params": [
                        {
                            "name": "creates",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "@return array<string, string> what was (or would be) done, by table or table.column"
                        },
                        {
                            "name": "execute",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "tables",
                    "static": false,
                    "visibility": "public",
                    "signature": "tables(): array",
                    "doc": "Every table in the database.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "columns",
                    "static": false,
                    "visibility": "public",
                    "signature": "columns(string $table): array",
                    "doc": "A table's columns with their definitions.",
                    "shapes": [
                        "@return array<string, array<string, mixed>> by column name"
                    ],
                    "params": [
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "indexNames",
                    "static": false,
                    "visibility": "public",
                    "signature": "indexNames(string $table): array",
                    "doc": "A table's index names.",
                    "shapes": [
                        "@return list<string> lowercase key names"
                    ],
                    "params": [
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(string $ddl): void",
                    "doc": "Runs one DDL statement.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ddl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "definitions",
                    "static": true,
                    "visibility": "private",
                    "signature": "definitions(string $body): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: array<string, string>, 1: list<string>} column definitions by lowercase name, and the index lines"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 97
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\DebugMode",
            "short": "DebugMode",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/DebugMode.php",
            "lines": 104,
            "doc": "PHP's error settings from the debug constants, as the reference's boot\nsets them (wp_debug_mode(); contracts/fixtures/debug-mode.json holds the\noracle's answer for each combination, and the unit suite replays it).\nWP_DEBUG reports every level, or only errors and warnings. With it on,\nWP_DEBUG_DISPLAY turns display on or off (null leaves PHP's own setting)\nand WP_DEBUG_LOG sends the log to a file. A request that answers a\nmachine never displays errors.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\MediaType"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Http\\Failure"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "QUIET",
                    "value": "4983",
                    "doc": "What PHP reports while WP_DEBUG is off: errors and warnings, no notices, strict or deprecation messages.",
                    "visibility": "public"
                },
                {
                    "name": "DEFAULTS",
                    "value": "array (   'WP_DEBUG' => false,   'WP_DEBUG_DISPLAY' => true,   'WP_DEBUG_LOG' => false, )",
                    "doc": "The debug constants, each with the value it has when wp-config.php leaves it out.",
                    "visibility": "private"
                },
                {
                    "name": "REQUESTS",
                    "value": "array (   0 => 'XMLRPC_REQUEST',   1 => 'REST_REQUEST',   2 => 'MS_FILES_REQUEST',   3 => 'WP_INSTALLING',   4 => 'DOING_AJAX', )",
                    "doc": "The request constants answersMachine() reads.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "settings",
                    "static": true,
                    "visibility": "public",
                    "signature": "settings(array $constants, string $contentDir): array",
                    "doc": "The settings the debug constants ask for: the error level, and the ini\nvalues to set (none for what they leave alone).",
                    "shapes": [
                        "@param array<string, mixed> $constants the debug constants defined, by name; a missing one reads as its default",
                        "@return array{level: int, ini: array<string, string>}"
                    ],
                    "params": [
                        {
                            "name": "constants",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the debug constants defined, by name; a missing one reads as its default"
                        },
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "logPath",
                    "static": true,
                    "visibility": "public",
                    "signature": "logPath(mixed $setting, string $contentDir): ?string",
                    "doc": "Where WP_DEBUG_LOG sends the log. True, 1 or \"true\" in any case mean\ndebug.log in the content folder; any other string but \"\" and \"0\" is\nthe path itself, \"false\" included; anything else keeps no log.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "setting",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "answersMachine",
                    "static": true,
                    "visibility": "public",
                    "signature": "answersMachine(array $constants, array $server): bool",
                    "doc": "Whether what the boot knows marks a request that answers a machine,\nwhose errors must never print into the answer: XML-RPC, REST or\nms-files declared at all, an install or ajax declared true, or a\nrequest that asks for or sends JSON (a JSONP or XML one is not). The\nfacade's wp_debug_mode() asks the same through wp_installing(),\nwp_doing_ajax() and wp_is_json_request(), filters included.",
                    "shapes": [
                        "@param array<string, mixed> $constants the request constants defined, by name",
                        "@param array<string, mixed> $server the request's server variables"
                    ],
                    "params": [
                        {
                            "name": "constants",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the request constants defined, by name"
                        },
                        {
                            "name": "server",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the request's server variables"
                        }
                    ],
                    "line": 80,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "defined",
                    "static": true,
                    "visibility": "public",
                    "signature": "defined(): array",
                    "doc": "The debug and request constants defined right now, by name.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 98,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(array $settings): void",
                    "doc": "Sets PHP's error level and ini values to what settings() asked for.",
                    "shapes": [
                        "@param array{level: int, ini: array<string, string>} $settings"
                    ],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "array{level: int, ini: array<string, string>}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 120
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Deferrals",
            "short": "Deferrals",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Deferrals.php",
            "lines": 66,
            "doc": "The switches an importer flips for the length of a request (probe\nplugin-helpers): term and comment counts deferred until the switch goes\noff again, when what was put off is counted at once, and cache additions\nsuspended so a bulk read does not fill the cache. Each answers what it\nis now; a value that is not a boolean asks without changing it. Kept in\nthe request's state, so a worker's next request starts with them off.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "terms",
                    "static": true,
                    "visibility": "public",
                    "signature": "terms(mixed $defer): bool",
                    "doc": "wp_defer_term_counting: on, off, or asked; off counts what was put off.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "defer",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "comments",
                    "static": true,
                    "visibility": "public",
                    "signature": "comments(mixed $defer): bool",
                    "doc": "wp_defer_comment_counting: on, off, or asked; off counts what was put off.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "defer",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "cacheAddition",
                    "static": true,
                    "visibility": "public",
                    "signature": "cacheAddition(mixed $suspend): bool",
                    "doc": "wp_suspend_cache_addition: on, off, or asked.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "suspend",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "putOffTerms",
                    "static": true,
                    "visibility": "public",
                    "signature": "putOffTerms(array $terms, string $taxonomy): bool",
                    "doc": "Puts terms' recount off while counting is deferred; false when it is not (count now). @param list<int> $terms",
                    "shapes": [
                        "@param list<int> $terms"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "putOffComments",
                    "static": true,
                    "visibility": "public",
                    "signature": "putOffComments(int $post): bool",
                    "doc": "Puts a post's comment recount off while counting is deferred; false when it is not (count now).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "flip",
                    "static": true,
                    "visibility": "private",
                    "signature": "flip(string $key, mixed $value): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 79
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\EarlyFilters",
            "short": "EarlyFilters",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/EarlyFilters.php",
            "lines": 20,
            "doc": "Filters that run before the runtime exists, over the hooks added that\nearly: WP-CLI's add_wp_hook writes them into $wp_filter as plain arrays\n(tag => priority => id => function and accepted_args). The reference has\nits hook API by then; the engine reads the same arrays directly.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Front\\Maintenance",
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(string $tag, mixed $value, mixed ...$args): mixed",
                    "doc": "The value through every early callback on the tag, lowest priority first; as given when there are none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 16,
                    "end": 31
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\FileTypeCheck",
            "short": "FileTypeCheck",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/FileTypeCheck.php",
            "lines": 77,
            "doc": "A file's type from its content as much as its name, as the reference's\nwp_check_filetype_and_ext decides it (probe upload-filters): an image the\nserver can measure is what its bytes say, and a name with the wrong image\nextension is corrected (a.png holding a JPEG becomes a.jpg); anything\nclaiming to be such an image and not being one has no type; any other\ntype must match what the content is, plain text standing for a few text\ntypes and an office or archive container for the document types; and\nthe type must be one the site allows.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Media\\ImageMime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "IMAGES",
                    "value": "array (   'image/jpeg' => 'jpg',   'image/png' => 'png',   'image/gif' => 'gif',   'image/bmp' => 'bmp',   'image/tiff' => 'tif',   'image/webp' => 'webp',   'image/avif' => 'avif',   'image/heic' => 'heic', )",
                    "doc": "The image types measured by their bytes, and the extension each takes.",
                    "visibility": "public"
                },
                {
                    "name": "TEXT_TYPES",
                    "value": "array (   0 => 'text/plain',   1 => 'text/csv',   2 => 'application/csv',   3 => 'text/richtext',   4 => 'text/tsv',   5 => 'text/vtt', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "CONTAINERS",
                    "value": "array (   0 => 'application/octet-stream',   1 => 'application/encrypted',   2 => 'application/CDFV2-encrypted',   3 => 'application/zip', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "check",
                    "static": true,
                    "visibility": "public",
                    "signature": "check(string $file, string $filename, ?array $mimes, array $images): array",
                    "doc": "ext, type, proper_filename, and the content's own type (real_mime).",
                    "shapes": [
                        "@param array<string, string>|null $mimes",
                        "@param array<string, string> $images getimagesize_mimes_to_exts",
                        "@return array{ext: string|false, type: string|false, proper_filename: string|false, real_mime: string|false}"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "filename",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mimes",
                            "type": "?array",
                            "shape": "array<string, string>|null",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "images",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "getimagesize_mimes_to_exts"
                        }
                    ],
                    "line": 33,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "imageMime",
                    "static": true,
                    "visibility": "private",
                    "signature": "imageMime(string $file): string|false",
                    "doc": "What an image's header says it is (Media\\ImageMime), or false when it is not an image.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "contentFits",
                    "static": true,
                    "visibility": "private",
                    "signature": "contentFits(string $type, string $real): bool",
                    "doc": "Whether content of the real type may carry a name of the given type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "real",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 92
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\FileUpload",
            "short": "FileUpload",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/FileUpload.php",
            "lines": 105,
            "doc": "A file a plugin hands to wp_handle_upload or wp_handle_sideload, taken in\nthe reference's order (probe upload-filters, contracts/runtime.md\n\"Uploads\"): the action's prefilter, where a plugin sanitizes the file or\nrefuses it with an error; its overrides; the upload's own errors, an\nempty file and, for a form upload, the form and the upload itself; the\ntype, from the file's content as much as its name\n(wp_check_filetype_and_ext), refused unless the site allows it or the\nuser may upload anything; the uploads folder; a unique, clean name\n(wp_unique_filename); pre_move_uploaded_file, where a plugin may move it\nitself; the move; and wp_handle_upload over the result.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "UPLOAD_ERRORS",
                    "value": "array (   1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.',   2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',   3 => 'The uploaded file was only partially uploaded.',   4 => 'No file was uploaded.',   6 => 'Missing a temporary folder.',   7 => 'Failed to write file to disk.',   8 => 'A PHP extension stopped the file upload.', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "handle",
                    "static": true,
                    "visibility": "public",
                    "signature": "handle(array $file, array|false $overrides, ?string $time, string $action): array",
                    "doc": "The stored file (file, url, type) or ['error' => message].",
                    "shapes": [
                        "@param array<string, mixed> $file name, type, tmp_name, size, error",
                        "@param array<string, mixed>|false $overrides",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "name, type, tmp_name, size, error"
                        },
                        {
                            "name": "overrides",
                            "type": "array|false",
                            "shape": "array<string, mixed>|false",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "time",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": "wp_handle_upload or wp_handle_sideload"
                        }
                    ],
                    "line": 39,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(array $file, array $options, string $action): ?string",
                    "doc": "Why the upload stops before its type is looked at: a plugin's error\nfrom the prefilter, PHP's upload error, a form that is not the\naction's, an empty file, a form upload that did not arrive by POST.",
                    "shapes": [
                        "@param array<string, mixed> $file",
                        "@param array<string, mixed> $options"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "move",
                    "static": true,
                    "visibility": "private",
                    "signature": "move(array $file, string $target, string $type, string $url, string $action): array",
                    "doc": "pre_move_uploaded_file, then the move (a form upload's own move, a\nsideload's copy), the folder's permissions, and wp_handle_upload.",
                    "shapes": [
                        "@param array<string, mixed> $file",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "target",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 122
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Heartbeat",
            "short": "Heartbeat",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Heartbeat.php",
            "lines": 30,
            "doc": "The heartbeat a signed-in page beats through admin-ajax.php, answered as\nthe reference answers it (suite ajax): the heartbeat nonce checked, and\nwhen it is stale or wrong, wp_refresh_nonces asked for fresh ones (a\nwrong one ends the beat there, marked expired); otherwise what the page\nsent goes through heartbeat_received, the answer through heartbeat_send,\nand heartbeat_tick hears it before the server's time is added.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "answer",
                    "static": true,
                    "visibility": "public",
                    "signature": "answer(array $post): array",
                    "doc": "The answer for a beat, from the posted fields (unslashed).",
                    "shapes": [
                        "@param array<string, mixed> $post",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 43
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Hooks",
            "short": "Hooks",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Hooks.php",
            "lines": 354,
            "doc": "The hook registry plugin code registers into and the engine fires.\nSemantics come from contracts/fixtures/api/hooks.json: callbacks run\nby ascending priority then insertion order; a callback added at a\nhigher priority during a run takes part in that run, one added at the\ncurrent or a lower priority waits for the next; a callback removed\nbefore its turn is skipped; the \"all\" hook sees every firing with the\nhook name first and every argument regardless of its accepted count.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\PluginActivation",
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "hooks",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "actionsDone",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "filtersDone",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "stack",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "running",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "onNew",
                    "type": "?Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "onNew",
                    "static": false,
                    "visibility": "public",
                    "signature": "onNew(Closure $observer): void",
                    "doc": "Called with each hook name the first time a callback registers under it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "observer",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "storage",
                    "static": false,
                    "visibility": "public",
                    "signature": "storage(): array",
                    "doc": "The live registry, for a hook object to share by reference.",
                    "shapes": [],
                    "params": [],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "actionCounters",
                    "static": false,
                    "visibility": "public",
                    "signature": "actionCounters(): array",
                    "doc": "How often each action, or each filter, has run, by hook.",
                    "shapes": [],
                    "params": [],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "filterCounters",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterCounters(): array",
                    "doc": "How often each filter has run, by hook, by reference for the facade's global.",
                    "shapes": [],
                    "params": [],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "stackRef",
                    "static": false,
                    "visibility": "public",
                    "signature": "stackRef(): array",
                    "doc": "The hooks running now, outermost first, by reference for the facade\\'s globals.",
                    "shapes": [],
                    "params": [],
                    "line": 62,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "currentPriority",
                    "static": false,
                    "visibility": "public",
                    "signature": "currentPriority(string $hook): int|false",
                    "doc": "The priority a running hook is at, or false when it is idle.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "add",
                    "static": false,
                    "visibility": "public",
                    "signature": "add(string $hook, callable|array|string $callback, string|int $priority = 10, int $accepted = 1): bool",
                    "doc": "Adds a callback to a hook at a priority.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callback",
                            "type": "callable|array|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "priority",
                            "type": "string|int",
                            "shape": "",
                            "default": "10",
                            "doc": ""
                        },
                        {
                            "name": "accepted",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": false,
                    "visibility": "public",
                    "signature": "remove(string $hook, callable|array|string $callback, string|int $priority = 10): bool",
                    "doc": "Removes a callback from a hook.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callback",
                            "type": "callable|array|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "priority",
                            "type": "string|int",
                            "shape": "",
                            "default": "10",
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "removeAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeAll(string $hook, string|int|false $priority = false): bool",
                    "doc": "Every callback of a hook, or only those at one priority. Always true, as observed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "priority",
                            "type": "string|int|false",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": false,
                    "visibility": "public",
                    "signature": "has(string $hook, callable|array|string|false $callback = false): int|bool",
                    "doc": "With a callback: its lowest priority, or false; without: whether anything is registered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callback",
                            "type": "callable|array|string|false",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "hasBeyond",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasBeyond(string $hook, array $done): bool",
                    "doc": "Whether anything is hooked besides the callbacks the engine does the\nwork of itself (named function => priority), as filterWithout skips them.",
                    "shapes": [
                        "@param array<string, int> $done"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "done",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 137,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "filter",
                    "static": false,
                    "visibility": "public",
                    "signature": "filter(string $hook, array $args): mixed",
                    "doc": "Runs a filter and returns the value.",
                    "shapes": [
                        "@param list<mixed> $args the value first"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": "the value first"
                        }
                    ],
                    "line": 155,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "filterWithout",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterWithout(string $hook, array $args, array $done): mixed",
                    "doc": "Runs a filter without the callbacks a caller has already done the work\nof, named function => priority: the engine renders post content through\nits own pipeline, then runs the_content for everything else hooked\nthere. A callback a plugin removed is simply not there to skip. A\nskipped callback can name a stand-in, [priority, function], that runs\nin its place: what of its work the engine has left to do.",
                    "shapes": [
                        "@param list<mixed> $args the value first",
                        "@param array<string, int|array{0: int, 1: string}> $done"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": "the value first"
                        },
                        {
                            "name": "done",
                            "type": "array",
                            "shape": "array<string, int|array{0: int, 1: string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 176
                },
                {
                    "routes": [],
                    "name": "action",
                    "static": false,
                    "visibility": "public",
                    "signature": "action(string $hook, array $args): void",
                    "doc": "Runs an action. With no arguments its callbacks still get one, an\nempty string, as do_action() gives them in the reference (a callback\nthat requires a parameter is not short of one).",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 185,
                    "end": 194
                },
                {
                    "routes": [],
                    "name": "actionRef",
                    "static": false,
                    "visibility": "public",
                    "signature": "actionRef(string $hook, array $args): void",
                    "doc": "Runs an action with exactly the arguments given, none included\n(do_action_ref_array).",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "actionRefArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "actionRefArray(string $hook, array $args): void",
                    "doc": "do_action_ref_array: the action's callbacks get the arguments, and an\n'all' callback gets them as the one array they were passed in, as the\nreference hands them on.",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 219
                },
                {
                    "routes": [],
                    "name": "filterRefArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "filterRefArray(string $hook, array $args): mixed",
                    "doc": "apply_filters_ref_array: as filter(), with an 'all' callback handed\nthe arguments as one array.",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 231
                },
                {
                    "routes": [],
                    "name": "actionsDone",
                    "static": false,
                    "visibility": "public",
                    "signature": "actionsDone(string $hook): int",
                    "doc": "How often an action has run.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 234,
                    "end": 237
                },
                {
                    "routes": [],
                    "name": "filtersDone",
                    "static": false,
                    "visibility": "public",
                    "signature": "filtersDone(string $hook): int",
                    "doc": "How often a filter has run.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 240,
                    "end": 243
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": false,
                    "visibility": "public",
                    "signature": "current(): string|false",
                    "doc": "The hook running now, or false.",
                    "shapes": [],
                    "params": [],
                    "line": 246,
                    "end": 249
                },
                {
                    "routes": [],
                    "name": "doing",
                    "static": false,
                    "visibility": "public",
                    "signature": "doing(?string $hook): bool",
                    "doc": "Whether a hook, or any hook, is running.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 252,
                    "end": 255
                },
                {
                    "routes": [],
                    "name": "registered",
                    "static": false,
                    "visibility": "public",
                    "signature": "registered(): array",
                    "doc": "Every hook with callbacks, by name.",
                    "shapes": [
                        "@return array<string, array<int, list<callable>>> a read-only view for diagnostics"
                    ],
                    "params": [],
                    "line": 262,
                    "end": 272
                },
                {
                    "routes": [],
                    "name": "callAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "callAll(array $args): void",
                    "doc": "The 'all' callbacks run with the arguments given, the hook's name first (_wp_call_all_hook). @param list<mixed> $args",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 341,
                    "end": 346
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "private",
                    "signature": "run(string $hook, array $args, bool $isFilter, array $skip = array ( ), ?array $allArgs = NULL): mixed",
                    "doc": "",
                    "shapes": [
                        "@param list<mixed> $args",
                        "@param array<string, int> $skip function name => priority, passed over",
                        "@param list<mixed>|null $allArgs what an 'all' callback gets after the hook's name; the arguments when null"
                    ],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "isFilter",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": "array ( )",
                            "doc": "function name => priority, passed over"
                        },
                        {
                            "name": "allArgs",
                            "type": "?array",
                            "shape": "list<mixed>|null",
                            "default": "NULL",
                            "doc": "what an 'all' callback gets after the hook's name; the arguments when null"
                        }
                    ],
                    "line": 279,
                    "end": 326
                },
                {
                    "routes": [],
                    "name": "nextPriority",
                    "static": false,
                    "visibility": "private",
                    "signature": "nextPriority(string $hook, ?int $after): ?int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "after",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 328,
                    "end": 337
                },
                {
                    "routes": [],
                    "name": "fireAll",
                    "static": false,
                    "visibility": "private",
                    "signature": "fireAll(string $hook, array $args): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "hook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 348,
                    "end": 357
                },
                {
                    "routes": [],
                    "name": "id",
                    "static": true,
                    "visibility": "private",
                    "signature": "id(callable|array|string $callback): string",
                    "doc": "One identity per callable: closures and objects by instance, static methods in either spelling as one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "callback",
                            "type": "callable|array|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 360,
                    "end": 370
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Interactivity",
            "short": "Interactivity",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Interactivity.php",
            "lines": 534,
            "doc": "Server-side directive processing for the Interactivity API: the state and\nconfig stores, and the pass that resolves data-wp-bind, data-wp-class,\ndata-wp-style, data-wp-text, and data-wp-each against state and context\nbefore the markup leaves the server. Behaviour pinned by the interactivity\nprobe fixture.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html\\Decoder",
                "Minn\\Json",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TagEditor"
            ],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "VOID",
                    "value": "array (   0 => 'area',   1 => 'base',   2 => 'br',   3 => 'col',   4 => 'embed',   5 => 'hr',   6 => 'img',   7 => 'input',   8 => 'link',   9 => 'meta',   10 => 'source',   11 => 'track',   12 => 'wbr', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "RAW",
                    "value": "array (   0 => 'script',   1 => 'style',   2 => 'textarea',   3 => 'title', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TAG",
                    "value": "'/<(\\\\/?)([a-zA-Z][^\\\\s\\\\/>]*)((?:\\\\s+[^\\\\s=\\\\/>]+(?:\\\\s*=\\\\s*(?:\"[^\"]*\"|\\'[^\\']*\\'|[^\\\\s\"\\'>]+))?)*)\\\\s*(\\\\/?)>/'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "UNRESOLVED",
                    "value": "'' . \"\\0\" . 'unresolved'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ATTR",
                    "value": "'/\\\\s+([^\\\\s=\\\\/>]+)(?:\\\\s*=\\\\s*(\"[^\"]*\"|\\'[^\\']*\\'|[^\\\\s\"\\'>]+))?/'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "state",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "config",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "namespaces",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "contexts",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "element",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "processing",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "routerRegion",
                    "type": "?Closure",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "whenRouterRegion",
                    "static": false,
                    "visibility": "public",
                    "signature": "whenRouterRegion(Closure $callback): void",
                    "doc": "What to run when processing meets a router region.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "callback",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "state",
                    "static": false,
                    "visibility": "public",
                    "signature": "state(?string $namespace, array $state = array ( )): array",
                    "doc": "Reads or extends a namespace's state.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "state",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "allState",
                    "static": false,
                    "visibility": "public",
                    "signature": "allState(): array",
                    "doc": "Every namespace's state, for the client.",
                    "shapes": [
                        "@return array<string, array<string, mixed>> every namespace's state, for the client"
                    ],
                    "params": [],
                    "line": 70,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "allConfig",
                    "static": false,
                    "visibility": "public",
                    "signature": "allConfig(): array",
                    "doc": "Every namespace's config, for the client.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 80,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "config",
                    "static": false,
                    "visibility": "public",
                    "signature": "config(string $namespace, array $config = array ( )): array",
                    "doc": "Reads or extends a namespace's config.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "config",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "context",
                    "static": false,
                    "visibility": "public",
                    "signature": "context(?string $namespace = NULL): array",
                    "doc": "The current directive context of a namespace.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "namespace",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "element",
                    "static": false,
                    "visibility": "public",
                    "signature": "element(): ?array",
                    "doc": "The element whose directives are being evaluated.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [],
                    "line": 118,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "process",
                    "static": false,
                    "visibility": "public",
                    "signature": "process(string $html): string",
                    "doc": "HTML with its directives resolved on the server.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "namespace",
                    "static": false,
                    "visibility": "private",
                    "signature": "namespace(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 144,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "tokenize",
                    "static": false,
                    "visibility": "private",
                    "signature": "tokenize(string $html): ?array",
                    "doc": "Start tags, end tags, and everything between, with balance checked; null\nwhen the markup does not close what it opens.",
                    "shapes": [
                        "@return list<array{kind: string, start: int, end: int, name?: string, attrs?: list<array{name: string, value: ?string, start: int, end: int}>, void?: bool, close?: int}>|null"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 212
                },
                {
                    "routes": [],
                    "name": "walk",
                    "static": false,
                    "visibility": "private",
                    "signature": "walk(array $tokens, string $html): ?string",
                    "doc": "",
                    "shapes": [
                        "@param list<array<string, mixed>> $tokens"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 271
                },
                {
                    "routes": [],
                    "name": "applyDirectives",
                    "static": false,
                    "visibility": "private",
                    "signature": "applyDirectives(array $token, string $tag, array $frame): string",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $token",
                        "@param array<string, mixed> $frame"
                    ],
                    "params": [
                        {
                            "name": "token",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "frame",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 277,
                    "end": 337
                },
                {
                    "routes": [],
                    "name": "bind",
                    "static": false,
                    "visibility": "private",
                    "signature": "bind(Minn\\Runtime\\TagEditor $editor, string $attribute, string $path): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "editor",
                            "type": "Minn\\Runtime\\TagEditor",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attribute",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 339,
                    "end": 363
                },
                {
                    "routes": [],
                    "name": "interactiveNamespace",
                    "static": false,
                    "visibility": "private",
                    "signature": "interactiveNamespace(string $value): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 365,
                    "end": 376
                },
                {
                    "routes": [],
                    "name": "pushContext",
                    "static": false,
                    "visibility": "private",
                    "signature": "pushContext(string $value): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 378,
                    "end": 392
                },
                {
                    "routes": [],
                    "name": "evaluate",
                    "static": false,
                    "visibility": "private",
                    "signature": "evaluate(string $reference, string $suffix): mixed",
                    "doc": "The value a directive path names, or UNRESOLVED when the namespace or path is empty.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "reference",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "suffix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 395,
                    "end": 430
                },
                {
                    "routes": [],
                    "name": "expandEach",
                    "static": false,
                    "visibility": "private",
                    "signature": "expandEach(array $each, array $tokens, int $closeIndex, string $html): string",
                    "doc": "",
                    "shapes": [
                        "@param array{key: string, path: string, token: array<string, mixed>} $each",
                        "@param list<array<string, mixed>> $tokens"
                    ],
                    "params": [
                        {
                            "name": "each",
                            "type": "array",
                            "shape": "array{key: string, path: string, token: array<string, mixed>}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "closeIndex",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 436,
                    "end": 467
                },
                {
                    "routes": [],
                    "name": "markChildren",
                    "static": false,
                    "visibility": "private",
                    "signature": "markChildren(string $fragment, string $reference): string",
                    "doc": "Every top-level start tag in the fragment gains data-wp-each-child first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "fragment",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reference",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 470,
                    "end": 496
                },
                {
                    "routes": [],
                    "name": "attributeMap",
                    "static": false,
                    "visibility": "private",
                    "signature": "attributeMap(array $attrs): array",
                    "doc": "",
                    "shapes": [
                        "@param list<array{name: string, value: ?string}> $attrs",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "list<array{name: string, value: ?string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 502,
                    "end": 509
                },
                {
                    "routes": [],
                    "name": "relative",
                    "static": true,
                    "visibility": "private",
                    "signature": "relative(array $attrs, int $base): array",
                    "doc": "",
                    "shapes": [
                        "@param list<array{name: string, value: ?string, start: int, end: int}> $attrs",
                        "@return list<array{name: string, value: ?string, start: int, end: int}>"
                    ],
                    "params": [
                        {
                            "name": "attrs",
                            "type": "array",
                            "shape": "list<array{name: string, value: ?string, start: int, end: int}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 515,
                    "end": 518
                },
                {
                    "routes": [],
                    "name": "escape",
                    "static": false,
                    "visibility": "private",
                    "signature": "escape(string $text): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 520,
                    "end": 523
                },
                {
                    "routes": [],
                    "name": "camel",
                    "static": true,
                    "visibility": "private",
                    "signature": "camel(string $name): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 525,
                    "end": 528
                },
                {
                    "routes": [],
                    "name": "follow",
                    "static": true,
                    "visibility": "private",
                    "signature": "follow(mixed $value, array $names): mixed",
                    "doc": "A value reached through a path of keys or properties, or null from the first one that is\nnot there.",
                    "shapes": [
                        "@param list<string> $names"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 536,
                    "end": 549
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\MenuEvents",
            "short": "MenuEvents",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/MenuEvents.php",
            "lines": 225,
            "doc": "Menus and their items saved as the reference saves them, telling\nplugins what it tells them (probe rest-menu-save). A menu is a nav_menu\nterm: made or changed through wp_insert_term / wp_update_term (the term\nactions), then wp_create_nav_menu or wp_update_nav_menu; deleted, its\nitems go through wp_delete_post, the term through wp_delete_term, then\nwp_delete_nav_menu. An item is written by the engine, with the post\nsave actions around it, then wp_add_nav_menu_item (a new one) and\nwp_update_nav_menu_item, handed the reference's menu-item-* arguments.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Menus",
                "Minn\\Content\\Posts",
                "Minn\\Http\\Request",
                "Minn\\I18n\\Gettext",
                "Minn\\RestError",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\TermEvents"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Menus $menus, Minn\\Content\\Posts $posts)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "menus",
                        "type": "Minn\\Content\\Menus",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 33,
                "end": 37
            },
            "cases": [],
            "constants": [
                {
                    "name": "ITEM_DEFAULTS",
                    "value": "array (   'menu-item-db-id' => 0,   'menu-item-object-id' => 0,   'menu-item-object' => '',   'menu-item-parent-id' => 0,   'menu-item-position' => 0,   'menu-item-type' => 'custom',   'menu-item-title' => '',   'menu-item-url' => '',   'menu-item-description' => '',   'menu-item-attr-title' => '',   'menu-item-target' => '',   'menu-item-classes' => '',   'menu-item-xfn' => '',   'menu-item-status' => '',   'menu-item-post-date' => '',   'menu-item-post-date-gmt' => '', )",
                    "doc": "The arguments an item is saved with, and their defaults, as the reference lists them.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "menus",
                    "type": "Minn\\Content\\Menus",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "saveMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "saveMenu(int $menuId, array $data): WP_Error|int",
                    "doc": "wp_update_nav_menu_object: a menu made (menu id 0) or changed, its id\nor the refusal. The name is checked first, as the reference checks it.",
                    "shapes": [
                        "@param array<string, mixed> $data menu-name, description"
                    ],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "menu-name, description"
                        }
                    ],
                    "line": 45,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "deleteMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteMenu(int $menuId): void",
                    "doc": "wp_delete_nav_menu: the items through wp_delete_post, the term through wp_delete_term, the locations let go, then wp_delete_nav_menu.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "saveItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "saveItem(int $menuId, int $itemId, array $data, string $afterInsert = 'now'): WP_Error|int",
                    "doc": "wp_update_nav_menu_item: an item made (id 0) or changed in a menu, its\nid or the refusal; the post save actions around the write, then the\nitem actions, and wp_after_insert_post \"now\" or (a REST save, which\nfires it after its own actions) \"later\".",
                    "shapes": [
                        "@param array<string, mixed> $data menu-item-* arguments"
                    ],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "itemId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "menu-item-* arguments"
                        },
                        {
                            "name": "afterInsert",
                            "type": "string",
                            "shape": "",
                            "default": "'now'",
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "restMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "restMenu(int $menuId, array $fields, Minn\\Http\\Request $request): int",
                    "doc": "A menu saved over REST, as the reference's menus controller saves one:\nthe request's fields (name, description, those given) through\nrest_pre_insert_nav_menu, then saveMenu(), then rest_insert_nav_menu\nand rest_after_insert_nav_menu.",
                    "shapes": [
                        "@param array<string, mixed> $fields name, description"
                    ],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "name, description"
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "restDeleteMenu",
                    "static": false,
                    "visibility": "public",
                    "signature": "restDeleteMenu(int $menuId, array $previous, Minn\\Http\\Request $request): void",
                    "doc": "A menu deleted over REST: deleteMenu(), then rest_delete_nav_menu with the menu as it was and the response. @param array<string, mixed> $previous",
                    "shapes": [
                        "@param array<string, mixed> $previous"
                    ],
                    "params": [
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "previous",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "restItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "restItem(int $itemId, array $args, Minn\\Http\\Request $request): int",
                    "doc": "An item saved over REST, as the reference's menu-items controller saves\none: its menu-id and menu-item-* arguments through\nrest_pre_insert_nav_menu_item, then saveItem(), then\nrest_insert_nav_menu_item, rest_after_insert_nav_menu_item and\nwp_after_insert_post.",
                    "shapes": [
                        "@param array<string, mixed> $args menu-id and menu-item-* arguments, the item's own filled in for an update"
                    ],
                    "params": [
                        {
                            "name": "itemId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "menu-id and menu-item-* arguments, the item's own filled in for an update"
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "restDeleteItem",
                    "static": false,
                    "visibility": "public",
                    "signature": "restDeleteItem(int $itemId, array $previous, Minn\\Http\\Request $request): void",
                    "doc": "An item deleted over REST: wp_delete_post, then rest_delete_nav_menu_item with the item as it was and the response. @param array<string, mixed> $previous",
                    "shapes": [
                        "@param array<string, mixed> $previous"
                    ],
                    "params": [
                        {
                            "name": "itemId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "previous",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 190,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "savedArgs",
                    "static": false,
                    "visibility": "public",
                    "signature": "savedArgs(int $itemId): array",
                    "doc": "An item's own saved values as menu-item-* arguments, which a REST\nupdate starts from: the reference's save resets to its default any\nargument it isn't handed.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "itemId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 206,
                    "end": 219
                },
                {
                    "routes": [],
                    "name": "prepared",
                    "static": true,
                    "visibility": "private",
                    "signature": "prepared(mixed $prepared): array",
                    "doc": "What a rest_pre_insert filter handed back, as arguments; its refusal as the request's. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "prepared",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 180,
                    "end": 187
                },
                {
                    "routes": [],
                    "name": "fields",
                    "static": true,
                    "visibility": "private",
                    "signature": "fields(array $args, int $menuId, int $authorId): array",
                    "doc": "The menu-item-* arguments as the engine's item fields.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "menuId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authorId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 247
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\MenuItemMarks",
            "short": "MenuItemMarks",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/MenuItemMarks.php",
            "lines": 203,
            "doc": "The classes and current flags the reference gives a menu's items for the\npage in view (_wp_menu_item_classes_by_context, probe plugin-queue4), in\ntwo passes over the items.\n\nFirst, each item: its own classes, then menu-item and its type and\nobject; menu-item-home and menu-item-privacy-policy for those pages. On a\nsingle post of a flat type, the items of the post's terms in hierarchical\ntaxonomies become its menu parents. Otherwise the current item (the post\nor term in view, the posts page on the blog, the post type archive in\nview, or a custom address equal to the request's) is marked, with the\npage compat tokens; its menu ancestors, its menu parent and its object's\nparent are noted. A custom item pointing home is the home item on every\nview. The posts page reads as a parent on any view but a page.\n\nThen each item again: an item for a post or term above the one in view\nis its ancestor (current-{type}-ancestor), the noted items take\ncurrent-menu-ancestor and current-menu-parent, an item whose object is a\nnoted parent object current-{object}-parent, and a page item the compat\ntokens of both.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Url"
            ],
            "usedBy": [
                "Minn\\Runtime\\NavMenu"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(array $items): array",
                    "doc": "The items, each given its classes and its current, current_item_parent\nand current_item_ancestor flags for what the main query has in view.",
                    "shapes": [
                        "@param list<object> $items",
                        "@return list<object>"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "own",
                    "static": true,
                    "visibility": "private",
                    "signature": "own(object $item, array $view, array $noted, array $parents): void",
                    "doc": "The first pass for one item.",
                    "shapes": [
                        "@param array<string, mixed> $view",
                        "@param array{ancestors: list<int>, parentItems: list<int>, parentObjects: list<int>, object: string} $noted",
                        "@param array<int, int> $parents menu parent by item id"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "view",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "noted",
                            "type": "array",
                            "shape": "array{ancestors: list<int>, parentItems: list<int>, parentObjects: list<int>, object: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parents",
                            "type": "array",
                            "shape": "array<int, int>",
                            "default": null,
                            "doc": "menu parent by item id"
                        }
                    ],
                    "line": 64,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "related",
                    "static": true,
                    "visibility": "private",
                    "signature": "related(object $item, array $view, array $noted): void",
                    "doc": "The second pass for one item.",
                    "shapes": [
                        "@param array<string, mixed> $view",
                        "@param array{ancestors: list<int>, parentItems: list<int>, parentObjects: list<int>, object: string} $noted"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "view",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "noted",
                            "type": "array",
                            "shape": "array{ancestors: list<int>, parentItems: list<int>, parentObjects: list<int>, object: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "isCurrent",
                    "static": true,
                    "visibility": "private",
                    "signature": "isCurrent(object $item, array $view): bool",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $view"
                    ],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "view",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "view",
                    "static": true,
                    "visibility": "private",
                    "signature": "view(WP_Query $query): array",
                    "doc": "What the main query has in view, as the two passes read it.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "postTerms",
                    "static": true,
                    "visibility": "private",
                    "signature": "postTerms(WP_Post $post): array",
                    "doc": "A post's terms in its hierarchical taxonomies (the items that read as\nits menu parents) and, per taxonomy, those terms with their ancestors.",
                    "shapes": [
                        "@return array{list<int>, array<string, list<int>>}"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 201,
                    "end": 216
                },
                {
                    "routes": [],
                    "name": "ancestors",
                    "static": true,
                    "visibility": "private",
                    "signature": "ancestors(int $id, string $type, string $kind): array",
                    "doc": "",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 219,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "currentUrl",
                    "static": true,
                    "visibility": "private",
                    "signature": "currentUrl(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 224,
                    "end": 231
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Meta",
            "short": "Meta",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/Meta.php",
            "lines": 242,
            "doc": "The four meta tables behind get_metadata and friends: reads by object, and the row-level writes the update and delete rules need.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\RowCache",
                "Minn\\Db",
                "Minn\\Runtime\\MetaTypes"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 15,
                "end": 17
            },
            "cases": [],
            "constants": [
                {
                    "name": "TABLES",
                    "value": "array (   'post' =>    array (     0 => 'postmeta',     1 => 'post_id',     2 => 'meta_id',   ),   'user' =>    array (     0 => 'usermeta',     1 => 'user_id',     2 => 'umeta_id',   ),   'term' =>    array (     0 => 'termmeta',     1 => 'term_id',     2 => 'meta_id',   ),   'comment' =>    array (     0 => 'commentmeta',     1 => 'comment_id',     2 => 'meta_id',   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "knows",
                    "static": true,
                    "visibility": "public",
                    "signature": "knows(string $type): bool",
                    "doc": "Whether an object type has a meta table.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "clausesFromQueryVars",
                    "static": true,
                    "visibility": "public",
                    "signature": "clausesFromQueryVars(array $queryVars): array",
                    "doc": "The meta query in flat query vars (meta_key, meta_value, the compare\nand type variants) as one clause, AND'd ahead of an explicit\nmeta_query as its own group, as WP_Meta_Query::parse_query_vars reads\nthem. An empty meta_value is no value.",
                    "shapes": [
                        "@param array<string, mixed> $queryVars",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "queryVars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(string $type, int $objectId): array",
                    "doc": "Every row of an object's meta, values as stored, grouped by key in id order. @return array<string, list<string>>",
                    "shapes": [
                        "@return array<string, list<string>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "prime",
                    "static": false,
                    "visibility": "public",
                    "signature": "prime(string $type, array $objectIds): array",
                    "doc": "update_meta_cache: each object's meta as all() gives it, the cached\nones from the object cache and the rest read in one query and cached;\nan object with none has an empty list.",
                    "shapes": [
                        "@param list<int> $objectIds",
                        "@return array<int, array<string, list<string>>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectIds",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "keys",
                    "static": false,
                    "visibility": "public",
                    "signature": "keys(string $type): array",
                    "doc": "Every meta key an object type uses, once each, in key order. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "listing",
                    "static": false,
                    "visibility": "public",
                    "signature": "listing(string $type, int $objectId): array",
                    "doc": "Every row of an object's meta by key, then id, as the post meta box\nlists them: the key, the value, the row's id and the object's, all as\nstored (strings).",
                    "shapes": [
                        "@return list<array<string, string>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "rowsOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "rowsOf(string $type, int $objectId): array",
                    "doc": "Every row of an object's meta in id order, for removing them one by one. @return list<array{meta_id: int, meta_key: string, meta_value: string}>",
                    "shapes": [
                        "@return list<array{meta_id: int, meta_key: string, meta_value: string}>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "byId",
                    "static": false,
                    "visibility": "public",
                    "signature": "byId(string $type, int $metaId): ?array",
                    "doc": "One meta row by its id, under the table's own column names, values as stored; null when there is none. @return array<string, string>|null",
                    "shapes": [
                        "@return array<string, string>|null"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "columns",
                    "static": false,
                    "visibility": "public",
                    "signature": "columns(string $type): array",
                    "doc": "The column holding the object's id, and the one holding the row's: post_id and meta_id, user_id and umeta_id. @return array{0: string, 1: string}",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "rewrite",
                    "static": false,
                    "visibility": "public",
                    "signature": "rewrite(string $type, int $metaId, string $key, string $stored): void",
                    "doc": "Sets one row's key and stored value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "metaId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stored",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 161,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "add",
                    "static": false,
                    "visibility": "public",
                    "signature": "add(string $type, int $objectId, string $key, string $stored): int",
                    "doc": "Inserts a meta row and returns its id.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stored",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "matching",
                    "static": false,
                    "visibility": "public",
                    "signature": "matching(string $type, int $objectId, string $key): array",
                    "doc": "The rows of one key on one object, in id order. @return list<array{meta_id: int, meta_value: string}>",
                    "shapes": [
                        "@return list<array{meta_id: int, meta_value: string}>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "idsToUpdate",
                    "static": true,
                    "visibility": "public",
                    "signature": "idsToUpdate(array $rows, string $stored, ?string $previous): array",
                    "doc": "Which of a key's rows an update touches: none when no previous value was\nnamed and the first row already holds the value, all of them when no\nprevious value was named, otherwise only the rows holding it.",
                    "shapes": [
                        "@param list<array<string, mixed>> $rows",
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stored",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "previous",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "updateRows",
                    "static": false,
                    "visibility": "public",
                    "signature": "updateRows(string $type, array $ids, string $stored): void",
                    "doc": "Sets the value of the given meta rows.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stored",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 206,
                    "end": 213
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(string $type, ?int $objectId, string $key, ?string $stored): array",
                    "doc": "The rows a delete would take: by key, for one object or all, optionally only a stored value. @return list<array{meta_id: int, object_id: int}>",
                    "shapes": [
                        "@return list<array{meta_id: int, object_id: int}>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stored",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "objectsBelow",
                    "static": false,
                    "visibility": "public",
                    "signature": "objectsBelow(string $type, string $key, int $bound): array",
                    "doc": "The objects whose value under the key is a number below the bound, lowest id first. @return list<int>",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bound",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 237
                },
                {
                    "routes": [],
                    "name": "deleteRows",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteRows(string $type, array $ids): void",
                    "doc": "Deletes the given meta rows.",
                    "shapes": [
                        "@param list<int> $ids"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 244,
                    "end": 251
                },
                {
                    "routes": [],
                    "name": "spec",
                    "static": false,
                    "visibility": "private",
                    "signature": "spec(string $type): array",
                    "doc": "The table, object column, and row id column of a meta type. @return array{0: string, 1: string, 2: string}",
                    "shapes": [
                        "@return array{0: string, 1: string, 2: string}"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 27
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\MetaKeys",
            "short": "MetaKeys",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/MetaKeys.php",
            "lines": 187,
            "doc": "The meta keys code registers, kept where the reference keeps them\n($wp_meta_keys: object type => subtype => key => arguments), with what a\nregistration wires up (probe meta-api). A key's sanitize and auth\ncallbacks hang on their filters (with _for_{subtype} for a subtype's\nkey); a key with no auth callback gets __return_true, or __return_false\nwhen protected. A default is served through filter_default_metadata. A\nregistration is refused (with the reference's notice) for an array shown\nin REST without its items' schema, revisions where the type or subtype\nhas none, and, once its callbacks are hooked, a default its schema does\nnot accept. The old form (callbacks as plain arguments) hooks them and\nreturns false.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\RestMeta"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULTS",
                    "value": "array (   'object_subtype' => '',   'type' => 'string',   'label' => '',   'description' => '',   'default' => '',   'single' => false,   'sanitize_callback' => NULL,   'auth_callback' => NULL,   'show_in_rest' => false,   'revisions_enabled' => false, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(string $objectType, string $key, mixed $args, mixed $deprecated): bool",
                    "doc": "Registers a key; true when it joins the registry.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deprecated",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "unregister",
                    "static": true,
                    "visibility": "public",
                    "signature": "unregister(string $objectType, string $key, string $subtype): bool",
                    "doc": "Takes a key out of the registry, and its callbacks off their filters.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $objectType, string $subtype = ''): array",
                    "doc": "The keys registered for an object type and subtype ('' for every subtype), in registration order. @return array<string, array<string, mixed>>",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "forObject",
                    "static": true,
                    "visibility": "public",
                    "signature": "forObject(string $objectType, string $subtype): array",
                    "doc": "The keys that apply to one object: those for every subtype, then its subtype's. @return array<string, array<string, mixed>>",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "defaultValue",
                    "static": true,
                    "visibility": "public",
                    "signature": "defaultValue(mixed $value, int $objectId, string $key, bool $single, string $objectType): mixed",
                    "doc": "The registered default for a key as filter_default_metadata answers:\nthe one for every subtype, else the object's subtype's; the value\nhanded in when neither registered one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "single",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "subtype",
                    "static": true,
                    "visibility": "public",
                    "signature": "subtype(string $objectType, int $objectId): string",
                    "doc": "The object's subtype: a post's type, a term's taxonomy, comment or user while they exist; '' otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "capabilities",
                    "static": true,
                    "visibility": "public",
                    "signature": "capabilities(string $capability, int $userId, array $args): ?array",
                    "doc": "A meta capability (edit, add or delete a post's, comment's, term's or\nuser's meta) as the reference maps it: what editing the object needs,\nthen the capability itself when the key is not allowed (protected, or\nrefused by its auth filter); nothing for an object that does not\nexist. Null for any other capability.",
                    "shapes": [
                        "@param list<mixed> $args the object id, then the key",
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "capability",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": "the object id, then the key"
                        }
                    ],
                    "line": 155,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(string $objectType, string $subtype, array $args): ?string",
                    "doc": "Why the reference refuses a registration before hooking anything, or null. @param array<string, mixed> $args",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "objectType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "subtype",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "defaultFits",
                    "static": true,
                    "visibility": "private",
                    "signature": "defaultFits(array $args): bool",
                    "doc": "Whether a default fits the key's type, and its REST schema when it has one. @param array<string, mixed> $args",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 200,
                    "end": 207
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\MetaTypes",
            "short": "MetaTypes",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/MetaTypes.php",
            "lines": 21,
            "doc": "Meta types a plugin brought, by the table it named on $wpdb as\n\"{$type}meta\" (WooCommerce's order items keep theirs in\nwoocommerce_order_itemmeta). The reference reads any such table with\n\"{$type}_id\" for the object and meta_id for the row; Meta does the same.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\Meta"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "tables",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(string $type, string $table): bool",
                    "doc": "Registers a meta type by its full table name; refused unless both are plain identifiers.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "table",
                    "static": true,
                    "visibility": "public",
                    "signature": "table(string $type): ?string",
                    "doc": "The full table name of a registered meta type, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 32
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\NavMenu",
            "short": "NavMenu",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/NavMenu.php",
            "lines": 88,
            "doc": "wp_nav_menu()'s menu: the one the arguments name, its items marked for\nthe page in view (MenuItemMarks), walked, wrapped in the container.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\MenuItemMarks",
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "usedIds",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "build",
                    "static": true,
                    "visibility": "public",
                    "signature": "build(object $args): string|false|null",
                    "doc": "The whole menu for wp_nav_menu(): resolve, fetch, decorate, walk,\nwrap, filter. Null when there is no menu (the caller's fallback\nruns); false when the items filtered away to nothing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "menuForArgs",
                    "static": true,
                    "visibility": "private",
                    "signature": "menuForArgs(object $args): object|false",
                    "doc": "The menu the args name: by menu, by assigned location, else the first menu that has items.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "wrapId",
                    "static": true,
                    "visibility": "private",
                    "signature": "wrapId(object $menu, object $args): string",
                    "doc": "The ul id: the caller's, else menu-{slug}, counted up when the same menu renders twice on a page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "menu",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "container",
                    "static": true,
                    "visibility": "private",
                    "signature": "container(string $nav, object $args, string $slug): string",
                    "doc": "The container wrap, when the args ask for one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "nav",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\NavMenuItems",
            "short": "NavMenuItems",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/NavMenuItems.php",
            "lines": 154,
            "doc": "Classic menu items as the reference serves them to walkers and plugins\n(probe nav-menu-items). wp_setup_nav_menu_item dresses a nav_menu_item\npost with the fields walkers read: its _menu_item_* meta (ids as\nstrings), kept when already set; then by its kind the label, address\nand title of what it points at (a post's title through the_title, every\ntime, the item's own title winning when it has one; a post or term\ngone, or a post trashed, marks it _invalid; a post not published is\nlabelled by its status); its title attribute and description through\ntheir filters. A post or term of another kind is dressed as a would-be\nitem, as the admin's boxes use it: id 0, its own title, address and\nparent. wp_get_nav_menu_items reads a menu's items through get_posts,\nsets each up, drops the invalid ones outside the admin, and for ARRAY_A\noutput sorts them by the output key and numbers that key from 1, all\nbefore its filter.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "setUp",
                    "static": true,
                    "visibility": "public",
                    "signature": "setUp(mixed $item): mixed",
                    "doc": "wp_setup_nav_menu_item: the item dressed, whatever it was, then the filter.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "forMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "forMenu(WP_Term $menu, array $args): array",
                    "doc": "wp_get_nav_menu_items for a menu found.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array<int, object>"
                    ],
                    "params": [
                        {
                            "name": "menu",
                            "type": "WP_Term",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "menuItem",
                    "static": true,
                    "visibility": "private",
                    "signature": "menuItem(object $item): void",
                    "doc": "A nav_menu_item post: its meta, what it points at, its attribute and description.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "pointsAtPost",
                    "static": true,
                    "visibility": "private",
                    "signature": "pointsAtPost(object $item): void",
                    "doc": "An item for a post: the post type's name (its status's for a post not published), the post's address and filtered title.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "pointsAtTerm",
                    "static": true,
                    "visibility": "private",
                    "signature": "pointsAtTerm(object $item): void",
                    "doc": "An item for a term: the taxonomy's name, the term's address and name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 106,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "pointsAtArchive",
                    "static": true,
                    "visibility": "private",
                    "signature": "pointsAtArchive(object $item): void",
                    "doc": "An item for a post type's archive: the archives label, the archive's address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "custom",
                    "static": true,
                    "visibility": "private",
                    "signature": "custom(object $item, string $url): void",
                    "doc": "A custom link: its own title and stored address.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "post",
                    "static": true,
                    "visibility": "private",
                    "signature": "post(object $item): void",
                    "doc": "A post of another kind, as a would-be item for it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 140,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": true,
                    "visibility": "private",
                    "signature": "term(object $item): void",
                    "doc": "A term, as a would-be item for it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "item",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 178
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\OEmbed",
            "short": "OEmbed",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/OEmbed.php",
            "lines": 114,
            "doc": "oEmbed as data: provider matching against the wildcard table, response parsing, and the markup an oEmbed payload becomes.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "providerFor",
                    "static": true,
                    "visibility": "public",
                    "signature": "providerFor(array $providers, string $url): ?string",
                    "doc": "The endpoint of the provider whose mask matches a URL, or null.",
                    "shapes": [
                        "@param array<string, array{0: string, 1: bool}> $providers mask => [endpoint with {format}, mask is a regex]"
                    ],
                    "params": [
                        {
                            "name": "providers",
                            "type": "array",
                            "shape": "array<string, array{0: string, 1: bool}>",
                            "default": null,
                            "doc": "mask => [endpoint with {format}, mask is a regex]"
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "parseJson",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseJson(string $body): ?array",
                    "doc": "An oEmbed JSON body as an array, or null.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "parseXml",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseXml(string $body): ?array",
                    "doc": "An oEmbed XML body as an array, or null.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(array $data, string $url, Closure $escUrl, Closure $escAttr, Closure $escHtml): ?string",
                    "doc": "The embed HTML for an oEmbed response, or null.",
                    "shapes": [
                        "@param array<string, mixed> $data the oEmbed payload",
                        "@param Closure(string): string $escUrl @param Closure(string): string $escAttr @param Closure(string): string $escHtml"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the oEmbed payload"
                        },
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escUrl",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": "@param Closure(string): string $escAttr @param Closure(string): string $escHtml"
                        },
                        {
                            "name": "escAttr",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escHtml",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "discovered",
                    "static": true,
                    "visibility": "public",
                    "signature": "discovered(string $html, array $linktypes): ?string",
                    "doc": "The provider endpoint a page names in its head: the first link of each\noEmbed type (the linktypes map type to json or xml), JSON before XML,\nits address entity-decoded. Null when it names none.",
                    "shapes": [
                        "@param array<string, string> $linktypes"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "linktypes",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "stripNewlines",
                    "static": true,
                    "visibility": "public",
                    "signature": "stripNewlines(string $html): string",
                    "doc": "Drops newlines from embed markup while leaving the inside of <pre> blocks untouched.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 124
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ObjectCache",
            "short": "ObjectCache",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ObjectCache.php",
            "lines": 63,
            "doc": "The per-request object cache behind wp_cache_*: groups of keys, nothing persistent.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "groups",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $key, string $group, ?bool $found = NULL): mixed",
                    "doc": "A cached value, or false.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "group",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "found",
                            "type": "?bool",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 14,
                    "end": 18
                },
                {
                    "routes": [],
                    "name": "set",
                    "static": false,
                    "visibility": "public",
                    "signature": "set(string $key, mixed $value, string $group): bool",
                    "doc": "Stores a value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "group",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 25
                },
                {
                    "routes": [],
                    "name": "add",
                    "static": false,
                    "visibility": "public",
                    "signature": "add(string $key, mixed $value, string $group): bool",
                    "doc": "Stores a value only when the key is empty.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "group",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(string $key, string $group): bool",
                    "doc": "Removes a key.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "group",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "flush",
                    "static": false,
                    "visibility": "public",
                    "signature": "flush(): bool",
                    "doc": "Empties the cache.",
                    "shapes": [],
                    "params": [],
                    "line": 47,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "sizes",
                    "static": false,
                    "visibility": "public",
                    "signature": "sizes(): array",
                    "doc": "Each group's size, its entries serialized, in bytes, in the order the\ngroups were first written: what WP_Object_Cache::stats prints.",
                    "shapes": [
                        "@return array<string, int>"
                    ],
                    "params": [],
                    "line": 59,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "flushGroup",
                    "static": false,
                    "visibility": "public",
                    "signature": "flushGroup(string $group): bool",
                    "doc": "Empties one group.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "group",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 69
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ObjectTerms",
            "short": "ObjectTerms",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ObjectTerms.php",
            "lines": 30,
            "doc": "wp_get_object_terms's handling of taxonomies registered with their own\nquery arguments, as the reference handles them: among several, each such\ntaxonomy is asked on its own with its arguments over the caller's; alone,\nits arguments join the caller's.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "byTaxonomyArgs",
                    "static": true,
                    "visibility": "public",
                    "signature": "byTaxonomyArgs(array $objectIds, array $taxonomies, array $args): array",
                    "doc": "The terms asked for apart, the taxonomies left (keys as they were), and the arguments for those.",
                    "shapes": [
                        "@param list<int> $objectIds",
                        "@param array<int, string> $taxonomies",
                        "@param array<string, mixed> $args",
                        "@return array{0: list<mixed>, 1: array<int, string>, 2: array<string, mixed>}"
                    ],
                    "params": [
                        {
                            "name": "objectIds",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "array<int, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 41
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\OptionSanitizer",
            "short": "OptionSanitizer",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/OptionSanitizer.php",
            "lines": 114,
            "doc": "A core option's value cleaned as the reference's sanitize_option cleans\nit (probe sanitize-option), before sanitize_option_{$option}: counts as\nwhole numbers, the site's name and tagline escaped, formats and mail\nsettings stripped of markup, addresses checked and kept as they were\n(with a settings error) when they are not addresses, word lists split\nand trimmed, the timezone and language checked against what exists. Any\nother option is left to its filter, where register_setting puts a\nplugin's sanitize_callback.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "COUNTS",
                    "value": "array (   0 => 'thumbnail_size_w',   1 => 'thumbnail_size_h',   2 => 'medium_size_w',   3 => 'medium_size_h',   4 => 'medium_large_size_w',   5 => 'medium_large_size_h',   6 => 'large_size_w',   7 => 'large_size_h',   8 => 'mailserver_port',   9 => 'comment_max_links',   10 => 'page_on_front',   11 => 'page_for_posts',   12 => 'rss_excerpt_length',   13 => 'default_category',   14 => 'default_email_category',   15 => 'default_link_category',   16 => 'close_comments_days_old',   17 => 'comments_per_page',   18 => 'thread_comments_depth',   19 => 'users_can_register',   20 => 'start_of_week',   21 => 'site_icon',   22 => 'fileupload_maxk', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "STRIPPED",
                    "value": "array (   0 => 'date_format',   1 => 'time_format',   2 => 'mailserver_url',   3 => 'mailserver_login',   4 => 'mailserver_pass',   5 => 'upload_path', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "EMAIL",
                    "value": "'The email address entered did not appear to be a valid email address. Please enter a valid email address.'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ERRORS",
                    "value": "array (   'siteurl' => 'The WordPress address you entered did not appear to be a valid URL. Please enter a valid URL.',   'home' => 'The Site address you entered did not appear to be a valid URL. Please enter a valid URL.',   'timezone_string' => 'The timezone you have entered is not valid. Please select a valid timezone.',   'permalink_structure' => 'A structure tag is required when using custom permalinks. <a href=\"https://wordpress.org/documentation/article/customize-permalinks/#choosing-your-permalink-structure\">Learn more</a>', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "clean",
                    "static": true,
                    "visibility": "public",
                    "signature": "clean(string $option, mixed $value): mixed",
                    "doc": "The value as sanitize_option leaves it, through sanitize_option_{$option}.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "rule",
                    "static": true,
                    "visibility": "private",
                    "signature": "rule(string $option, mixed $value): array",
                    "doc": "The option's own rule: the cleaned value, and the error that refuses it (null when it stands).",
                    "shapes": [
                        "@return array{0: mixed, 1: string|null}"
                    ],
                    "params": [
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "lists",
                    "static": true,
                    "visibility": "private",
                    "signature": "lists(string $option, mixed $value): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: mixed, 1: string|null}"
                    ],
                    "params": [
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "email",
                    "static": true,
                    "visibility": "private",
                    "signature": "email(string $value): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string, 1: string|null}"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "perPage",
                    "static": true,
                    "visibility": "private",
                    "signature": "perPage(mixed $value): int",
                    "doc": "A page size: a whole number, 1 when none, a negative one (but -1, all) made positive.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "structure",
                    "static": true,
                    "visibility": "private",
                    "signature": "structure(string $option, string $value): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string, 1: string|null}"
                    ],
                    "params": [
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "words",
                    "static": true,
                    "visibility": "private",
                    "signature": "words(array $words): array|string",
                    "doc": "",
                    "shapes": [
                        "@param array<int|string, mixed> $words @return list<string>|string"
                    ],
                    "params": [
                        {
                            "name": "words",
                            "type": "array",
                            "shape": "array<int|string, mixed>",
                            "default": null,
                            "doc": "@return list<string>|string"
                        }
                    ],
                    "line": 110,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "domains",
                    "static": true,
                    "visibility": "private",
                    "signature": "domains(array $domains): array|string",
                    "doc": "",
                    "shapes": [
                        "@param array<int|string, mixed> $domains @return list<string>|string"
                    ],
                    "params": [
                        {
                            "name": "domains",
                            "type": "array",
                            "shape": "array<int|string, mixed>",
                            "default": null,
                            "doc": "@return list<string>|string"
                        }
                    ],
                    "line": 117,
                    "end": 121
                },
                {
                    "routes": [],
                    "name": "languages",
                    "static": true,
                    "visibility": "private",
                    "signature": "languages(): array",
                    "doc": "The languages the site may be set to: those installed, and the one wp-config names. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 124,
                    "end": 131
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Options",
            "short": "Options",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Options.php",
            "lines": 498,
            "doc": "Options as plugin code sees them, kept where the reference keeps them:\nwp_cache's options group (OptionsGroup) holds the autoloaded list, the\nnames known unset, and a key per option not autoloaded, so a plugin that\nreads, writes or drops those keys is heard. get_option() and\nwp_load_alloptions() pass the list through pre_wp_load_alloptions and\nalloptions. A value written this request is held as it was written (an\nint stays an int, true stays true), arrays and objects as stored. Each\nstored text is decoded once while it stays the same, except one holding\nan object, decoded afresh on every read as the reference does: a plugin\nthat changes the object it was handed and saves it must find the stored\ncopy still different, or its change is never written.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db",
                "Minn\\Runtime\\OptionsGroup",
                "Minn\\Runtime\\Recovery",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\StoredObjects",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\OptionCommand",
                "Minn\\Engine",
                "Minn\\Runtime\\AjaxController",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\Symbols"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 60,
                "end": 63
            },
            "cases": [],
            "constants": [
                {
                    "name": "ALL",
                    "value": "'alloptions'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "MISSING",
                    "value": "'notoptions'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "GUARDED",
                    "value": "array (   0 => 'minn_runtime_symbols',   1 => 'minn_recovery_strikes',   2 => 'minn_cron_lock', )",
                    "doc": "The options the engine keeps for itself: the symbol-gate cache a plugin\ncould otherwise rewrite to pass its own gate, the recovery strikes, the\ncron lock, and the sign-in throttle rows. The facade refuses to write\nthem; the engine writes them through this class directly.",
                    "visibility": "public"
                },
                {
                    "name": "GUARDED_PREFIX",
                    "value": "'minn_login_throttle_'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ON_DEMAND",
                    "value": "array (   0 => 'minn_admin_changelog',   1 => 'minn_changelog',   2 => 'minn_release',   3 => 'minn_plugin_info',   4 => 'minn_updates',   5 => '_transient_minn_admin_uploads_size',   6 => '_transient_timeout_minn_admin_uploads_size',   7 => 'minn_admin_uploads_size_lock', )",
                    "doc": "The engine's own caches, read on demand and written with autoload off\n(Site::setOption). Rows an older engine wrote autoloaded are set right\nthe first time a loaded list holds them.",
                    "visibility": "public"
                },
                {
                    "name": "AUTOLOAD_VALUES",
                    "value": "array (   0 => 'yes',   1 => 'on',   2 => 'auto-on',   3 => 'auto', )",
                    "doc": "The autoload column values that load an option with every request, in the reference's order.",
                    "visibility": "public"
                },
                {
                    "name": "EVERY_REQUEST",
                    "value": "array (   0 => 'minn_runtime_symbols',   1 => 'paused_plugins',   2 => 'WPLANG',   3 => 'https_migration_required',   4 => 'minn_admin_post_types',   5 => 'minn_admin_taxonomies', )",
                    "doc": "Options not autoloaded that are read on every request (the symbol\nsurvey, recovery's paused plugins, the site language, the HTTPS\nmigration flag, and the post types and taxonomies Minn Admin keeps\nand registers as it loads): read together as a request begins, as one\nread rather than one each.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "group",
                    "type": "Minn\\Runtime\\OptionsGroup",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "decoded",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "isFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "isFor(Minn\\Db $db): bool",
                    "doc": "Whether this store reads through the given connection.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "guarded",
                    "static": true,
                    "visibility": "public",
                    "signature": "guarded(string $name): bool",
                    "doc": "Whether plugin code is refused a write to this option.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "autoloaded",
                    "static": false,
                    "visibility": "public",
                    "signature": "autoloaded(bool $force = false): mixed",
                    "doc": "The autoloaded list as wp_load_alloptions() gives it:\npre_wp_load_alloptions may answer first (told whether the cache was\nforced), and then alloptions is not heard; otherwise the list the\ngroup holds, through alloptions, which may add or change entries\nwithout the group keeping them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "force",
                            "type": "bool",
                            "shape": "",
                            "default": "false",
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "filtered",
                    "static": false,
                    "visibility": "public",
                    "signature": "filtered(string $name, mixed ...$default): mixed",
                    "doc": "An option as get_option() reads it, through the filters plugins hook:\npre_option_{name}, then pre_option, may answer first; then the\nautoloaded list is read through its filters on every read; an unset\noption is its default (false when none is given) through\ndefault_option_{name}, which is told whether one was given; a set one\ngoes through option_{name}.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 188,
                    "end": 211
                },
                {
                    "routes": [],
                    "name": "raw",
                    "static": false,
                    "visibility": "public",
                    "signature": "raw(string $name): ?string",
                    "doc": "An option's stored text, as Db::option() gives it, or null when it is\nunset: from the list or the group, a value written this request in\nits stored form (true as \"1\", a list serialized).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $name): mixed",
                    "doc": "An option's value, decoded, or null when unset; home and siteurl answer to wp-config.php's constants.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 225,
                    "end": 233
                },
                {
                    "routes": [],
                    "name": "prime",
                    "static": false,
                    "visibility": "public",
                    "signature": "prime(array $names): void",
                    "doc": "Reads several options at once (wp_prime_option_caches): the ones not\nheld yet in one query, each kept under its own key or noted unset, as\na read of each one alone would leave them.",
                    "shapes": [
                        "@param list<string> $names"
                    ],
                    "params": [
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 242,
                    "end": 272
                },
                {
                    "routes": [],
                    "name": "exists",
                    "static": false,
                    "visibility": "public",
                    "signature": "exists(string $name): bool",
                    "doc": "Whether an option exists.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 275,
                    "end": 278
                },
                {
                    "routes": [],
                    "name": "knownMissing",
                    "static": false,
                    "visibility": "public",
                    "signature": "knownMissing(string $name): bool",
                    "doc": "Whether a read this request already found the option unset (the reference's notoptions).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 281,
                    "end": 284
                },
                {
                    "routes": [],
                    "name": "add",
                    "static": false,
                    "visibility": "public",
                    "signature": "add(string $name, mixed $value, string $autoload = 'auto'): bool",
                    "doc": "Writes a new option. add_option has already decided it is new (its\nvalue is still the default); a row that is there anyway is written\nover, as the reference's add does, and false comes back when it\nalready held this value. An autoloaded one joins the list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "autoload",
                            "type": "string",
                            "shape": "",
                            "default": "'auto'",
                            "doc": ""
                        }
                    ],
                    "line": 292,
                    "end": 310
                },
                {
                    "routes": [],
                    "name": "upsert",
                    "static": false,
                    "visibility": "public",
                    "signature": "upsert(string $name, string $stored, string $autoload): bool",
                    "doc": "Writes an option row whether or not one exists, as the reference does\nfor every add: two requests that both find a transient missing and\nboth add it must not fail on the unique name, so the second write lands\nover the first. True when the row was inserted or changed, false when\nthe same value was already there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "stored",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "autoload",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 319,
                    "end": 327
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(string $name, mixed $value, ?string $autoload = NULL): bool",
                    "doc": "False when the value is unchanged, as the reference reports.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "autoload",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 330,
                    "end": 354
                },
                {
                    "routes": [],
                    "name": "markAutoload",
                    "static": false,
                    "visibility": "public",
                    "signature": "markAutoload(string $name): bool",
                    "doc": "Flips the autoload column; false when the option is missing or already so. The list is read again, the option's own key dropped.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 388,
                    "end": 396
                },
                {
                    "routes": [],
                    "name": "unmarkAutoload",
                    "static": false,
                    "visibility": "public",
                    "signature": "unmarkAutoload(string $name): bool",
                    "doc": "Stops an option loading on every request; false when it already did not, or is unset. It leaves the list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 399,
                    "end": 410
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(string $name): bool",
                    "doc": "Removes an option: out of the list or its own key, and known unset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 424,
                    "end": 445
                },
                {
                    "routes": [],
                    "name": "expiredTransientNames",
                    "static": false,
                    "visibility": "public",
                    "signature": "expiredTransientNames(int $now, string $prefix = '_transient_timeout_'): array",
                    "doc": "The names of transients whose expiry has passed. The timeout row is the\none that knows, so the sweep reads those and hands back the bare names.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "now",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": "'_transient_timeout_'",
                            "doc": ""
                        }
                    ],
                    "line": 453,
                    "end": 466
                },
                {
                    "routes": [],
                    "name": "forget",
                    "static": false,
                    "visibility": "public",
                    "signature": "forget(string $name): void",
                    "doc": "Brings the group back in step with an option the engine wrote behind\nthe store (its own rows, the CLI): the row is read again, into the list\nwhen it autoloads, and nothing else written this request is lost.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 473,
                    "end": 491
                },
                {
                    "routes": [],
                    "name": "toStorage",
                    "static": true,
                    "visibility": "public",
                    "signature": "toStorage(mixed $value): string",
                    "doc": "What the reference stores (maybe_serialize): arrays and objects\nserialized, a string that looks serialized serialized again so it\nreads back as that string, other scalars as their string form.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 498,
                    "end": 507
                },
                {
                    "routes": [],
                    "name": "fromStorage",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromStorage(string $raw): mixed",
                    "doc": "A stored option value decoded the way the reference reads it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 510,
                    "end": 519
                },
                {
                    "routes": [],
                    "name": "listed",
                    "static": false,
                    "visibility": "private",
                    "signature": "listed(): array",
                    "doc": "The autoloaded options, kept in the group under alloptions: read in one\nquery when the group has no list, each as stored except one written\nsince. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 98,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "missing",
                    "static": false,
                    "visibility": "private",
                    "signature": "missing(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, true> the names a read found unset, kept in the group under notoptions"
                    ],
                    "params": [],
                    "line": 123,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "lookup",
                    "static": false,
                    "visibility": "private",
                    "signature": "lookup(string $name, array $list): mixed",
                    "doc": "An option's held value, or null when it is unset: from the list given,\nelse not at all when it is known unset, else its own key, else its row\n(kept under its own key, or noted unset).",
                    "shapes": [
                        "@param array<string, mixed> $list"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "list",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 140,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": false,
                    "visibility": "private",
                    "signature": "decode(string $name, mixed $held): mixed",
                    "doc": "A held value decoded the way the reference reads it, once while it stays the same (never one holding an object).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "held",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "remember",
                    "static": false,
                    "visibility": "private",
                    "signature": "remember(string $name, mixed $value): mixed",
                    "doc": "What the group holds for a value just written: scalars as given,\narrays and objects as stored. Its decoded form is the value itself,\nso a string that only looks serialized reads back as that string.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 361,
                    "end": 369
                },
                {
                    "routes": [],
                    "name": "found",
                    "static": false,
                    "visibility": "private",
                    "signature": "found(string $name): void",
                    "doc": "Takes a name off the list of those known unset.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 372,
                    "end": 379
                },
                {
                    "routes": [],
                    "name": "holdsObject",
                    "static": true,
                    "visibility": "private",
                    "signature": "holdsObject(string $stored): bool",
                    "doc": "Whether a stored value has an object record in it (a string that only mentions one decodes afresh too, which is harmless).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stored",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 382,
                    "end": 385
                },
                {
                    "routes": [],
                    "name": "switchAutoload",
                    "static": false,
                    "visibility": "private",
                    "signature": "switchAutoload(string $name, string $wanted, array $already): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $already the stored values that already mean $wanted"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wanted",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "already",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the stored values that already mean $wanted"
                        }
                    ],
                    "line": 413,
                    "end": 421
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\OptionsGroup",
            "short": "OptionsGroup",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/OptionsGroup.php",
            "lines": 57,
            "doc": "wp_cache's options group, where option reads are kept as the reference\nkeeps them: the autoloaded list under alloptions, the names a read found\nunset under notoptions, and one key per option not autoloaded. The\nengine's own object cache holds it, or an object-cache.php drop-in once\nthe facade hands over its functions.\n\nA drop-in's cache outlives the request, and the engine writes some\noptions behind the store (its own state, the CLI), so a key left by an\nearlier request is never trusted: each is read from the database the\nfirst time a request asks for it, then kept in step for the rest of it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\Options"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "GROUP",
                    "value": "'options'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "external",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "fresh",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "useExternal",
                    "static": true,
                    "visibility": "public",
                    "signature": "useExternal(Closure $get, Closure $set, Closure $delete): void",
                    "doc": "Hands the group to an object-cache.php drop-in's functions.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "get",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "set",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "delete",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $key, ?bool $found = NULL): mixed",
                    "doc": "A key's value, found only when this request may trust it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "found",
                            "type": "?bool",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "set",
                    "static": false,
                    "visibility": "public",
                    "signature": "set(string $key, mixed $value): void",
                    "doc": "Stores a key; a drop-in is written only when it holds something else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(string $key): void",
                    "doc": "Removes a key.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 76
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Pages",
            "short": "Pages",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Pages.php",
            "lines": 136,
            "doc": "get_pages() as the reference shapes it: its arguments as a post query\n(WP_Query, so its filters shape it), the tree order of the result, then\nthe get_pages filter. wp_list_pages, wp_dropdown_pages and the\nnavigation's page list take their pages from here.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULTS",
                    "value": "array (   'child_of' => 0,   'sort_order' => 'ASC',   'sort_column' => 'post_title',   'hierarchical' => 1,   'exclude' =>    array (   ),   'include' =>    array (   ),   'meta_key' => '',   'meta_value' => '',   'authors' => '',   'parent' => -1,   'exclude_tree' =>    array (   ),   'number' => '',   'offset' => 0,   'post_type' => 'page',   'post_status' => 'publish', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COLUMNS",
                    "value": "array (   'post_title' => 'title',   'menu_order' => 'menu_order',   'post_date' => 'date',   'post_modified' => 'modified',   'ID' => 'ID',   'post_author' => 'author',   'post_name' => 'name',   'post_parent' => 'parent', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "get",
                    "static": true,
                    "visibility": "public",
                    "signature": "get(array $args): array",
                    "doc": "The pages get_pages() answers for parsed arguments.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array<int, \\WP_Post>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "queryArgs",
                    "static": true,
                    "visibility": "public",
                    "signature": "queryArgs(array $parsed, array $include, array $exclude): array",
                    "doc": "The post query the get_pages() arguments amount to, shaped as the\nreference hands it to get_pages_query_args (probe filter-inputs-2): the\norder by the columns as named, then (unless pages are picked by id)\nthe excluded ones and the meta pair, the number or -1 and the offset,\nthe type, the statuses as a list and the cache flags; then the picked\npages, the authors and the parent, each when given.",
                    "shapes": [
                        "@param list<int> $include",
                        "@param list<int> $exclude"
                    ],
                    "params": [
                        {
                            "name": "parsed",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "include",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "exclude",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "arrange",
                    "static": true,
                    "visibility": "public",
                    "signature": "arrange(array $pages, array $parsed): array",
                    "doc": "The pages as the reference leaves them: with a hierarchy (unless a\nparent is named or pages are picked by id) or a child_of, only what\ndescends from that page (the root by default), each parent followed\nby its subtree; then any branch left out, its places left empty.",
                    "shapes": [
                        "@param list<object> $pages objects with ID and post_parent",
                        "@return array<int, object>"
                    ],
                    "params": [
                        {
                            "name": "pages",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": "objects with ID and post_parent"
                        },
                        {
                            "name": "parsed",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 104
                },
                {
                    "routes": [],
                    "name": "children",
                    "static": true,
                    "visibility": "public",
                    "signature": "children(array $pages, int $parent): array",
                    "doc": "What descends from a page within the list, depth first, siblings in\nlist order (get_page_children); a page whose parent is not reached is\nleft out.",
                    "shapes": [
                        "@param list<object> $pages",
                        "@return list<object>"
                    ],
                    "params": [
                        {
                            "name": "pages",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "descendants",
                    "static": true,
                    "visibility": "public",
                    "signature": "descendants(array $pages, int $parent): array",
                    "doc": "Every page under one ancestor, in list order. @param list<object> $pages @return list<object>",
                    "shapes": [
                        "@param list<object> $pages @return list<object>"
                    ],
                    "params": [
                        {
                            "name": "pages",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": "@return list<object>"
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 149
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Patterns",
            "short": "Patterns",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Patterns.php",
            "lines": 161,
            "doc": "The block pattern, pattern category, and block style registries as data.\nEntries registered after init are remembered separately, because the\neditor asks for those on their own.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "patterns",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "patternsAfterInit",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "categories",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "categoriesAfterInit",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "styles",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "registerPattern",
                    "static": false,
                    "visibility": "public",
                    "signature": "registerPattern(mixed $name, mixed $properties): ?Minn\\Runtime\\Refusal",
                    "doc": "Registers a block pattern, or the refusal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "properties",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "unregisterPattern",
                    "static": false,
                    "visibility": "public",
                    "signature": "unregisterPattern(string $name): bool",
                    "doc": "Forgets a pattern.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "pattern",
                    "static": false,
                    "visibility": "public",
                    "signature": "pattern(string $name): ?array",
                    "doc": "One pattern, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "patterns",
                    "static": false,
                    "visibility": "public",
                    "signature": "patterns(): array",
                    "doc": "Every pattern.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "patternsAfterInit",
                    "static": false,
                    "visibility": "public",
                    "signature": "patternsAfterInit(): array",
                    "doc": "The patterns registered after init, which the editor lists separately.",
                    "shapes": [],
                    "params": [],
                    "line": 73,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "registerCategory",
                    "static": false,
                    "visibility": "public",
                    "signature": "registerCategory(mixed $name, mixed $properties): ?Minn\\Runtime\\Refusal",
                    "doc": "Registers a pattern category, or the refusal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "properties",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "unregisterCategory",
                    "static": false,
                    "visibility": "public",
                    "signature": "unregisterCategory(string $name): bool",
                    "doc": "Forgets a category.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "category",
                    "static": false,
                    "visibility": "public",
                    "signature": "category(string $name): ?array",
                    "doc": "One category, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 104,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "categories",
                    "static": false,
                    "visibility": "public",
                    "signature": "categories(): array",
                    "doc": "Every category.",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 114,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "categoriesAfterInit",
                    "static": false,
                    "visibility": "public",
                    "signature": "categoriesAfterInit(): array",
                    "doc": "The categories registered after init.",
                    "shapes": [],
                    "params": [],
                    "line": 120,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "registerStyle",
                    "static": false,
                    "visibility": "public",
                    "signature": "registerStyle(mixed $blocks, mixed $properties): ?Minn\\Runtime\\Refusal",
                    "doc": "Registers a block style, or the refusal.",
                    "shapes": [
                        "@param string|list<string> $blocks"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "mixed",
                            "shape": "string|list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "properties",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "unregisterStyle",
                    "static": false,
                    "visibility": "public",
                    "signature": "unregisterStyle(string $block, string $style): bool",
                    "doc": "Forgets a block style.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "style",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "style",
                    "static": false,
                    "visibility": "public",
                    "signature": "style(string $block, string $style): ?array",
                    "doc": "One block style, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "block",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "style",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 158,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "styles",
                    "static": false,
                    "visibility": "public",
                    "signature": "styles(?string $block = NULL): array",
                    "doc": "Every block style, or one block's.",
                    "shapes": [
                        "@return array<string, array<string, array<string, mixed>>>"
                    ],
                    "params": [
                        {
                            "name": "block",
                            "type": "?string",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 171
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PlaceholderTrace",
            "short": "PlaceholderTrace",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PlaceholderTrace.php",
            "lines": 37,
            "doc": "Records every call into a generated placeholder while a site opts in by\nhaving wp-content/minn-placeholder-trace.log on disk: one line per call\nwith the symbol, the plugin file that called it, and the request. The\nlog says which placeholders deserve behaviour; an absent file costs one\nstat per request.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "file",
                    "type": "?string",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "checked",
                    "type": "bool",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "deadEnd",
                    "static": true,
                    "visibility": "public",
                    "signature": "deadEnd(string $symbol): void",
                    "doc": "Logs a call to a method of a real class that Minn answers with nothing by\ndesign (an admin-screen helper): compat-status counts the method as a\ndead end, where a hit() marks one still owed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "symbol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "hit",
                    "static": true,
                    "visibility": "public",
                    "signature": "hit(string $symbol): void",
                    "doc": "Logs a placeholder symbol being called, when the trace file exists.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "symbol",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 49
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Placeholders",
            "short": "Placeholders",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Placeholders.php",
            "lines": 71,
            "doc": "The printf placeholders plugin code hands wpdb::prepare, filled the way\nthe reference fills them: a bare %s is escaped and quoted; a numbered\n(%1$s), padded (%5s) or precise (%.2f) one is formatted and escaped but\nnever quoted, so a plugin can name a table with it; %d and %f cast; %i\nbackticks an identifier; %% is a literal. Numbered placeholders address\nthe argument list directly while unnumbered ones count from the first\non their own, as vsprintf does. A placeholder with no argument behind it\nempties the whole query, as the reference does.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SPEC",
                    "value": "'/%(?:(\\\\d+)\\\\$)?([-+ 0]*)(\\\\d*)(?:\\\\.(\\\\d+))?([sdfFi%])/'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "fill",
                    "static": true,
                    "visibility": "public",
                    "signature": "fill(string $query, array $args, callable $escape): ?string",
                    "doc": "Fills a query's placeholders from the arguments; null when one has no argument.",
                    "shapes": [
                        "@param list<mixed> $args",
                        "@param callable(string): string $escape the connection's string escape"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escape",
                            "type": "callable",
                            "shape": "callable(string): string",
                            "default": null,
                            "doc": "the connection's string escape"
                        }
                    ],
                    "line": 27,
                    "end": 30
                },
                {
                    "routes": [],
                    "name": "prepare",
                    "static": true,
                    "visibility": "public",
                    "signature": "prepare(string $query, array $args, callable $escape): array",
                    "doc": "fill() with what wpdb::prepare reports alongside: how many placeholders\nthe query has (%% not among them) and the type of each argument it\ncould not use (an array or an object fills as '').",
                    "shapes": [
                        "@param list<mixed> $args",
                        "@param callable(string): string $escape the connection's string escape",
                        "@return array{query: ?string, placeholders: int, unsupported: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escape",
                            "type": "callable",
                            "shape": "callable(string): string",
                            "default": null,
                            "doc": "the connection's string escape"
                        }
                    ],
                    "line": 41,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "filled",
                    "static": true,
                    "visibility": "private",
                    "signature": "filled(string $query, array $args, callable $escape): ?string",
                    "doc": "",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escape",
                            "type": "callable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "quoted",
                    "static": true,
                    "visibility": "private",
                    "signature": "quoted(string $placeholder, string $escaped): string",
                    "doc": "A bare %s is the one placeholder the reference wraps in quotes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "placeholder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escaped",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "private",
                    "signature": "text(mixed $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PluginActivation",
            "short": "PluginActivation",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PluginActivation.php",
            "lines": 70,
            "doc": "Switching a plugin on and off the way the reference's activate_plugin\nand deactivate_plugins do (probe plugin-activation), for the facade and\nfor the engine's own REST routes and WP-CLI verbs alike. Activating\nchecks the plugin's requirements, then loads its main file through the\nruntime's gate (so its activation hook is registered, silent or not),\nfires activate_plugin and activate_<file> (which runs that hook), writes\nactive_plugins sorted through update_option, and fires activated_plugin;\nwhatever the plugin printed meanwhile makes the answer unexpected_output,\nwith the plugin left active, as the reference leaves it. Silent skips the\nactions, not the load. A plugin the gate will not load (it needs\nfunctions or classes the runtime lacks) is refused rather than recorded\nactive with code that could never run its activation hook. Deactivating\nfires deactivate_plugin, deactivate_<file> and deactivated_plugin for\neach plugin, then writes the list once.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Hooks",
                "Minn\\Runtime\\PluginRequirements",
                "Minn\\Runtime\\Plugins",
                "Minn\\Runtime\\Refusal",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Content\\PluginState"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "activate",
                    "static": true,
                    "visibility": "public",
                    "signature": "activate(string $plugin, ?Minn\\Runtime\\Hooks $announce, ?Closure $networkStore = NULL): ?Minn\\Runtime\\Refusal",
                    "doc": "Activates one plugin (\"dir/file.php\"), announcing it to the hooks\ngiven, or to nobody (silent); null when it is active afterwards with\nnothing to report.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "announce",
                            "type": "?Minn\\Runtime\\Hooks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "networkStore",
                            "type": "?Closure",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "deactivate",
                    "static": true,
                    "visibility": "public",
                    "signature": "deactivate(array $plugins, ?Minn\\Runtime\\Hooks $announce): void",
                    "doc": "Deactivates plugins (\"dir/file.php\" each), announcing each to the hooks\ngiven, or to nobody (silent); those not active are passed over.",
                    "shapes": [
                        "@param list<string> $plugins"
                    ],
                    "params": [
                        {
                            "name": "plugins",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "announce",
                            "type": "?Minn\\Runtime\\Hooks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "active",
                    "static": true,
                    "visibility": "private",
                    "signature": "active(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 87,
                    "end": 91
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PluginRemoval",
            "short": "PluginRemoval",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PluginRemoval.php",
            "lines": 124,
            "doc": "Deleting plugins as the reference's delete_plugins does it: each in turn\nis uninstalled first when it can be (its uninstall.php, or the callback\nit registered), then delete_plugin, its folder (or file) removed,\ndeleted_plugin, and its installed translations removed with it; the\nupdates offered for the deleted ones are forgotten. A plugin already\ngone counts as deleted. Only what lies inside the plugins folder is\never removed, and a symlinked folder is unlinked, never followed.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Files"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "delete",
                    "static": true,
                    "visibility": "public",
                    "signature": "delete(array $plugins): WP_Error|bool",
                    "doc": "delete_plugins: true, false for none asked, or the error naming those left behind.",
                    "shapes": [
                        "@param array<int, string> $plugins plugin files, relative to the plugins folder"
                    ],
                    "params": [
                        {
                            "name": "plugins",
                            "type": "array",
                            "shape": "array<int, string>",
                            "default": null,
                            "doc": "plugin files, relative to the plugins folder"
                        }
                    ],
                    "line": 25,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "uninstall",
                    "static": true,
                    "visibility": "public",
                    "signature": "uninstall(string $plugin): ?bool",
                    "doc": "uninstall_plugin: pre_uninstall_plugin, then the plugin's uninstall.php\n(WP_UNINSTALL_PLUGIN naming it) or the callback it registered (heard on\nuninstall_<file>, with the plugin loaded); either is forgotten once run.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "deleteOne",
                    "static": true,
                    "visibility": "private",
                    "signature": "deleteOne(string $plugin, array $translations): bool",
                    "doc": "One plugin, uninstalled, removed and announced; whether it is gone. @param array<string, mixed> $translations",
                    "shapes": [
                        "@param array<string, mixed> $translations"
                    ],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "translations",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "removeFiles",
                    "static": true,
                    "visibility": "private",
                    "signature": "removeFiles(string $plugin): bool",
                    "doc": "The plugin's folder, or its file when it has none; false for anything outside the plugins folder.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "removeTranslations",
                    "static": true,
                    "visibility": "private",
                    "signature": "removeTranslations(string $slug, array $translations): void",
                    "doc": "A folder plugin's installed translations (.po, .mo, .l10n.php, script .json), by locale. @param array<string, mixed> $translations",
                    "shapes": [
                        "@param array<string, mixed> $translations"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "translations",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "forget",
                    "static": true,
                    "visibility": "private",
                    "signature": "forget(string $file, array $registered): void",
                    "doc": "The registered uninstall callback, dropped from the option. @param array<string, mixed> $registered",
                    "shapes": [
                        "@param array<string, mixed> $registered"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "forgetUpdates",
                    "static": true,
                    "visibility": "private",
                    "signature": "forgetUpdates(array $deleted): void",
                    "doc": "The updates offered for plugins that are gone. @param array<int, string> $deleted",
                    "shapes": [
                        "@param array<int, string> $deleted"
                    ],
                    "params": [
                        {
                            "name": "deleted",
                            "type": "array",
                            "shape": "array<int, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 140
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PluginRequirements",
            "short": "PluginRequirements",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PluginRequirements.php",
            "lines": 66,
            "doc": "Whether a plugin can be switched on here, as the reference's\nvalidate_plugin_requirements answers (probe plugin-activation): the\nplugin header's \"Requires at least\" against the WordPress version the\nsite speaks, its \"Requires PHP\" against the running PHP, and every slug\nin its \"Requires Plugins\" installed and active (a readme.txt is not\nread). A refusal carries the reference's code, its HTML message word for\nword, and for missing plugins the slugs found inactive (slug => name) and\nnot installed (slug => slug). The slugs are taken sorted (one that is not\na lower-case slug is passed over), and named in that order.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\FileHeaders"
            ],
            "usedBy": [
                "Minn\\Runtime\\PluginActivation"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "check",
                    "static": true,
                    "visibility": "public",
                    "signature": "check(string $plugin): ?Minn\\Runtime\\Refusal",
                    "doc": "Null when the plugin may be activated, otherwise why not.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "dependencies",
                    "static": true,
                    "visibility": "private",
                    "signature": "dependencies(string $name, string $required): ?Minn\\Runtime\\Refusal",
                    "doc": "The required plugins that are not installed and active, refused together.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "required",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "installed",
                    "static": true,
                    "visibility": "private",
                    "signature": "installed(string $slug): ?string",
                    "doc": "The installed plugin a slug names: the first file in its folder with a plugin header, else a single-file plugin of that name.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 84
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PluginUpdates",
            "short": "PluginUpdates",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PluginUpdates.php",
            "lines": 65,
            "doc": "The update offers the site's own plugins publish. A plugin that hosts\nitself, or sells itself, is not in the wordpress.org directory and never\nappears in the directory's answer: it publishes its offer by filtering\nthe update transient WordPress reads, which is the only place anyone\nlearns of it. The engine asks the same question of the runtime, in the\nshape the reference asks it, so a self-hosted plugin is offered its\nupdate here exactly as it would be on WordPress.\n\nThe transient carries `checked` (every installed plugin and its version),\nand a plugin's updater returns early when that is empty, so the installed\nversions are what make the question answerable.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Ops\\Updates"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "HOOK",
                    "value": "'site_transient_update_plugins'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "supplied",
                    "static": true,
                    "visibility": "public",
                    "signature": "supplied(array $installed): array",
                    "doc": "What the site's plugins offer for themselves, empty when no runtime\nis booted or nothing filters the transient.",
                    "shapes": [
                        "@param array<string, string> $installed plugin file => installed version",
                        "@return array{plugins: array<string, array<string, mixed>>, no_update: array<string, array<string, mixed>>}"
                    ],
                    "params": [
                        {
                            "name": "installed",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "plugin file => installed version"
                        }
                    ],
                    "line": 31,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "fromFiltered",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromFiltered(mixed $filtered, array $installed): array",
                    "doc": "The filtered transient as the state's two buckets: offers under\n`plugins`, plugins that answered \"current\" under `no_update`, both\nas arrays, and only for files this site actually has.",
                    "shapes": [
                        "@param array<string, string> $installed",
                        "@return array{plugins: array<string, array<string, mixed>>, no_update: array<string, array<string, mixed>>}"
                    ],
                    "params": [
                        {
                            "name": "filtered",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "installed",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "bucket",
                    "static": true,
                    "visibility": "private",
                    "signature": "bucket(mixed $filtered, string $name, array $installed): array",
                    "doc": "One bucket of the transient, normalised.",
                    "shapes": [
                        "@param array<string, string> $installed",
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "filtered",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "installed",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Plugins",
            "short": "Plugins",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Plugins.php",
            "lines": 272,
            "doc": "Loads the site's plugins into the runtime the way the reference does:\nmu-plugins first, then active_plugins in stored order, each file\nincluded once. A plugin loads only when the static symbol read finds\nnothing the runtime lacks; otherwise it is reported and skipped so the\nsite keeps rendering. The lifecycle actions fire between the phases.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Http\\Failure",
                "Minn\\Login\\ServeLogin",
                "Minn\\Runtime\\CurrentUser",
                "Minn\\Runtime\\Recovery",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\Symbols",
                "Minn\\Support\\FileHeaders"
            ],
            "usedBy": [
                "Minn\\Cli\\Runtime",
                "Minn\\Engine",
                "Minn\\Extension\\Loader",
                "Minn\\Runtime\\PluginActivation",
                "Minn\\Theme\\ClassicRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MINN_ADMIN",
                    "value": "'minn-admin/minn-admin.php'",
                    "doc": "Minn Admin loads as code for its adapters (surfaces, licenses,\nconnectors, custom CSS, the plugin routes the engine has no\ncontroller for), but the engine owns the shell, the front bar, the\nsign-in flow, and maintenance: those hooks come off right after the\ninclude so the two never print twice or disagree.",
                    "visibility": "private"
                },
                {
                    "name": "MINN_ADMIN_HOOKS",
                    "value": "array (   0 =>    array (     0 => 'template_redirect',     1 =>      array (       0 => 'Minn_Admin',       1 => 'maybe_render_app',     ),     2 => 0,   ),   1 =>    array (     0 => 'template_redirect',     1 =>      array (       0 => 'Minn_Admin',       1 => 'maybe_maintenance_mode',     ),     2 => 1,   ),   2 =>    array (     0 => 'rest_authentication_errors',     1 =>      array (       0 => 'Minn_Admin',       1 => 'maintenance_rest',     ),     2 => 20,   ),   3 =>    array (     0 => 'login_redirect',     1 =>      array (       0 => 'Minn_Admin',       1 => 'login_redirect',     ),     2 => 20,   ),   4 =>    array (     0 => 'show_admin_bar',     1 =>      array (       0 => 'Minn_Admin',       1 => 'enforce_toolbar_policy',     ),     2 => 99,   ),   5 =>    array (     0 => 'show_admin_bar',     1 =>      array (       0 => 'Minn_Admin_Bar',       1 => 'suppress_core_bar',     ),     2 => 100,   ),   6 =>    array (     0 => 'wp_enqueue_scripts',     1 =>      array (       0 => 'Minn_Admin_Bar',       1 => 'enqueue',     ),     2 => 10,   ),   7 =>    array (     0 => 'wp_footer',     1 =>      array (       0 => 'Minn_Admin_Bar',       1 => 'render',     ),     2 => 10,   ),   8 =>    array (     0 => 'body_class',     1 =>      array (       0 => 'Minn_Admin_Bar',       1 => 'body_class',     ),     2 => 10,   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "loaded",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "skipped",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "load",
                    "static": true,
                    "visibility": "public",
                    "signature": "load(Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "Loads the active plugins as code and fires the boot hooks. Recovery\nis armed for exactly this window: a failure here is one every\nvisitor would hit, so it may be recorded against its extension.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "loadTheme",
                    "static": true,
                    "visibility": "public",
                    "signature": "loadTheme(Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "The theme's setup without the plugins: setup_theme, the theme's\nfunctions.php, after_setup_theme, then wp_loaded. The probe runtime\nends its boot with this, so a theme's supports are what a request's\nwould be and a late declaration is judged as one; it skips init,\nwhose work the probes compare on their own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 147
                },
                {
                    "routes": [],
                    "name": "loaded",
                    "static": true,
                    "visibility": "public",
                    "signature": "loaded(): array",
                    "doc": "The plugins that loaded.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 192,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "skipped",
                    "static": true,
                    "visibility": "public",
                    "signature": "skipped(): array",
                    "doc": "The plugins the symbol gate refused, with what they lacked.",
                    "shapes": [
                        "@return array<string, array<string, mixed>> plugin file => why it did not load"
                    ],
                    "params": [],
                    "line": 202,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "loadNow",
                    "static": true,
                    "visibility": "public",
                    "signature": "loadNow(string $plugin, Minn\\Runtime\\Runtime $runtime): ?string",
                    "doc": "Loads one plugin's main file now, as activating it does: the reference\nincludes the file (once) before activate_plugin fires, so the plugin's\nactivation hook is in place to hear activate_<file>, and announces no\nplugin_loaded for it. The same gate as the boot decides, its folder\nwalked again first; null once the plugin is running, otherwise why the\ngate refused it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 233
                },
                {
                    "routes": [],
                    "name": "isLoaded",
                    "static": true,
                    "visibility": "public",
                    "signature": "isLoaded(string $plugin): bool",
                    "doc": "True when the named plugin file is running as code this request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "plugin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 236,
                    "end": 239
                },
                {
                    "routes": [],
                    "name": "boot",
                    "static": true,
                    "visibility": "private",
                    "signature": "boot(Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "loadThemeFunctions",
                    "static": true,
                    "visibility": "private",
                    "signature": "loadThemeFunctions(Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "The active theme's functions.php, child first then parent, between\nsetup_theme and after_setup_theme as the reference loads them. Each\nfile goes through the same symbol gate as a plugin folder and is\nreported under \"theme:{slug}\" when it cannot load. Templates never\nrun as PHP; a block theme's functions.php only registers hooks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "rememberThemeDomain",
                    "static": true,
                    "visibility": "private",
                    "signature": "rememberThemeDomain(string $folder, string $slug): void",
                    "doc": "An active theme's own text domain, named in its stylesheet header\n(the slug when it names none), reads its folder (\"Domain Path\", or\n\"/languages\") with files named by locale alone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "includeFile",
                    "static": true,
                    "visibility": "private",
                    "signature": "includeFile(string $file, string $name, Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 241,
                    "end": 264
                },
                {
                    "routes": [],
                    "name": "registerRealpath",
                    "static": true,
                    "visibility": "private",
                    "signature": "registerRealpath(string $file, string $name, Minn\\Runtime\\Runtime $runtime): void",
                    "doc": "A symlinked plugin folder resolves __FILE__ to its real location; the\nglobal map from the plugins directory's folder to that location keeps\nplugin_basename() and plugins_url() truthful, as the reference's\n$wp_plugin_paths does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "runtime",
                            "type": "Minn\\Runtime\\Runtime",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 272,
                    "end": 282
                },
                {
                    "routes": [],
                    "name": "isolatedInclude",
                    "static": true,
                    "visibility": "private",
                    "signature": "isolatedInclude(string $file): void",
                    "doc": "The include gets a clean local scope, as wp-settings.php gives every plugin file.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 285,
                    "end": 290
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostData",
            "short": "PostData",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostData.php",
            "lines": 68,
            "doc": "The loop's view of a post, as the reference's generate_postdata and\nget_the_content give it (probes the-content, excerpt): the content split\ninto pages at <!--nextpage--> (the line breaks beside the marker go with\nit) and handed to content_pagination, the page the query asks for, and\n\"more\" when the main query shows a single post, a page or a feed; then\nthe content of that page, cut at the more tag with a more link (or run\non past it when \"more\" is set), the teaser dropped when asked or marked\n<!--noteaser-->.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "generate",
                    "static": true,
                    "visibility": "public",
                    "signature": "generate(WP_Post $post, ?WP_Query $query = NULL): array",
                    "doc": "id, authordata, currentday, currentmonth, page, pages, multipage,\nmore, numpages. The page comes from the query given (the main query\notherwise); more is set on a single, a page or a feed, or past the\nfirst page of a post split into pages (probe query-compat).",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "?WP_Query",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "content",
                    "static": true,
                    "visibility": "public",
                    "signature": "content(?string $moreLinkText, WP_Post $post, array $elements): string",
                    "doc": "The content get_the_content gives: the asked page, cut at the more tag\nunless \"more\" is set.",
                    "shapes": [
                        "@param array<string, mixed> $elements as generate() gives them, with strip_teaser when the teaser should go"
                    ],
                    "params": [
                        {
                            "name": "moreLinkText",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "as generate() gives them, with strip_teaser when the teaser should go"
                        }
                    ],
                    "line": 55,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostEvents",
            "short": "PostEvents",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/PostEvents.php",
            "lines": 165,
            "doc": "What the reference's REST controllers tell plugins about a post they\nwrite, for the engine's own controllers: the same actions in the same\norder with the same arguments, fired through the facade's lifecycle\nfunctions so the facade's own writes say the same (contracts/runtime.md\n\"Writes tell plugins\"). Without a booted runtime every method does\nnothing, so a write with no plugins loaded is exactly what it was.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\PostWriter",
                "Minn\\Http\\Request",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Rest\\RegisteredType",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Runtime\\MenuEvents"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "deleteForGood",
                    "static": false,
                    "visibility": "public",
                    "signature": "deleteForGood(int $id): mixed",
                    "doc": "A post deleted for good through the reference's own deletion, so its\nhooks fire and its children (revisions, autosaves) go with it: the\none path every permanent delete takes. Deleting needs the facade, so\nunlike the events it runs only under a booted runtime, which the\nengine's write routes are. Answers what the deletion answered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "trash",
                    "static": false,
                    "visibility": "public",
                    "signature": "trash(int $id): mixed",
                    "doc": "A post (an attachment too) sent to the trash through the reference's own trashing, as deleteForGood deletes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "live",
                    "static": false,
                    "visibility": "public",
                    "signature": "live(): bool",
                    "doc": "Whether plugins are loaded to be told anything.",
                    "shapes": [],
                    "params": [],
                    "line": 44,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "beforeSave",
                    "static": false,
                    "visibility": "public",
                    "signature": "beforeSave(array $columns, ?Minn\\Content\\PostRecord $existing): void",
                    "doc": "Before the row is written: pre_post_insert for a new post, pre_post_update for one that exists. @param array<string, mixed> $columns",
                    "shapes": [
                        "@param array<string, mixed> $columns"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "saved",
                    "static": false,
                    "visibility": "public",
                    "signature": "saved(int $id, ?Minn\\Content\\PostRecord $before): void",
                    "doc": "Once the row is written: the caches, the status transition, the edit actions of an update, the save actions.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "ensureCategory",
                    "static": false,
                    "visibility": "public",
                    "signature": "ensureCategory(Minn\\Content\\PostWriter $writer, int $id): void",
                    "doc": "A post keeps a category through every save, the default when it has\nnone: through wp_set_post_categories with plugins loaded (which tells\nthem, set_object_terms included), quietly without.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "writer",
                            "type": "Minn\\Content\\PostWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "applyTerms",
                    "static": false,
                    "visibility": "public",
                    "signature": "applyTerms(Minn\\Content\\PostWriter $writer, int $id, array $body, string $type = ''): void",
                    "doc": "The terms a REST body names, set through wp_set_object_terms with\nplugins loaded, quietly without: a plugin's type takes its own REST\ntaxonomies under their REST bases (probe rest-plugin-types).",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "writer",
                            "type": "Minn\\Content\\PostWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "applyMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "applyMeta(Minn\\Content\\PostWriter $writer, int $id, array $body, string $type): void",
                    "doc": "The meta a REST body names: through the registered keys with plugins\nloaded (probe rest-meta; a plugin's type only when it supports custom\nfields), core's own written directly without.",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "writer",
                            "type": "Minn\\Content\\PostWriter",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 107,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "attachmentGenerated",
                    "static": false,
                    "visibility": "public",
                    "signature": "attachmentGenerated(int $id, string $file): void",
                    "doc": "A new attachment's metadata made by the runtime, as the reference's\nREST upload makes it: wp_generate_attachment_metadata over the stored\nfile (the sizes cut with the attachment's id, the metadata stored as\neach one lands, so an optimiser hooked there finds it), then\nwp_update_attachment_metadata. Every upload has some: an image its\nsizes, a PDF its previews, any file its size (probe hook-inputs-2).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "restInserted",
                    "static": false,
                    "visibility": "public",
                    "signature": "restInserted(int $id, Minn\\Http\\Request $request, ?Minn\\Content\\PostRecord $before): void",
                    "doc": "rest_insert_{type}, before the request's own terms and fields are applied; a post with no $before is a new one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "restAfterInsert",
                    "static": false,
                    "visibility": "public",
                    "signature": "restAfterInsert(int $id, Minn\\Http\\Request $request, ?Minn\\Content\\PostRecord $before): void",
                    "doc": "rest_after_insert_{type}, once the request's terms and fields are in; a post with no $before is a new one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "afterInsert",
                    "static": false,
                    "visibility": "public",
                    "signature": "afterInsert(int $id, ?Minn\\Content\\PostRecord $before): void",
                    "doc": "wp_after_insert_post, last; the revision of an update is saved from it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "restDeleted",
                    "static": false,
                    "visibility": "public",
                    "signature": "restDeleted(Minn\\Content\\PostRecord $post, array $data, Minn\\Http\\Request $request): void",
                    "doc": "rest_delete_{type}, after a trash or a delete, with the post as it was answered and the response. @param array<string, mixed> $data",
                    "shapes": [
                        "@param array<string, mixed> $data"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "rest",
                    "static": false,
                    "visibility": "private",
                    "signature": "rest(string $prefix, int $id, Minn\\Http\\Request $request, ?Minn\\Content\\PostRecord $before): void",
                    "doc": "One of the two REST insert actions, with the post as it stands and the request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 161,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "wpPost",
                    "static": true,
                    "visibility": "private",
                    "signature": "wpPost(?Minn\\Content\\PostRecord $post): ?WP_Post",
                    "doc": "A record as the runtime's post object, for a state the database no longer holds.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 183,
                    "end": 186
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostInsert",
            "short": "PostInsert",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/PostInsert.php",
            "lines": 168,
            "doc": "The decisions behind wp_insert_post: which columns a postarr fills, when\nthe post counts as empty, the status a publish request lands in, the dates\nand the slug, the categories a new post gets. The rows are written by\nContent\\PostWriter; the facade fires the hooks around each step.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostWriter"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Content\\PostWriter $writer, int $userId, Closure $discussion, Closure $supports, Closure $canPublish, Closure $gmtFromDate, Closure $now)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, string): string $discussion a new post's comment or ping status by type, as get_default_comment_status has it",
                    "@param Closure(string, string): bool $supports whether a post type supports a feature",
                    "@param Closure(string): bool $canPublish whether the current user may publish the type",
                    "@param Closure(string): string $gmtFromDate the site-local date as GMT",
                    "@param Closure(bool): string $now the current local (or GMT) MySQL time"
                ],
                "params": [
                    {
                        "name": "writer",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "userId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "discussion",
                        "type": "Closure",
                        "shape": "Closure(string, string): string",
                        "default": null,
                        "doc": "a new post's comment or ping status by type, as get_default_comment_status has it"
                    },
                    {
                        "name": "supports",
                        "type": "Closure",
                        "shape": "Closure(string, string): bool",
                        "default": null,
                        "doc": "whether a post type supports a feature"
                    },
                    {
                        "name": "canPublish",
                        "type": "Closure",
                        "shape": "Closure(string): bool",
                        "default": null,
                        "doc": "whether the current user may publish the type"
                    },
                    {
                        "name": "gmtFromDate",
                        "type": "Closure",
                        "shape": "Closure(string): string",
                        "default": null,
                        "doc": "the site-local date as GMT"
                    },
                    {
                        "name": "now",
                        "type": "Closure",
                        "shape": "Closure(bool): string",
                        "default": null,
                        "doc": "the current local (or GMT) MySQL time"
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 29
            },
            "cases": [],
            "constants": [
                {
                    "name": "COLUMNS",
                    "value": "array (   0 => 'post_author',   1 => 'post_date',   2 => 'post_date_gmt',   3 => 'post_content',   4 => 'post_title',   5 => 'post_excerpt',   6 => 'post_status',   7 => 'comment_status',   8 => 'ping_status',   9 => 'post_password',   10 => 'post_name',   11 => 'to_ping',   12 => 'pinged',   13 => 'post_modified',   14 => 'post_modified_gmt',   15 => 'post_content_filtered',   16 => 'post_parent',   17 => 'guid',   18 => 'menu_order',   19 => 'post_type',   20 => 'post_mime_type', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "writer",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "userId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "discussion",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "supports",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "canPublish",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "gmtFromDate",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "now",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "columns",
                    "static": false,
                    "visibility": "public",
                    "signature": "columns(array $postarr, ?array $existing): array",
                    "doc": "The columns the posts table takes, filled from a postarr, with a new post's defaults. @param array<string, mixed>|null $existing @return array<string, string>",
                    "shapes": [
                        "@param array<string, mixed>|null $existing @return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "postarr",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": "@return array<string, string>"
                        }
                    ],
                    "line": 32,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "isEmpty",
                    "static": false,
                    "visibility": "public",
                    "signature": "isEmpty(array $columns, ?array $existing): bool",
                    "doc": "A post with nothing in title, content, and excerpt is empty when its type supports all three. @param array<string, mixed>|null $existing",
                    "shapes": [
                        "@param array<string, mixed>|null $existing"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "resolve",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolve(array $columns, ?array $existing): array",
                    "doc": "The columns as they will be written: the status a request lands in\n(attachments inherit, unprivileged publishes pend, a future date\nschedules), the dates, the slug (sanitized; not yet free), and the\ninteger columns.",
                    "shapes": [
                        "@param array<string, mixed>|null $existing",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 140
                },
                {
                    "routes": [],
                    "name": "persist",
                    "static": false,
                    "visibility": "public",
                    "signature": "persist(array $columns, ?int $existingId, Closure $guid): int",
                    "doc": "Writes the resolved columns; a new post without a guid gets the ?p= form. @return int the post id",
                    "shapes": [],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existingId",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "guid",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "categories",
                    "static": true,
                    "visibility": "public",
                    "signature": "categories(array $postarr, string $type, string $status, bool $update, array $taxonomies, int $default): ?array",
                    "doc": "The categories a saved post should carry: the ones given, or the\ndefault for a new post of a type that has categories; null when\nnothing should change.",
                    "shapes": [
                        "@param list<string> $taxonomies the type's taxonomies",
                        "@return list<int>|null"
                    ],
                    "params": [
                        {
                            "name": "postarr",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "update",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the type's taxonomies"
                        },
                        {
                            "name": "default",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "type",
                    "static": false,
                    "visibility": "private",
                    "signature": "type(array $columns, ?array $existing): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 182
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostLinks",
            "short": "PostLinks",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostLinks.php",
            "lines": 151,
            "doc": "Post addresses as the reference's link functions build them (probe\npermalinks): a post through pre_post_link (the structure) and post_link;\na page from get_page_uri through _get_page_link and page_link; an\nattachment under its parent's address, or its own; a plugin's type by\nits address pattern (the permastruct its rewrite registered) through\npost_type_link, by its query var without one. Plain (?p=, ?page_id=,\n?post_type=) unless its status is public, or private and readable by\nwhoever asks, or it is a sample: a draft, a scheduled or trashed post, a\nrevision, a private one a visitor asks for. \"Leaving the name\" keeps the slug as its placeholder\n(%postname%, %pagename%, %{type}%) for an editor to fill in, and\nget_sample_permalink shows a draft as it would be published.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Url"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "LEAVE_NAME",
                    "value": "1",
                    "doc": "The slug kept as its placeholder.",
                    "visibility": "public"
                },
                {
                    "name": "SAMPLE",
                    "value": "2",
                    "doc": "The address an editor previews: a draft as if published.",
                    "visibility": "public"
                },
                {
                    "name": "UNPUBLISHED",
                    "value": "array (   0 => 'draft',   1 => 'pending',   2 => 'auto-draft',   3 => 'future', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "post",
                    "static": true,
                    "visibility": "public",
                    "signature": "post(WP_Post $post, int $flags): string",
                    "doc": "A post's address (not a page, attachment or plugin type).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": true,
                    "visibility": "public",
                    "signature": "page(WP_Post $post, int $flags): string",
                    "doc": "A page's own address, before page_link: ?page_id= while unpublished, its tag when the name is left, else its path.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "attachment",
                    "static": true,
                    "visibility": "public",
                    "signature": "attachment(WP_Post $post, int $flags): string",
                    "doc": "An attachment's address: under a parent it belongs to, else its own slug, else ?attachment_id=.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "custom",
                    "static": true,
                    "visibility": "public",
                    "signature": "custom(WP_Post $post, int $flags): string",
                    "doc": "A plugin type's address by its pattern, by its query var, or by the type and id plainly.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "sample",
                    "static": true,
                    "visibility": "public",
                    "signature": "sample(WP_Post $post, ?string $title, ?string $name): array",
                    "doc": "The address an editor shows with the slug to edit: the post as if\npublished, its name made unique, the address with the name left,\na page's parents written in.",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "tokens",
                    "static": true,
                    "visibility": "private",
                    "signature": "tokens(WP_Post $post, int $flags): array",
                    "doc": "What each structure tag of a post stands for; the name stays a tag when it is left.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "category",
                    "static": true,
                    "visibility": "private",
                    "signature": "category(WP_Post $post): string",
                    "doc": "The %category% part: the post's first category by id (post_link_category may choose another), under its parents.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "plain",
                    "static": true,
                    "visibility": "private",
                    "signature": "plain(WP_Post $post, int $flags): bool",
                    "doc": "Whether a post's address is the plain one: its status neither public\nnor private and readable, unless it is a sample of a status that is\nnot internal (a trashed post and a revision stay plain as samples).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 142
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostLookup",
            "short": "PostLookup",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/PostLookup.php",
            "lines": 134,
            "doc": "The post reads plugin code asks for by shape: a page by title, revisions, counts.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 12,
                "end": 14
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "idByTitle",
                    "static": false,
                    "visibility": "public",
                    "signature": "idByTitle(string $title, array $types): ?int",
                    "doc": "The id of a post with this title among the types, or null.",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "title",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "revisionsOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "revisionsOf(int $postId): array",
                    "doc": "Revision rows newest first. @return list<array<string, mixed>>",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "countByStatus",
                    "static": false,
                    "visibility": "public",
                    "signature": "countByStatus(string $type): array",
                    "doc": "How many posts of a type there are per status.",
                    "shapes": [
                        "@return array<string, int> status => count"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "countAttachments",
                    "static": false,
                    "visibility": "public",
                    "signature": "countAttachments(): array",
                    "doc": "How many attachments there are per mime type.",
                    "shapes": [
                        "@return array<string, int> mime type => count, plus 'trash'"
                    ],
                    "params": [],
                    "line": 55,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "countByAuthor",
                    "static": false,
                    "visibility": "public",
                    "signature": "countByAuthor(int $userId, array $types, array $statuses): int",
                    "doc": "How many posts an author has among the types and statuses.",
                    "shapes": [
                        "@param list<string> $types @param list<string> $statuses"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@param list<string> $statuses"
                        },
                        {
                            "name": "statuses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 70,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "countsByAuthors",
                    "static": false,
                    "visibility": "public",
                    "signature": "countsByAuthors(array $userIds, array $types, array $statuses): array",
                    "doc": "Post counts for several authors at once, as stored (strings), for\nthose that have any.",
                    "shapes": [
                        "@param list<int> $userIds",
                        "@param list<string> $types",
                        "@param list<string> $statuses",
                        "@return array<int, string>"
                    ],
                    "params": [
                        {
                            "name": "userIds",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "statuses",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "publishingAuthors",
                    "static": false,
                    "visibility": "public",
                    "signature": "publishingAuthors(string $type, int $limit): int",
                    "doc": "How many authors (up to a limit) have published posts of a type, for is_multi_author.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "limit",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "countsByAuthor",
                    "static": false,
                    "visibility": "public",
                    "signature": "countsByAuthor(array $types, array $statuses, int $viewer): array",
                    "doc": "Post counts by author for wp_list_authors: the types' posts in the\nstatuses given, and the private ones of the viewer (an id, or -1 for\nnone) beside them.",
                    "shapes": [
                        "@param list<string> $types @param list<string> $statuses",
                        "@return array<int, int>"
                    ],
                    "params": [
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@param list<string> $statuses"
                        },
                        {
                            "name": "statuses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "viewer",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "idsByAuthor",
                    "static": false,
                    "visibility": "public",
                    "signature": "idsByAuthor(int $userId): array",
                    "doc": "Every post id of an author.",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "attachmentIdByFile",
                    "static": false,
                    "visibility": "public",
                    "signature": "attachmentIdByFile(string $path): ?int",
                    "doc": "The attachment whose stored file path is the given one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 138,
                    "end": 142
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostQuery",
            "short": "PostQuery",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostQuery.php",
            "lines": 394,
            "doc": "WP_Query::get_posts as the reference runs it (probe wp-query-sql): the\nvariables parsed and handed to pre_get_posts, the clauses written piece by\npiece, every filter a plugin may change them through in the reference's\norder (suppress_filters keeps the ones it keeps), the request split into\nan id query when that is cheaper, the count, a single post's status check\nand preview, sticky posts on the home listing, and the results filters.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Db",
                "Minn\\I18n\\Gettext",
                "Minn\\Query\\PostOrder",
                "Minn\\Query\\PostSearch",
                "Minn\\Runtime\\CommentFeedQuery",
                "Minn\\Runtime\\PostQueryParts",
                "Minn\\Runtime\\PostQueryResults",
                "Minn\\Runtime\\PostQueryStatus",
                "Minn\\Runtime\\PostQueryTax",
                "Minn\\Runtime\\PostQueryWhere",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "query",
                    "type": "WP_Query",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "wpdb",
                    "type": "object",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "parts",
                    "type": "Minn\\Runtime\\PostQueryParts",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(WP_Query $query, object $wpdb, mixed $urlSearch): mixed",
                    "doc": "Runs a query object's variables and fills it in: the posts (or ids, or\nid => parent), the request, the counts. Returns what get_posts returns.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpdb",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": "the database object plugins see, so the request runs where their filters expect it"
                        },
                        {
                            "name": "urlSearch",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": "the search string the URL carries, if any (a search from elsewhere is url-decoded)"
                        }
                    ],
                    "line": 37,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "search",
                    "static": false,
                    "visibility": "public",
                    "signature": "search(WP_Query $query, array $q, mixed $urlSearch): string",
                    "doc": "A search's WHERE fragment, settling the search variables (the terms,\nhow many the string split into, the title matches its order ranks by).",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "urlSearch",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 216,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "stopwords",
                    "static": false,
                    "visibility": "public",
                    "signature": "stopwords(): array",
                    "doc": "The search stopwords, translated and filtered. @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 244,
                    "end": 248
                },
                {
                    "routes": [],
                    "name": "prepare",
                    "static": false,
                    "visibility": "private",
                    "signature": "prepare(): void",
                    "doc": "Parses the variables, hands them to pre_get_posts, and reads the meta query from them.",
                    "shapes": [],
                    "params": [],
                    "line": 51,
                    "end": 66
                },
                {
                    "routes": [],
                    "name": "defaults",
                    "static": false,
                    "visibility": "private",
                    "signature": "defaults(array $q): void",
                    "doc": "The defaults get_posts settles before it writes a clause. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "pageSize",
                    "static": false,
                    "visibility": "private",
                    "signature": "pageSize(array $q): void",
                    "doc": "posts_per_page from the option, showposts, an archive's own size or the feed's, and nopaging. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 149
                },
                {
                    "routes": [],
                    "name": "clauses",
                    "static": false,
                    "visibility": "private",
                    "signature": "clauses(array $q, mixed $urlSearch): void",
                    "doc": "Writes the clauses, in the reference's order. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "urlSearch",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 183
                },
                {
                    "routes": [],
                    "name": "taxonomies",
                    "static": false,
                    "visibility": "private",
                    "signature": "taxonomies(array $q): void",
                    "doc": "The tax query's clauses (not for a single post), a taxonomy archive's types, and the compatibility variables. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "searchOrder",
                    "static": false,
                    "visibility": "private",
                    "signature": "searchOrder(array $q): void",
                    "doc": "A search's relevance order, ahead of the order asked for, when no other order is asked for. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 251,
                    "end": 266
                },
                {
                    "routes": [],
                    "name": "filtered",
                    "static": false,
                    "visibility": "private",
                    "signature": "filtered(array $q): void",
                    "doc": "The clause filters, paging between the first two and the rest, and posts_selection. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 269,
                    "end": 289
                },
                {
                    "routes": [],
                    "name": "through",
                    "static": false,
                    "visibility": "private",
                    "signature": "through(array $hooks, string $clausesHook): void",
                    "doc": "Each piece through its filter, then all seven through the clauses filter. @param array<string, string> $hooks",
                    "shapes": [
                        "@param array<string, string> $hooks"
                    ],
                    "params": [
                        {
                            "name": "hooks",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clausesHook",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 292,
                    "end": 299
                },
                {
                    "routes": [],
                    "name": "paging",
                    "static": false,
                    "visibility": "private",
                    "signature": "paging(array $q): void",
                    "doc": "LIMIT for a listing that pages: the offset when one is given, the page's start otherwise. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 302,
                    "end": 315
                },
                {
                    "routes": [],
                    "name": "execute",
                    "static": false,
                    "visibility": "private",
                    "signature": "execute(array $q): mixed",
                    "doc": "Writes the request, runs it (or takes posts_pre_query's answer), and finishes the results. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 318,
                    "end": 350
                },
                {
                    "routes": [],
                    "name": "idsOnly",
                    "static": false,
                    "visibility": "private",
                    "signature": "idsOnly(array $q): array",
                    "doc": "The ids (or id => parent) a query for them returns. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 353,
                    "end": 372
                },
                {
                    "routes": [],
                    "name": "select",
                    "static": false,
                    "visibility": "private",
                    "signature": "select(array $q, string $old, string $foundRows): void",
                    "doc": "Runs the request: ids first, then their posts, when the query can be split that way. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "old",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "foundRows",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 375,
                    "end": 393
                },
                {
                    "routes": [],
                    "name": "foundPosts",
                    "static": false,
                    "visibility": "private",
                    "signature": "foundPosts(array $q): void",
                    "doc": "found_posts (from FOUND_ROWS() when the query paged, else the posts' count) and max_num_pages. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 396,
                    "end": 412
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostQueryParts",
            "short": "PostQueryParts",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostQueryParts.php",
            "lines": 56,
            "doc": "The pieces of one WP_Query run as the reference builds them and hands\nthem to filters. The seven clause pieces stay untyped: a filter may hand\nback anything, and the request is written from whatever it handed back.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\CommentFeedQuery",
                "Minn\\Runtime\\PostQuery",
                "Minn\\Runtime\\PostQueryResults",
                "Minn\\Runtime\\PostQueryStatus",
                "Minn\\Runtime\\PostQueryWhere"
            ],
            "constructor": {
                "signature": "__construct(string $table)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "table",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 37,
                "end": 39
            },
            "cases": [],
            "constants": [
                {
                    "name": "PIECES",
                    "value": "array (   0 => 'where',   1 => 'groupby',   2 => 'join',   3 => 'orderby',   4 => 'distinct',   5 => 'fields',   6 => 'limits', )",
                    "doc": "The pieces posts_clauses and posts_clauses_request see, in their order.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "where",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "groupby",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "join",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "orderby",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "distinct",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "fields",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "limits",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "search",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "whichauthor",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "whichmimetype",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "statusJoin",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "Whether an attachment's status follows its parent's (a taxonomy archive's attachments).",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "page",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "postType",
                    "type": "mixed",
                    "readonly": false,
                    "static": false,
                    "doc": "The post type the query settles on: a name, a list, `any`, or empty.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "typeObject",
                    "type": "?WP_Post_Type",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "typeCap",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "statuses",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "The statuses asked for by name, which a single post's status check lets through. @var list<string>",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "table",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "pieces",
                    "static": false,
                    "visibility": "public",
                    "signature": "pieces(): array",
                    "doc": "The seven pieces by name. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 42,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "take",
                    "static": false,
                    "visibility": "public",
                    "signature": "take(array $clauses): void",
                    "doc": "Takes back the pieces a clauses filter returned; one it dropped becomes empty. @param array<array-key, mixed> $clauses",
                    "shapes": [
                        "@param array<array-key, mixed> $clauses"
                    ],
                    "params": [
                        {
                            "name": "clauses",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "request",
                    "static": false,
                    "visibility": "public",
                    "signature": "request(string $foundRows, mixed $fields): string",
                    "doc": "The SELECT as the reference writes it, line breaks and all, for the given field list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "foundRows",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 66
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostQueryResults",
            "short": "PostQueryResults",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostQueryResults.php",
            "lines": 113,
            "doc": "What WP_Query does with its posts once it has them, as the reference does\nit (probe wp-query-sql): a single post whose status is not public is\ndropped unless the reader may see it (a draft its editor may preview, with\nthe_preview); sticky posts move to the front of the home listing's first\npage, the ones it did not find fetched by a nested query; the_posts; and\nthe post objects, count and current post set.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\PostQueryParts",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\PostQuery"
            ],
            "constructor": {
                "signature": "__construct(WP_Query $query, Minn\\Runtime\\PostQueryParts $parts)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "query",
                        "type": "WP_Query",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parts",
                        "type": "Minn\\Runtime\\PostQueryParts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 17,
                "end": 19
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "query",
                    "type": "WP_Query",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "parts",
                    "type": "Minn\\Runtime\\PostQueryParts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "settle",
                    "static": false,
                    "visibility": "public",
                    "signature": "settle(array $q): void",
                    "doc": "Settles the posts a query found: status check, stickies, the_posts, then the count and the current post. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "singleStatus",
                    "static": false,
                    "visibility": "private",
                    "signature": "singleStatus(): void",
                    "doc": "A single post the reader may not see is dropped; a draft its editor may edit is a preview.",
                    "shapes": [],
                    "params": [],
                    "line": 43,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "visible",
                    "static": false,
                    "visibility": "private",
                    "signature": "visible(string|false $status): bool",
                    "doc": "Whether the reader may see the first post in its status (a draft they may edit becomes a preview, dated now).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "status",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 90
                },
                {
                    "routes": [],
                    "name": "stickies",
                    "static": false,
                    "visibility": "private",
                    "signature": "stickies(array $q): void",
                    "doc": "Sticky posts to the front of the home listing's first page; those it did not find, fetched. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 126
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostQueryStatus",
            "short": "PostQueryStatus",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostQueryStatus.php",
            "lines": 165,
            "doc": "WP_Query's post type and status clause as the reference writes it (probe\nwp-query-sql). Statuses asked for by name: the type clause, then the\nstatuses (any, less those excluded from search; private kept apart when\nthe query asks for readable posts; the user's own when they may not read\nor edit others'; an attachment's parent's status for a taxonomy archive).\nNone asked for, on a listing: each queried type, sorted, with its public\nstatuses, the admin list's protected ones in the admin, and private ones\nthe signed-in user may read. A single post: the type clause alone.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Query\\Sql",
                "Minn\\Runtime\\PostQueryParts"
            ],
            "usedBy": [
                "Minn\\Runtime\\PostQuery"
            ],
            "constructor": {
                "signature": "__construct(WP_Query $query, Minn\\Runtime\\PostQueryParts $parts)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "query",
                        "type": "WP_Query",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parts",
                        "type": "Minn\\Runtime\\PostQueryParts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 23
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "query",
                    "type": "WP_Query",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "parts",
                    "type": "Minn\\Runtime\\PostQueryParts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "settleType",
                    "static": false,
                    "visibility": "public",
                    "signature": "settleType(): void",
                    "doc": "Settles the post type the caps come from: a list of several types has\nnone (its caps are named for multiple_post_type), any other names one.",
                    "shapes": [],
                    "params": [],
                    "line": 29,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "append",
                    "static": false,
                    "visibility": "public",
                    "signature": "append(array $q): void",
                    "doc": "Appends the type and status clause. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "typeWhere",
                    "static": false,
                    "visibility": "private",
                    "signature": "typeWhere(): array",
                    "doc": "The type clause, and whether there are no searchable types to give statuses to. @return array{0: string, 1: bool}",
                    "shapes": [
                        "@return array{0: string, 1: bool}"
                    ],
                    "params": [],
                    "line": 62,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "cap",
                    "static": false,
                    "visibility": "private",
                    "signature": "cap(string $which): string",
                    "doc": "The cap a type's object names, or the one its name makes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "which",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "named",
                    "static": false,
                    "visibility": "private",
                    "signature": "named(mixed $asked, mixed $perm): void",
                    "doc": "Statuses asked for by name (or `any`), under the query's perm.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "asked",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perm",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "listing",
                    "static": false,
                    "visibility": "private",
                    "signature": "listing(): void",
                    "doc": "A listing with no statuses asked for: each type with the statuses its reader may see.",
                    "shapes": [],
                    "params": [],
                    "line": 139,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "privateStatuses",
                    "static": false,
                    "visibility": "private",
                    "signature": "privateStatuses(string $type): string",
                    "doc": "The private statuses a signed-in user sees in a type: all of them with the cap to read them, their own otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 182
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostQueryTax",
            "short": "PostQueryTax",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostQueryTax.php",
            "lines": 193,
            "doc": "The taxonomy side of WP_Query as the reference runs it (probe\nwp-query-sql): the clauses its variables make (tax_query, taxonomy and\nterm, each taxonomy's query var, cat and the category__ lists, tag and the\ntag__ lists), settled back into the variables; the post types a taxonomy\narchive with no type searches; and the cat, category_name, tag_id,\ntaxonomy and term variables set from the terms queried.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\TermFields"
            ],
            "usedBy": [
                "Minn\\Runtime\\PostQuery"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "clauses",
                    "static": true,
                    "visibility": "public",
                    "signature": "clauses(WP_Query $query, array $q): array",
                    "doc": "The tax query a set of variables makes, settling the variables it reads.",
                    "shapes": [
                        "@param array<string, mixed> $q",
                        "@return list<array<string, mixed>>|array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "postTypes",
                    "static": true,
                    "visibility": "public",
                    "signature": "postTypes(array $taxonomies): array|string",
                    "doc": "The post types a taxonomy archive with no type searches: every\nsearchable type the queried taxonomies are registered for, one as a\nstring, several sorted, none as `any`.",
                    "shapes": [
                        "@param list<string> $taxonomies",
                        "@return string|list<string>"
                    ],
                    "params": [
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "compat",
                    "static": true,
                    "visibility": "public",
                    "signature": "compat(WP_Query $query, array $q, array $queried): void",
                    "doc": "The compatibility variables the queried terms set: taxonomy and term\n(or term_id) from the first taxonomy other than category and post_tag\nwhen none is set, and cat, category_name and tag_id from those two.",
                    "shapes": [
                        "@param array<string, array{terms?: list<mixed>, field?: string}> $queried"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "queried",
                            "type": "array",
                            "shape": "array<string, array{terms?: list<mixed>, field?: string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "queryVar",
                    "static": true,
                    "visibility": "private",
                    "signature": "queryVar(array $q, string $name, object $taxonomy): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "cat",
                    "static": true,
                    "visibility": "private",
                    "signature": "cat(array $q): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "categoryLists",
                    "static": true,
                    "visibility": "private",
                    "signature": "categoryLists(array $q): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "tag",
                    "static": true,
                    "visibility": "private",
                    "signature": "tag(array $q): void",
                    "doc": "The tag variable as tag_slug__in or tag_slug__and.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "tagLists",
                    "static": true,
                    "visibility": "private",
                    "signature": "tagLists(array $q): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 146
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostQueryWhere",
            "short": "PostQueryWhere",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostQueryWhere.php",
            "lines": 264,
            "doc": "The WHERE fragments WP_Query writes from its variables, in the reference's\norder and spacing (probe wp-query-sql): menu order, the legacy m date and\nthe date variables, a slug or a page path, ids, parents, a page id (which\nreplaces everything before it), authors, comment counts, mime types,\npasswords, and comment and ping status. Each appends to the parts it is\nhanded and settles the variables it reads, as the reference leaves them.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Query\\Sql",
                "Minn\\Runtime\\PostQueryParts",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\PostQuery"
            ],
            "constructor": {
                "signature": "__construct(WP_Query $query, Minn\\Runtime\\PostQueryParts $parts, string $table)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "query",
                        "type": "WP_Query",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parts",
                        "type": "Minn\\Runtime\\PostQueryParts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "table",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 23
            },
            "cases": [],
            "constants": [
                {
                    "name": "LEGACY_DATE",
                    "value": "array (   4 => 'MONTH',   6 => 'DAYOFMONTH',   8 => 'HOUR',   10 => 'MINUTE',   12 => 'SECOND', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "query",
                    "type": "WP_Query",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "parts",
                    "type": "Minn\\Runtime\\PostQueryParts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "table",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "dates",
                    "static": false,
                    "visibility": "public",
                    "signature": "dates(array $q): void",
                    "doc": "Menu order, the m date, the date variables and the date_query. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "names",
                    "static": false,
                    "visibility": "public",
                    "signature": "names(array $q): void",
                    "doc": "The post a slug, a page path, an attachment slug, a name list, an id or\nan id list names, and the parent; a post type's query var stands for\nthe name (the page path, for a hierarchical type).",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "authors",
                    "static": false,
                    "visibility": "public",
                    "signature": "authors(array $q): void",
                    "doc": "Authors (an author list's negatives become author__not_in, which wins\nover author__in), an author slug, a comment count, and mime types. The\nslug and mime clauses wait to follow the search.",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "access",
                    "static": false,
                    "visibility": "public",
                    "signature": "access(array $q): void",
                    "doc": "A password, or whether there is one, and comment and ping status. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 262,
                    "end": 279
                },
                {
                    "routes": [],
                    "name": "nameList",
                    "static": false,
                    "visibility": "private",
                    "signature": "nameList(array $q, array $names): void",
                    "doc": "A name list, sanitized in place; the clause lists each name once, sorted. @param array<string, mixed> $q @param list<mixed> $names",
                    "shapes": [
                        "@param array<string, mixed> $q @param list<mixed> $names"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<mixed> $names"
                        },
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "typeQueryVar",
                    "static": false,
                    "visibility": "private",
                    "signature": "typeQueryVar(array $q): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "pagename",
                    "static": false,
                    "visibility": "private",
                    "signature": "pagename(array $q): void",
                    "doc": "A page path: the page it finds (in a hierarchical type queried), unless it is the posts page. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": false,
                    "visibility": "private",
                    "signature": "ids(array $q): void",
                    "doc": "An id or an id list, the parent or a parent list, and a page id that replaces all before it. @param array<string, mixed> $q",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 158,
                    "end": 189
                },
                {
                    "routes": [],
                    "name": "authorName",
                    "static": false,
                    "visibility": "private",
                    "signature": "authorName(array $q): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 243
                },
                {
                    "routes": [],
                    "name": "commentCount",
                    "static": false,
                    "visibility": "private",
                    "signature": "commentCount(array $q): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $q"
                    ],
                    "params": [
                        {
                            "name": "q",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 246,
                    "end": 259
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostRevisions",
            "short": "PostRevisions",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostRevisions.php",
            "lines": 67,
            "doc": "A post's revisions as the reference's wp_save_post_revision keeps them\n(probe revisions): only for a type that supports revisions and while\nwp_revisions_to_keep allows any; compared with the latest revision\n(wp_save_post_revision_check_for_changes, the revision fields with their\nwhitespace evened out, wp_save_post_revision_post_has_changed, whose\ndefault also compares the revisioned meta); saved through wp_insert_post\nand _wp_put_post_revision (whose default copies the revisioned meta);\nthen the oldest dropped past the limit, after\nwp_save_post_revision_revisions_before_deletion.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "save",
                    "static": true,
                    "visibility": "public",
                    "signature": "save(WP_Post $post): ?int",
                    "doc": "The new revision's id, or null when none was called for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "put",
                    "static": true,
                    "visibility": "public",
                    "signature": "put(array $data): ?int",
                    "doc": "The revision (or autosave) row _wp_post_revision_data made, written\nthrough wp_insert_post, then _wp_put_post_revision; its id.",
                    "shapes": [
                        "@param array<string, mixed> $data"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "changed",
                    "static": true,
                    "visibility": "private",
                    "signature": "changed(WP_Post $latest, WP_Post $post): bool",
                    "doc": "Whether the post differs from its latest revision in the revision fields, or a plugin says so.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "latest",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 44,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "prune",
                    "static": true,
                    "visibility": "private",
                    "signature": "prune(WP_Post $post): void",
                    "doc": "The oldest revisions past wp_revisions_to_keep removed (autosaves stay).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 85
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\PostSave",
            "short": "PostSave",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/PostSave.php",
            "lines": 253,
            "doc": "A REST save's columns through the filters the reference's save runs\nbefore it writes, in its order (probe post-insert-filters,\ncontracts/runtime.md \"Saves plugins can change\"): rest_pre_insert_{type}\nover the prepared post; every column through its db context\n(pre_post_* and *_save_pre, where kses and the custom-CSS strip sit) on\nslashed text; wp_insert_post_empty_content, which refuses a post with no\ncontent, title or excerpt; wp_insert_post_parent; for a post that is live,\nthe slug, made again from the filtered title when the request gave none,\nthrough pre_wp_unique_post_slug, the bad-slug check and\nwp_unique_post_slug; and wp_insert_post_data over the row. What a filter\nchanges is written. Without plugins loaded the columns are as given.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\PostSlugs",
                "Minn\\Http\\Request",
                "Minn\\RestError",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\PostsWriteController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DATA",
                    "value": "array (   0 => 'post_author',   1 => 'post_date',   2 => 'post_date_gmt',   3 => 'post_content',   4 => 'post_content_filtered',   5 => 'post_title',   6 => 'post_excerpt',   7 => 'post_status',   8 => 'post_type',   9 => 'comment_status',   10 => 'ping_status',   11 => 'post_password',   12 => 'post_name',   13 => 'to_ping',   14 => 'pinged',   15 => 'post_modified',   16 => 'post_modified_gmt',   17 => 'post_parent',   18 => 'menu_order',   19 => 'post_mime_type',   20 => 'guid', )",
                    "doc": "The row wp_insert_post_data is handed, in its keys.",
                    "visibility": "private"
                },
                {
                    "name": "FIELDS",
                    "value": "array (   'title' => 'post_title',   'content' => 'post_content',   'excerpt' => 'post_excerpt',   'status' => 'post_status',   'date' => 'post_date',   'date_gmt' => 'post_date_gmt',   'slug' => 'post_name',   'password' => 'post_password',   'author' => 'post_author',   'parent' => 'post_parent',   'menu_order' => 'menu_order',   'comment_status' => 'comment_status',   'ping_status' => 'ping_status', )",
                    "doc": "A REST field and the column it fills in the prepared post.",
                    "visibility": "private"
                },
                {
                    "name": "PREPARED",
                    "value": "array (   'post_title' => 'title',   'post_content' => 'content',   'post_excerpt' => 'excerpt',   'post_type' => NULL,   'post_status' => 'status',   'post_date' => 'date',   'post_date_gmt' => 'date',   'edit_date' => 'date',   'post_name' => 'slug',   'post_author' => 'author',   'post_password' => 'password',   'post_parent' => 'parent',   'menu_order' => 'menu_order',   'comment_status' => 'comment_status',   'ping_status' => 'ping_status', )",
                    "doc": "The prepared post's columns in the reference's order, each with the REST field that sends it (null: always there).",
                    "visibility": "private"
                },
                {
                    "name": "UNSLUGGED",
                    "value": "array (   0 => 'draft',   1 => 'pending',   2 => 'auto-draft', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "PARENT",
                    "value": "'post_parent'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "NEW_POSTARR",
                    "value": "array (   0 => 'ID',   1 => 'post_author',   2 => 'post_date',   3 => 'post_date_gmt',   4 => 'post_content',   5 => 'post_content_filtered',   6 => 'post_title',   7 => 'post_excerpt',   8 => 'post_status',   9 => 'post_type',   10 => 'comment_status',   11 => 'ping_status',   12 => 'post_password',   13 => 'to_ping',   14 => 'pinged',   15 => 'post_parent',   16 => 'menu_order',   17 => 'guid',   18 => 'import_id', )",
                    "doc": "The new post array wp_insert_post_parent is handed beside the whole one.",
                    "visibility": "private"
                },
                {
                    "name": "DEFAULTS",
                    "value": "array (   'post_author' => 0,   'post_content' => '',   'post_content_filtered' => '',   'post_title' => '',   'post_excerpt' => '',   'post_status' => 'draft',   'post_type' => 'post',   'comment_status' => '',   'ping_status' => '',   'post_password' => '',   'to_ping' => '',   'pinged' => '',   'post_parent' => 0,   'menu_order' => 0,   'guid' => '',   'import_id' => 0,   'context' => '',   'post_date' => '',   'post_date_gmt' => '', )",
                    "doc": "wp_insert_post's defaults, in its order (the order its filters run in).",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "filter",
                    "static": true,
                    "visibility": "public",
                    "signature": "filter(array $columns, ?Minn\\Content\\PostRecord $before, array $body, Minn\\Http\\Request $request, string $type, Minn\\Content\\PostSlugs $slugs): array",
                    "doc": "The columns to write after the filters.",
                    "shapes": [
                        "@param array<string, mixed> $columns what the engine settled: a new post's whole row, or an update's changes",
                        "@param array<string, mixed> $body the request's fields",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "what the engine settled: a new post's whole row, or an update's changes"
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the request's fields"
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slugs",
                            "type": "Minn\\Content\\PostSlugs",
                            "shape": "PostSlugs",
                            "default": null,
                            "doc": "the rules a live post's slug is settled by"
                        }
                    ],
                    "line": 56,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "throughSaveFilters",
                    "static": true,
                    "visibility": "public",
                    "signature": "throughSaveFilters(int $id, array $changes): array",
                    "doc": "A direct save's changed columns through every column's db context,\nas an update runs them over the whole post (pre_post_* and\n*_save_pre, where kses and the global styles strip sit): a global\nstyles save writes its post this way (probe global-styles-unfiltered).\nWithout a booted runtime the changes are as given.",
                    "shapes": [
                        "@param array<string, string> $changes column => value",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "changes",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "column => value"
                        }
                    ],
                    "line": 99,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "sanitized",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitized(array $postarr): array",
                    "doc": "wp_insert_post's array with its defaults filled in (ID 0 for a new\npost), through sanitize_post's db context: slashed in, slashed out.",
                    "shapes": [
                        "@param array<string, mixed> $postarr",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "postarr",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "refusesEmpty",
                    "static": true,
                    "visibility": "public",
                    "signature": "refusesEmpty(array $sanitized, string $type): bool",
                    "doc": "wp_insert_post_empty_content over whether a type with an editor, a title and an excerpt has none of them. @param array<string, mixed> $sanitized",
                    "shapes": [
                        "@param array<string, mixed> $sanitized"
                    ],
                    "params": [
                        {
                            "name": "sanitized",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "parent",
                    "static": true,
                    "visibility": "public",
                    "signature": "parent(array $sanitized, int $id): int",
                    "doc": "The parent through wp_insert_post_parent (whose default refuses a loop). @param array<string, mixed> $sanitized",
                    "shapes": [
                        "@param array<string, mixed> $sanitized"
                    ],
                    "params": [
                        {
                            "name": "sanitized",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "slugFilters",
                    "static": true,
                    "visibility": "public",
                    "signature": "slugFilters(string $slug, int $id, string $status, string $type, int $parent, Minn\\Content\\PostSlugs $slugs): string",
                    "doc": "A live post's slug through the reference's three filters:\npre_wp_unique_post_slug may settle it; otherwise it is made free in\nits type's scope, the bad-slug filter judging the slug asked for when\nnothing else has taken it; and wp_unique_post_slug has the last word.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slugs",
                            "type": "Minn\\Content\\PostSlugs",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 166
                },
                {
                    "routes": [],
                    "name": "guidAndSlug",
                    "static": true,
                    "visibility": "public",
                    "signature": "guidAndSlug(array $columns, int $postId, string $type, Minn\\Content\\PostSlugs $slugs): array",
                    "doc": "The row's guid and slug as wp_insert_post settles them (probe\ninsert-defaults): an update keeps the guid it had, in its display\nform, ignoring a new one asked for; a live post's slug goes through\nthe slug filters.",
                    "shapes": [
                        "@param array<string, string> $columns",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slugs",
                            "type": "Minn\\Content\\PostSlugs",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 177,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "keepsSlug",
                    "static": true,
                    "visibility": "public",
                    "signature": "keepsSlug(string $status, string $type): bool",
                    "doc": "Whether a save leaves the slug as it is: a draft, a pending post, an auto-draft, a revision, a personal data request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "status",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 188,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "data",
                    "static": true,
                    "visibility": "public",
                    "signature": "data(array $row, array $sanitized, array $unsanitized, int $postId): array",
                    "doc": "The row through wp_insert_post_data (wp_insert_attachment_data for an\nattachment), handed slashed as the reference hands it and unslashed\nback.",
                    "shapes": [
                        "@param array<string, mixed> $row the row, unslashed",
                        "@param array<string, mixed> $sanitized",
                        "@param array<string, mixed> $unsanitized",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the row, unslashed"
                        },
                        {
                            "name": "sanitized",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "unsanitized",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": "the post an update saves, 0 for a new one"
                        }
                    ],
                    "line": 204,
                    "end": 209
                },
                {
                    "routes": [],
                    "name": "stored",
                    "static": true,
                    "visibility": "private",
                    "signature": "stored(int $id): array",
                    "doc": "The post as stored, its columns by name. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "prepared",
                    "static": true,
                    "visibility": "private",
                    "signature": "prepared(array $columns, ?Minn\\Content\\PostRecord $before, array $body, Minn\\Http\\Request $request, string $type): array",
                    "doc": "rest_pre_insert_{type} over the prepared post, built as the\nreference's controller builds it: its id when it edits, the fields\nthe request named in the reference's order, the type always, both\ndates and edit_date when either date was sent, page_template null.\nrest_block_hooks_post_types sees it first. What\nthe filter changes or adds is kept; an error refuses the save.",
                    "shapes": [
                        "@param array<string, mixed> $columns",
                        "@param array<string, mixed> $body",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 223,
                    "end": 256
                },
                {
                    "routes": [],
                    "name": "changed",
                    "static": true,
                    "visibility": "private",
                    "signature": "changed(array $columns, array $data, ?Minn\\Content\\PostRecord $before): array",
                    "doc": "The columns to write: a new post's whole row as the filters left it;\nan update's own changes plus whatever a filter changed from the row.",
                    "shapes": [
                        "@param array<string, mixed> $columns",
                        "@param array<string, mixed> $data",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "before",
                            "type": "?Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 266,
                    "end": 278
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\QueriedObject",
            "short": "QueriedObject",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/QueriedObject.php",
            "lines": 70,
            "doc": "Which object a query is \"about\", read from its flags and variables: a term\n(by id or slug), a post type, the posts page, the current post, or an\nauthor. The caller materialises the record; this only decides where to look.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\QueryFlags",
                "Minn\\Runtime\\Registry"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $kind, string $field = '', string|int $value = '', string $taxonomy = '')",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "kind",
                        "type": "string",
                        "shape": "'term'|'post_type'|'posts_page'|'post'|'author'|'none'",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "field",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": "'id' or 'slug' (terms, authors); 'name' for a post type"
                    },
                    {
                        "name": "value",
                        "type": "string|int",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    },
                    {
                        "name": "taxonomy",
                        "type": "string",
                        "shape": "",
                        "default": "''",
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 18,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "kind",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "field",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "value",
                    "type": "string|int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "taxonomy",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "locate",
                    "static": true,
                    "visibility": "public",
                    "signature": "locate(array $vars, array $flags, Minn\\Runtime\\Registry $registry, callable $option): self",
                    "doc": "The queried object the query vars and flags point at.",
                    "shapes": [
                        "@param array<string, mixed> $vars",
                        "@param array<string, bool> $flags the query's is_* flags",
                        "@param callable(string): mixed $option a filtered option read"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "flags",
                            "type": "array",
                            "shape": "array<string, bool>",
                            "default": null,
                            "doc": "the query's is_* flags"
                        },
                        {
                            "name": "registry",
                            "type": "Minn\\Runtime\\Registry",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "option",
                            "type": "callable",
                            "shape": "callable(string): mixed",
                            "default": null,
                            "doc": "a filtered option read"
                        }
                    ],
                    "line": 29,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "taxonomyTerm",
                    "static": true,
                    "visibility": "private",
                    "signature": "taxonomyTerm(array $vars, Minn\\Runtime\\Registry $registry): self",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registry",
                            "type": "Minn\\Runtime\\Registry",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 80
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\QueryFlags",
            "short": "QueryFlags",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/QueryFlags.php",
            "lines": 197,
            "doc": "The conditional flags a set of query variables implies (is_single, is_archive,\nis_home, ...), derived the way the reference's parse step derives them, plus\nthe variables after the integer casts that step applies.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Registry"
            ],
            "usedBy": [
                "Minn\\Runtime\\QueriedObject"
            ],
            "constructor": {
                "signature": "__construct(array $vars, array $flags)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed> $vars",
                    "@param array<string, bool> $flags only the flags that are on"
                ],
                "params": [
                    {
                        "name": "vars",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "flags",
                        "type": "array",
                        "shape": "array<string, bool>",
                        "default": null,
                        "doc": "only the flags that are on"
                    }
                ],
                "visibility": "private",
                "line": 20,
                "end": 22
            },
            "cases": [],
            "constants": [
                {
                    "name": "INTEGER_VARS",
                    "value": "array (   0 => 'p',   1 => 'page_id',   2 => 'attachment_id',   3 => 'year',   4 => 'monthnum',   5 => 'day',   6 => 'w',   7 => 'paged', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "vars",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "flags",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "fill",
                    "static": true,
                    "visibility": "public",
                    "signature": "fill(array $vars, Minn\\Runtime\\Registry $registry): array",
                    "doc": "The variables with every one the reference fills given its empty\nvalue: the template's keys up to search_columns (the ones after it are\nget_posts' own, settled when the query runs).",
                    "shapes": [
                        "@param array<string, mixed> $vars",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registry",
                            "type": "Minn\\Runtime\\Registry",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "derive",
                    "static": true,
                    "visibility": "public",
                    "signature": "derive(array $vars, Minn\\Runtime\\Registry $registry, callable $option, array $asked): self",
                    "doc": "The is_* flags the query vars amount to.",
                    "shapes": [
                        "@param array<string, mixed> $vars the filled query variables",
                        "@param callable(string): mixed $option a filtered option read",
                        "@param array<string, mixed> $asked the query as it was given, before filling (a search is one that named s)"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the filled query variables"
                        },
                        {
                            "name": "registry",
                            "type": "Minn\\Runtime\\Registry",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "option",
                            "type": "callable",
                            "shape": "callable(string): mixed",
                            "default": null,
                            "doc": "a filtered option read"
                        },
                        {
                            "name": "asked",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the query as it was given, before filling (a search is one that named s)"
                        }
                    ],
                    "line": 52,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "customTaxonomyVar",
                    "static": true,
                    "visibility": "public",
                    "signature": "customTaxonomyVar(array $vars, Minn\\Runtime\\Registry $registry): ?array",
                    "doc": "The first registered taxonomy (other than the two built-in ones) whose\nquery variable carries a value, as [taxonomy name, query var].",
                    "shapes": [
                        "@return array{0: string, 1: string}|null"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registry",
                            "type": "Minn\\Runtime\\Registry",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "private",
                    "signature": "sanitize(array $vars): array",
                    "doc": "The reference's clean-up of the free-form variables: m and the time\nparts to digits, cat and author to id lists, names trimmed, an\nover-long or non-scalar search dropped.",
                    "shapes": [
                        "@param array<string, mixed> $vars",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "archiveFlags",
                    "static": true,
                    "visibility": "private",
                    "signature": "archiveFlags(array $vars, Minn\\Runtime\\Registry $registry): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, bool>"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registry",
                            "type": "Minn\\Runtime\\Registry",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 190
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Recovery",
            "short": "Recovery",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/Recovery.php",
            "lines": 234,
            "doc": "Recovery from a fatal in someone else's code. When a plugin or theme\nkills the boot of a request, the file it died in names it; a second\nsuch failure inside ten minutes records it as paused, and the next\nrequest loads without it: the site comes back on its own instead of\nstaying down until a human reads the log. One failure is only noted:\na pause is a site-wide decision, and a single request can be a\ncrafted one. Failures after boot (a route, a template) never pause\nanything; see Failure::armRecovery().\n\nThe paused list is stored where WordPress stores it, in the same shape\n(`paused_plugins` keyed by plugin file, `paused_themes` by stylesheet,\neach holding type, file, line and message), so a site that ejects back\nto WordPress finds the pause it left with. The strikes live in the\nengine's own `minn_recovery_strikes` option.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Json",
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\MinnCommand",
                "Minn\\Engine",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\Plugins"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, string $contentDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "contentDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 35,
                "end": 37
            },
            "cases": [],
            "constants": [
                {
                    "name": "PLUGINS_OPTION",
                    "value": "'paused_plugins'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "THEMES_OPTION",
                    "value": "'paused_themes'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "STRIKES_OPTION",
                    "value": "'minn_recovery_strikes'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "WINDOW",
                    "value": "600",
                    "doc": "Seconds inside which a second boot failure pauses the extension.",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "contentDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "blame",
                    "static": false,
                    "visibility": "public",
                    "signature": "blame(string $file, array $realpaths = array ( ), ?array $active = NULL): ?array",
                    "doc": "The extension a file belongs to: a plugin as the active `folder/file.php`\nwhose folder holds the file (or the bare file of a single-file plugin),\na theme as its slug. The name is the one the loader checks against the\npaused list, so a fatal deep inside a plugin's subfolders pauses the\nplugin and not a folder nothing is called by. Anything outside the\nplugin and theme folders belongs to nobody, and is never paused: a\nfatal in the engine or in core is not a plugin's fault and pausing\nsomething would not fix it. A symlinked plugin reports its real\nlocation; the realpath map (real folder to the folder under plugins/)\nbrings it home first.",
                    "shapes": [
                        "@param array<string, string> $realpaths",
                        "@param list<string>|null $active the active plugin files; read from the site when omitted",
                        "@return array{kind: 'plugin'|'theme', name: string}|null"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "realpaths",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": "array ( )",
                            "doc": ""
                        },
                        {
                            "name": "active",
                            "type": "?array",
                            "shape": "list<string>|null",
                            "default": "NULL",
                            "doc": "the active plugin files; read from the site when omitted"
                        }
                    ],
                    "line": 55,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "pause",
                    "static": false,
                    "visibility": "public",
                    "signature": "pause(array $blamed, array $error): bool",
                    "doc": "Records an extension as paused. Returns false when it was already\npaused, so a caller can tell a fresh failure from a repeat and only\nnotify once.",
                    "shapes": [
                        "@param array{kind: string, name: string} $blamed",
                        "@param array{type: int, file: string, line: int, message: string} $error"
                    ],
                    "params": [
                        {
                            "name": "blamed",
                            "type": "array",
                            "shape": "array{kind: string, name: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "error",
                            "type": "array",
                            "shape": "array{type: int, file: string, line: int, message: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 118,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "strike",
                    "static": false,
                    "visibility": "public",
                    "signature": "strike(array $blamed): bool",
                    "doc": "Notes a boot failure against an extension. True when it is the\nsecond inside the window, which is when the caller pauses it; the\nfirst is only remembered. Strikes older than the window are dropped\nas they are read, so the option never grows.",
                    "shapes": [
                        "@param array{kind: string, name: string} $blamed"
                    ],
                    "params": [
                        {
                            "name": "blamed",
                            "type": "array",
                            "shape": "array{kind: string, name: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "pausedPlugins",
                    "static": false,
                    "visibility": "public",
                    "signature": "pausedPlugins(): array",
                    "doc": "The plugins recovery mode has paused.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 185,
                    "end": 188
                },
                {
                    "routes": [],
                    "name": "pausedThemes",
                    "static": false,
                    "visibility": "public",
                    "signature": "pausedThemes(): array",
                    "doc": "The themes recovery mode has paused.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 195,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "paused",
                    "static": false,
                    "visibility": "public",
                    "signature": "paused(string $kind): array",
                    "doc": "The extensions of one kind ('plugin' or 'theme') recovery has paused.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 205,
                    "end": 208
                },
                {
                    "routes": [],
                    "name": "resumeKind",
                    "static": false,
                    "visibility": "public",
                    "signature": "resumeKind(string $kind): int",
                    "doc": "Lets every extension of one kind load again. Returns how many were released.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 211,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "resume",
                    "static": false,
                    "visibility": "public",
                    "signature": "resume(string $kind, string $name): bool",
                    "doc": "Lets an extension load again. Returns false when it was not paused.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "kind",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 221,
                    "end": 232
                },
                {
                    "routes": [],
                    "name": "resumeAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "resumeAll(): int",
                    "doc": "Lets everything load again. Returns how many were released.",
                    "shapes": [],
                    "params": [],
                    "line": 235,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "pluginFile",
                    "static": false,
                    "visibility": "private",
                    "signature": "pluginFile(array $parts, array $active): string",
                    "doc": "The active plugin file a path under plugins/ belongs to: the entry in\nthe folder the path starts with, the bare file itself for a single-file\nplugin, and the folder alone when no active entry claims it.",
                    "shapes": [
                        "@param list<string> $parts the path segments under plugins/",
                        "@param list<string> $active"
                    ],
                    "params": [
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the path segments under plugins/"
                        },
                        {
                            "name": "active",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 102
                },
                {
                    "routes": [],
                    "name": "activePlugins",
                    "static": false,
                    "visibility": "private",
                    "signature": "activePlugins(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 105,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "strikes",
                    "static": false,
                    "visibility": "private",
                    "signature": "strikes(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, list<int>>"
                    ],
                    "params": [],
                    "line": 162,
                    "end": 166
                },
                {
                    "routes": [],
                    "name": "forgetStrikes",
                    "static": false,
                    "visibility": "private",
                    "signature": "forgetStrikes(array $blamed): void",
                    "doc": "",
                    "shapes": [
                        "@param array{kind: string, name: string} $blamed"
                    ],
                    "params": [
                        {
                            "name": "blamed",
                            "type": "array",
                            "shape": "array{kind: string, name: string}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 169,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": false,
                    "visibility": "private",
                    "signature": "read(string $option): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 244,
                    "end": 249
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": false,
                    "visibility": "private",
                    "signature": "write(string $option, array $paused): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, array<string, mixed>> $paused"
                    ],
                    "params": [
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paused",
                            "type": "array",
                            "shape": "array<string, array<string, mixed>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 252,
                    "end": 259
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Refusal",
            "short": "Refusal",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/Refusal.php",
            "lines": 6,
            "doc": "A refused operation, the way plugin code expects to read it: a code, a message, optional data. The facade turns it into WP_Error.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Blocks\\BlockName",
                "Minn\\Content\\Menus",
                "Minn\\Content\\PluginState",
                "Minn\\Ops\\Unzip",
                "Minn\\Rest\\ArgCheck",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\ParamCheck",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\RouteMatch",
                "Minn\\Rest\\Schema",
                "Minn\\Rest\\SchemaChoices",
                "Minn\\Rest\\UsersController",
                "Minn\\Runtime\\Connectors",
                "Minn\\Runtime\\Patterns",
                "Minn\\Runtime\\PluginActivation",
                "Minn\\Runtime\\PluginRequirements",
                "Minn\\Runtime\\UserInsert",
                "Minn\\Runtime\\UserSave"
            ],
            "constructor": {
                "signature": "__construct(string $code, string $message, mixed $data = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "code",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "message",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "data",
                        "type": "mixed",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 10,
                "end": 12
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "code",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "message",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "data",
                    "type": "mixed",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Runtime\\RegisteredSettings",
            "short": "RegisteredSettings",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/RegisteredSettings.php",
            "lines": 102,
            "doc": "Settings as register_setting keeps them (probe rest-settings): the\narguments a plugin passes, filtered through register_setting_args and\nlaid over the defaults (a string, in its group, unlabelled, undescribed,\nunsanitized, not shown in REST); the sanitize callback put on\nsanitize_option_{$name} with the value alone; a registered default\nanswering get_option through filter_default_option; register_setting\nfired once kept. unregister_setting takes all of it back. Core's own\nsettings (the site's title, tagline, addresses, formats, reading and\ndiscussion defaults) are registered as the REST server starts.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "KEY",
                    "value": "'registered_settings'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ARRAY_ITEMS",
                    "value": "'When registering an \"array\" setting to show in the REST API, you must specify the schema for each array item in \"show_in_rest.schema.items\".'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "CORE",
                    "value": "array (   'blogname' =>    array (     0 => 'general',     1 => 'string',     2 => 'Title',     3 => 'Site title.',     4 =>      array (       'name' => 'title',     ),   ),   'blogdescription' =>    array (     0 => 'general',     1 => 'string',     2 => 'Tagline',     3 => 'Site tagline.',     4 =>      array (       'name' => 'description',     ),   ),   'siteurl' =>    array (     0 => 'general',     1 => 'string',     2 => '',     3 => 'Site URL.',     4 =>      array (       'name' => 'url',       'schema' =>        array (         'format' => 'uri',       ),     ),   ),   'admin_email' =>    array (     0 => 'general',     1 => 'string',     2 => '',     3 => 'This address is used for admin purposes, like new user notification.',     4 =>      array (       'name' => 'email',       'schema' =>        array (         'format' => 'email',       ),     ),   ),   'timezone_string' =>    array (     0 => 'general',     1 => 'string',     2 => '',     3 => 'A city in the same timezone as you.',     4 =>      array (       'name' => 'timezone',     ),   ),   'date_format' =>    array (     0 => 'general',     1 => 'string',     2 => '',     3 => 'A date format for all date strings.',     4 => true,   ),   'time_format' =>    array (     0 => 'general',     1 => 'string',     2 => '',     3 => 'A time format for all time strings.',     4 => true,   ),   'start_of_week' =>    array (     0 => 'general',     1 => 'integer',     2 => '',     3 => 'A day number of the week that the week should start on.',     4 => true,   ),   'WPLANG' =>    array (     0 => 'general',     1 => 'string',     2 => '',     3 => 'WordPress locale code.',     4 =>      array (       'name' => 'language',     ),     5 => 'en_US',   ),   'use_smilies' =>    array (     0 => 'writing',     1 => 'boolean',     2 => '',     3 => 'Convert emoticons like :-) and :-P to graphics on display.',     4 => true,     5 => true,   ),   'default_category' =>    array (     0 => 'writing',     1 => 'integer',     2 => '',     3 => 'Default post category.',     4 => true,   ),   'default_post_format' =>    array (     0 => 'writing',     1 => 'string',     2 => '',     3 => 'Default post format.',     4 => true,   ),   'posts_per_page' =>    array (     0 => 'reading',     1 => 'integer',     2 => 'Maximum posts per page',     3 => 'Blog pages show at most.',     4 => true,     5 => 10,   ),   'show_on_front' =>    array (     0 => 'reading',     1 => 'string',     2 => 'Show on front',     3 => 'What to show on the front page',     4 => true,   ),   'page_on_front' =>    array (     0 => 'reading',     1 => 'integer',     2 => 'Page on front',     3 => 'The ID of the page that should be displayed on the front page',     4 => true,   ),   'page_for_posts' =>    array (     0 => 'reading',     1 => 'integer',     2 => '',     3 => 'The ID of the page that should display the latest posts',     4 => true,   ),   'default_ping_status' =>    array (     0 => 'discussion',     1 => 'string',     2 => '',     3 => 'Allow link notifications from other blogs (pingbacks and trackbacks) on new articles.',     4 =>      array (       'schema' =>        array (         'enum' =>          array (           0 => 'open',           1 => 'closed',         ),       ),     ),   ),   'default_comment_status' =>    array (     0 => 'discussion',     1 => 'string',     2 => 'Allow comments on new posts',     3 => 'Allow people to submit comments on new posts.',     4 =>      array (       'schema' =>        array (         'enum' =>          array (           0 => 'open',           1 => 'closed',         ),       ),     ),   ), )",
                    "doc": "Core's settings: name => [group, type, label, description, show_in_rest, default when it has one].",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": true,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every registered setting by option name, in registration order. @return array<string, array<string, mixed>>",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 47,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(string $group, string $name, mixed $args): void",
                    "doc": "register_setting: $args an array, or (as it once was) the sanitize callback alone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "group",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "unregister",
                    "static": true,
                    "visibility": "public",
                    "signature": "unregister(string $group, string $name, mixed $deprecated = ''): void",
                    "doc": "unregister_setting: the setting, its sanitize callback and its default gone, unregister_setting fired.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "group",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deprecated",
                            "type": "mixed",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "defaultOf",
                    "static": true,
                    "visibility": "public",
                    "signature": "defaultOf(string $option, mixed $default): mixed",
                    "doc": "A setting's registered default, or $default when it registered none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "option",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "registerCore",
                    "static": true,
                    "visibility": "public",
                    "signature": "registerCore(): void",
                    "doc": "register_initial_settings: core's settings, each through register_setting.",
                    "shapes": [],
                    "params": [],
                    "line": 108,
                    "end": 118
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Registry",
            "short": "Registry",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Registry.php",
            "lines": 513,
            "doc": "Post types, taxonomies, and statuses as plugin code registers and reads\nthem. The built-in set is data/registry.json, captured from the\nreference; registrations derive their defaults the way the content\nprobe observed (contracts/fixtures/api/content.json).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Json",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Front\\Permalinks",
                "Minn\\Rest\\StatusesController",
                "Minn\\Runtime\\QueriedObject",
                "Minn\\Runtime\\QueryFlags",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TypeProps"
            ],
            "constructor": {
                "signature": "__construct(string $engineDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "engineDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 37,
                "end": 54
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "postTypes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "taxonomies",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "statuses",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "queryVars",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "publicQueryVars",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "features",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "postTypeObjects",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "taxonomyObjects",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "postTypes",
                    "static": false,
                    "visibility": "public",
                    "signature": "postTypes(): array",
                    "doc": "Every post type.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 61,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "postType",
                    "static": false,
                    "visibility": "public",
                    "signature": "postType(string $name): ?array",
                    "doc": "One post type, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "taxonomies",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomies(): array",
                    "doc": "Every taxonomy.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "taxonomy",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomy(string $name): ?array",
                    "doc": "One taxonomy, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "shareObjects",
                    "static": false,
                    "visibility": "public",
                    "signature": "shareObjects(): void",
                    "doc": "Makes the one object for each registered type and taxonomy and binds\n$wp_post_types and $wp_taxonomies to them, as the reference shares\nthem: a plugin changing one (relabelling Posts) is heard by every\nreader (probe type-object-sharing). Called once the facade classes\nexist; later registrations make their own.",
                    "shapes": [],
                    "params": [],
                    "line": 95,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "postTypeObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "postTypeObject(string $name): ?WP_Post_Type",
                    "doc": "The one object for a registered post type, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "postTypeObjects",
                    "static": false,
                    "visibility": "public",
                    "signature": "postTypeObjects(): array",
                    "doc": "The objects of every registered post type, in registration order.",
                    "shapes": [
                        "@return array<string, \\WP_Post_Type>"
                    ],
                    "params": [],
                    "line": 122,
                    "end": 129
                },
                {
                    "routes": [],
                    "name": "taxonomyObject",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomyObject(string $name): ?WP_Taxonomy",
                    "doc": "The one object for a registered taxonomy, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "taxonomyObjects",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomyObjects(): array",
                    "doc": "The objects of every registered taxonomy, in registration order.",
                    "shapes": [
                        "@return array<string, \\WP_Taxonomy>"
                    ],
                    "params": [],
                    "line": 145,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "statuses",
                    "static": false,
                    "visibility": "public",
                    "signature": "statuses(): array",
                    "doc": "Every post status.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 159,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "status",
                    "static": false,
                    "visibility": "public",
                    "signature": "status(string $name): ?array",
                    "doc": "One post status, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 168
                },
                {
                    "routes": [],
                    "name": "translateBuiltIns",
                    "static": false,
                    "visibility": "public",
                    "signature": "translateBuiltIns(): void",
                    "doc": "The built-in types', taxonomies' and statuses' labels in the site's\nlanguage, as the reference registers them again on init: each label\nasks for its own message (data/registry-labels.json, captured from the\nreference), and a type's single-item template and a taxonomy's\narchive template are named after the singular name. Rows and the\nshared objects both take them; what a plugin set before init gives\nway, as it does there.",
                    "shapes": [],
                    "params": [],
                    "line": 179,
                    "end": 214
                },
                {
                    "routes": [],
                    "name": "adoptPostType",
                    "static": false,
                    "visibility": "public",
                    "signature": "adoptPostType(WP_Post_Type $object): array",
                    "doc": "Takes a built post type as the registered one: the object\nregister_post_type made is the one every reader shares, and its\nproperties are the type's row. Registering again puts a new object in\nthe old one's place, as on the reference.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Post_Type",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 224,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "labels",
                    "static": false,
                    "visibility": "public",
                    "signature": "labels(array $labels, ?string $label, string $base, string $name): array",
                    "doc": "A type's labels from its own (probe post-remaining): the labels of its\nbase type (page for a hierarchical type, post for any other) under the\ntype's own. A missing\nname comes from the type's label, a missing singular name from the name,\nthe menu name from the name, all items from the menu name, archives from\nall items, and the admin bar name from the singular name or else the\ntype's name; a type with a singular name also names its single-item\ntemplate.",
                    "shapes": [
                        "@param array<string, mixed> $labels",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "labels",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 286,
                    "end": 295
                },
                {
                    "routes": [],
                    "name": "taxonomyLabels",
                    "static": false,
                    "visibility": "public",
                    "signature": "taxonomyLabels(array $labels, ?string $label, string $base, string $name): array",
                    "doc": "A taxonomy's labels from its own (probe taxonomy-remaining): derived as a\ntype's are, under the category labels for a hierarchical taxonomy or the\ntag labels for any other; one that names no template takes \"%s\nArchives\" with the singular name it ends up with.",
                    "shapes": [
                        "@param array<string, mixed> $labels",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "labels",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 306,
                    "end": 313
                },
                {
                    "routes": [],
                    "name": "capabilities",
                    "static": true,
                    "visibility": "public",
                    "signature": "capabilities(array|string $capabilityType, array $overrides, bool $mapMetaCap): array",
                    "doc": "A type's capability names (probe post-remaining): the eight primitive\nones, the six more a mapped type uses, the type's own names merged over\nthem, and create_posts last, the edit capability unless named.",
                    "shapes": [
                        "@param array<string, string> $overrides",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "capabilityType",
                            "type": "array|string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "overrides",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mapMetaCap",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 349,
                    "end": 378
                },
                {
                    "routes": [],
                    "name": "unregisterPostType",
                    "static": false,
                    "visibility": "public",
                    "signature": "unregisterPostType(string $name): bool",
                    "doc": "Forgets a non-builtin post type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 381,
                    "end": 388
                },
                {
                    "routes": [],
                    "name": "addSupport",
                    "static": false,
                    "visibility": "public",
                    "signature": "addSupport(string $type, string $feature, array $args): void",
                    "doc": "Adds a feature to a type, registered or not: the reference keeps\nfeatures apart from the type objects, so declaring one does not make\nthe type exist. A feature with arguments keeps all of them.",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "feature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 397,
                    "end": 400
                },
                {
                    "routes": [],
                    "name": "removeSupport",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeSupport(string $type, string $feature): void",
                    "doc": "Removes a feature from a post type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "feature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 403,
                    "end": 406
                },
                {
                    "routes": [],
                    "name": "removeSupports",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeSupports(string $type): void",
                    "doc": "Removes every feature of a post type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 409,
                    "end": 412
                },
                {
                    "routes": [],
                    "name": "supports",
                    "static": false,
                    "visibility": "public",
                    "signature": "supports(string $type): array",
                    "doc": "The features a post type supports.",
                    "shapes": [
                        "@return array<string, mixed> feature => true or the arguments given"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 419,
                    "end": 422
                },
                {
                    "routes": [],
                    "name": "defaultLabels",
                    "static": false,
                    "visibility": "public",
                    "signature": "defaultLabels(string $plain, string $hierarchical): array",
                    "doc": "The default labels of a family as label => [the plain one's, the\nhierarchical one's]: post and page for types, tag and category for\ntaxonomies, from the built-in data (WP_Post_Type::get_default_labels).",
                    "shapes": [
                        "@return array<string, array{0: mixed, 1: mixed}>"
                    ],
                    "params": [
                        {
                            "name": "plain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hierarchical",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 431,
                    "end": 439
                },
                {
                    "routes": [],
                    "name": "adoptTaxonomy",
                    "static": false,
                    "visibility": "public",
                    "signature": "adoptTaxonomy(WP_Taxonomy $object): array",
                    "doc": "Takes a built taxonomy as the registered one, the object every reader\nshares, its properties the taxonomy's row.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "WP_Taxonomy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 447,
                    "end": 453
                },
                {
                    "routes": [],
                    "name": "settlesRewrites",
                    "static": true,
                    "visibility": "public",
                    "signature": "settlesRewrites(): bool",
                    "doc": "Whether a registered rewrite settles into its full form: with pretty permalinks or in the admin; otherwise it stays as given.",
                    "shapes": [],
                    "params": [],
                    "line": 456,
                    "end": 459
                },
                {
                    "routes": [],
                    "name": "unregisterTaxonomy",
                    "static": false,
                    "visibility": "public",
                    "signature": "unregisterTaxonomy(string $name): bool",
                    "doc": "Forgets a non-builtin taxonomy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 462,
                    "end": 469
                },
                {
                    "routes": [],
                    "name": "addObjectType",
                    "static": false,
                    "visibility": "public",
                    "signature": "addObjectType(string $taxonomy, string $type): bool",
                    "doc": "Attaches a taxonomy to a post type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 472,
                    "end": 485
                },
                {
                    "routes": [],
                    "name": "removeObjectType",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeObjectType(string $taxonomy, string $type): bool",
                    "doc": "Detaches a taxonomy from a post type.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 488,
                    "end": 498
                },
                {
                    "routes": [],
                    "name": "registerStatus",
                    "static": false,
                    "visibility": "public",
                    "signature": "registerStatus(string $name, array $args): array",
                    "doc": "Registers a post status.",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 505,
                    "end": 527
                },
                {
                    "routes": [],
                    "name": "rowOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "rowOf(object $object, array $without): array",
                    "doc": "An object's properties as a row, its labels and capabilities as arrays.",
                    "shapes": [
                        "@param list<string> $without",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "without",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 238,
                    "end": 247
                },
                {
                    "routes": [],
                    "name": "objectFrom",
                    "static": true,
                    "visibility": "private",
                    "signature": "objectFrom(string $class, array $row): object",
                    "doc": "An object of the class holding a row as registration left it, without\nbuilding it again (no filters, no defaults): the built-in types and\ntaxonomies. A built-in type's supports were taken in, so its object\nhas none of its own.",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "class-string<T>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 260,
                    "end": 270
                },
                {
                    "routes": [],
                    "name": "derivedLabels",
                    "static": true,
                    "visibility": "private",
                    "signature": "derivedLabels(array $labels, ?string $label, string $name): array",
                    "doc": "The labels a type or taxonomy gets from its own: a missing name from\nits label, a missing singular name from the name, the menu name from\nthe name, all items from the menu name, archives from all items, and\nthe admin bar name from the singular name or else its own name.",
                    "shapes": [
                        "@param array<string, mixed> $labels",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "labels",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 324,
                    "end": 339
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\RewriteRules",
            "short": "RewriteRules",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/RewriteRules.php",
            "lines": 334,
            "doc": "The rewrite rules WordPress makes from its structures, as the reference\nmakes them (probes rewrite-generate, rewrite-rules), so plugins that\nread, filter or add to them see the same list.\n\nA structure is walked a directory at a time (one at a time only when\nasked), each level that names something getting its rules: its feeds\nand embed, its pages, its comment pages (for posts and pages), a static\nfront page's comment pages at the root, the endpoints placed there, and\nthe level itself; deepest level first. The level that names a post (a\nname, an id, a page path, or a plugin post type's own tag) is the post's:\nits embed and trackback, its feeds, pages and comment pages, its\nendpoints and its attachments', then the post with its page number,\nbetween the rules for attachments under it (by /attachment/ and, but for\na hierarchical type, directly). A tag nobody registered stays as written.\n\nThe full list is the plugins' top rules (each permastruct's rules join\nthem as they are made, and stay), the fixed files, then root, comments,\nsearch, author and dates, then pages and posts (posts first unless the\nstructure begins ambiguously), then the plugins' bottom rules; each\nsection through its filter, the whole through generate_rewrite_rules and\nrewrite_rules_array.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULTS",
                    "value": "array (   'ep_mask' => 0,   'paged' => true,   'feed' => true,   'forcomments' => false,   'walk_dirs' => true,   'endpoints' => true, )",
                    "doc": "What a permastruct's flags default to (no endpoint places).",
                    "visibility": "private"
                },
                {
                    "name": "POST_BY_TIME",
                    "value": "array (   0 => '%year%',   1 => '%monthnum%',   2 => '%day%',   3 => '%hour%',   4 => '%minute%',   5 => '%second%', )",
                    "doc": "The six date and time tags that together name a post.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "generate",
                    "static": true,
                    "visibility": "public",
                    "signature": "generate(WP_Rewrite $rewrite, array $args): array",
                    "doc": "generate_rewrite_rules: the rules for one structure.",
                    "shapes": [
                        "@param array{struct: string, ep_mask?: int, paged?: bool, feed?: bool, forcomments?: bool, walk_dirs?: bool, endpoints?: bool} $args",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array{struct: string, ep_mask?: int, paged?: bool, feed?: bool, forcomments?: bool, walk_dirs?: bool, endpoints?: bool}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": true,
                    "visibility": "public",
                    "signature": "all(WP_Rewrite $rewrite): array",
                    "doc": "rewrite_rules: every rule, assembled and filtered.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "unfiltered",
                    "static": true,
                    "visibility": "public",
                    "signature": "unfiltered(WP_Rewrite $rewrite): array",
                    "doc": "The rules as the engine itself would make them, in their stored form\nand with no plugin's filter or action on them: what the stored rules\nare when no plugin changed them. The site's rewrite is left as it is.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "builtins",
                    "static": true,
                    "visibility": "public",
                    "signature": "builtins(WP_Rewrite $rewrite): void",
                    "doc": "The built-in taxonomies' tags and patterns, set once on the site's\nrewrite under the front of the structure then; a structure set later\nleaves them, and a plugin's, as they were (probe registry-rewrites).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "typeArchive",
                    "static": true,
                    "visibility": "public",
                    "signature": "typeArchive(WP_Rewrite $rewrite, string $name, array $type): array",
                    "doc": "A post type's archive rules, which join the top rules as it registers\n(probe cpt-rules): its archive slug (the rewrite slug when the archive\nis just true) under the front of the structure, or the root when the\ntype opts out of the front; the archive, its two feed rules when the\ntype has feeds, its pages when it has those.",
                    "shapes": [
                        "@param array<string, mixed> $type the registered type",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the registered type"
                        }
                    ],
                    "line": 171,
                    "end": 191
                },
                {
                    "routes": [],
                    "name": "verbosePages",
                    "static": true,
                    "visibility": "public",
                    "signature": "verbosePages(string $structure): bool",
                    "doc": "Whether a structure begins with a tag that could be a page's path too (use_verbose_page_rules).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "structure",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "assemble",
                    "static": true,
                    "visibility": "private",
                    "signature": "assemble(WP_Rewrite $rewrite, Closure $section): array",
                    "doc": "The sections in the reference's order, each through $section: the top\nrules (each permastruct's joining them), the fixed files, root,\ncomments, search, author, dates, pages and posts, the bottom rules.",
                    "shapes": [
                        "@param Closure(string, array<string, string>): array<string, string> $section",
                        "@return array{0: array<string, string>, 1: array<string, string>} the top rules, and every rule"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "section",
                            "type": "Closure",
                            "shape": "Closure(string, array<string, string>): array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "queries",
                    "static": true,
                    "visibility": "private",
                    "signature": "queries(WP_Rewrite $rewrite, string $struct): array",
                    "doc": "Each level's query: the index, then each tag's var and its match, one\nmore at a time.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "struct",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 205,
                    "end": 214
                },
                {
                    "routes": [],
                    "name": "namesPost",
                    "static": true,
                    "visibility": "private",
                    "signature": "namesPost(string $struct): array",
                    "doc": "Whether the structure names a post, and whether that post is hierarchical. @return array{0: bool, 1: bool}",
                    "shapes": [
                        "@return array{0: bool, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "struct",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 217,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "dirMask",
                    "static": true,
                    "visibility": "private",
                    "signature": "dirMask(string $dir): int",
                    "doc": "The endpoint place a date directory is besides the structure's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 241
                },
                {
                    "routes": [],
                    "name": "plainLevel",
                    "static": true,
                    "visibility": "private",
                    "signature": "plainLevel(WP_Rewrite $rewrite, array $level, array $args): array",
                    "doc": "A level that is not a post's.",
                    "shapes": [
                        "@param array{match: string, query: string, tokens: int, mask: int} $level",
                        "@param array<string, mixed> $args",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "array",
                            "shape": "array{match: string, query: string, tokens: int, mask: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 250,
                    "end": 258
                },
                {
                    "routes": [],
                    "name": "postLevel",
                    "static": true,
                    "visibility": "private",
                    "signature": "postLevel(WP_Rewrite $rewrite, array $level, array $args, bool $hierarchical): array",
                    "doc": "The post's level, between its attachments' rules.",
                    "shapes": [
                        "@param array{match: string, query: string, tokens: int, mask: int} $level",
                        "@param array<string, mixed> $args",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "array",
                            "shape": "array{match: string, query: string, tokens: int, mask: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hierarchical",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 267,
                    "end": 285
                },
                {
                    "routes": [],
                    "name": "attachments",
                    "static": true,
                    "visibility": "private",
                    "signature": "attachments(WP_Rewrite $rewrite, string $base): array",
                    "doc": "An attachment's rules under a base: itself, its trackback, feeds,\ncomment pages and embed.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "base",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 293,
                    "end": 305
                },
                {
                    "routes": [],
                    "name": "feeds",
                    "static": true,
                    "visibility": "private",
                    "signature": "feeds(WP_Rewrite $rewrite, array $level, array $args): array",
                    "doc": "A level's two feed rules (with comments when asked).",
                    "shapes": [
                        "@param array{match: string, query: string, tokens: int, mask: int} $level",
                        "@param array<string, mixed> $args",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "array",
                            "shape": "array{match: string, query: string, tokens: int, mask: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 314,
                    "end": 319
                },
                {
                    "routes": [],
                    "name": "pagesAndComments",
                    "static": true,
                    "visibility": "private",
                    "signature": "pagesAndComments(WP_Rewrite $rewrite, array $level, array $args): array",
                    "doc": "A level's page rule, its comment pages (posts' and pages' places\nonly), and a static front page's comment pages at the root.",
                    "shapes": [
                        "@param array{match: string, query: string, tokens: int, mask: int} $level",
                        "@param array<string, mixed> $args",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "array",
                            "shape": "array{match: string, query: string, tokens: int, mask: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 329,
                    "end": 342
                },
                {
                    "routes": [],
                    "name": "endpoints",
                    "static": true,
                    "visibility": "private",
                    "signature": "endpoints(WP_Rewrite $rewrite, array $level, array $args): array",
                    "doc": "The endpoints placed at a level (by the structure's place or the\ndirectory's own).",
                    "shapes": [
                        "@param array{match: string, query: string, tokens: int, mask: int} $level",
                        "@param array<string, mixed> $args",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "rewrite",
                            "type": "WP_Rewrite",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "level",
                            "type": "array",
                            "shape": "array{match: string, query: string, tokens: int, mask: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 352,
                    "end": 364
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Runtime",
            "short": "Runtime",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Runtime.php",
            "lines": 410,
            "doc": "The WordPress runtime the engine offers plugin code: the procedural\nfacade under minn/wp-api/ plus the services it delegates to. One per\nrequest; the facade reaches it through these statics.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Auth\\Capabilities",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\Reader",
                "Minn\\Content\\RowCache",
                "Minn\\Content\\Site",
                "Minn\\Context",
                "Minn\\Db",
                "Minn\\Extension\\SeamRunner",
                "Minn\\Http\\Request",
                "Minn\\I18n\\LocaleStack",
                "Minn\\I18n\\TextDomains",
                "Minn\\Runtime\\BlockTemplates",
                "Minn\\Runtime\\Constants",
                "Minn\\Runtime\\EarlyFilters",
                "Minn\\Runtime\\Hooks",
                "Minn\\Runtime\\Interactivity",
                "Minn\\Runtime\\ObjectCache",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\PostQuery",
                "Minn\\Runtime\\Registry",
                "Minn\\Runtime\\ScriptModules",
                "Minn\\Runtime\\Shortcodes",
                "Minn\\Runtime\\ThemeSupports"
            ],
            "usedBy": [
                "Minn\\Admin\\AppController",
                "Minn\\Admin\\BootPayload",
                "Minn\\Admin\\PackagesController",
                "Minn\\Admin\\ThemesController",
                "Minn\\Auth\\Authenticator",
                "Minn\\Auth\\Capabilities",
                "Minn\\Auth\\LoginThrottle",
                "Minn\\Auth\\Nonce",
                "Minn\\Auth\\PasswordReset",
                "Minn\\Auth\\RegisteredCaps",
                "Minn\\Blocks\\Bindings",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Blocks\\Dynamic\\Theme\\PostBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Elements",
                "Minn\\Blocks\\ImageTags",
                "Minn\\Blocks\\Layout",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Renderer",
                "Minn\\Cli\\Runtime",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\MediaShortcodes",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\PluginState",
                "Minn\\Content\\PostSlugs",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Content\\Terms",
                "Minn\\Content\\Texturize",
                "Minn\\Content\\Users",
                "Minn\\Cron\\Cron",
                "Minn\\Db",
                "Minn\\Engine",
                "Minn\\Extension\\Extensions",
                "Minn\\Front\\CommentPostController",
                "Minn\\Front\\FeedTags",
                "Minn\\Front\\FeedTemplates",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\PostEmbed",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\QueryMoves",
                "Minn\\Front\\RequestParse",
                "Minn\\Front\\Resolver",
                "Minn\\Front\\RuleRoutes",
                "Minn\\Front\\SingleQueries",
                "Minn\\Front\\SitemapRequest",
                "Minn\\Front\\ToolbarMarkup",
                "Minn\\Front\\ToolbarMenus",
                "Minn\\I18n\\Gettext",
                "Minn\\I18n\\SiteLanguage",
                "Minn\\I18n\\TranslationFiles",
                "Minn\\Login\\LoginController",
                "Minn\\Mail\\Mailer",
                "Minn\\Media\\Icons",
                "Minn\\Ops\\Updates",
                "Minn\\Ops\\UpgraderRun",
                "Minn\\Query\\TaxSql",
                "Minn\\Rest\\Api",
                "Minn\\Rest\\BatchController",
                "Minn\\Rest\\BlockRendererController",
                "Minn\\Rest\\BlockTypesController",
                "Minn\\Rest\\Caller",
                "Minn\\Rest\\Embed",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\LiveSettings",
                "Minn\\Rest\\PostCollectionParams",
                "Minn\\Rest\\PostListArgs",
                "Minn\\Rest\\PostsController",
                "Minn\\Rest\\RegisteredType",
                "Minn\\Rest\\RenderedFields",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RuntimeEnvelope",
                "Minn\\Rest\\RuntimePrepare",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Rest\\Services",
                "Minn\\Rest\\SettingsController",
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\StatusesController",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Rest\\TermFilters",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\Types",
                "Minn\\Rest\\UserCollectionParams",
                "Minn\\Rest\\UsersController",
                "Minn\\Rest\\WidgetsController",
                "Minn\\Runtime\\Abilities",
                "Minn\\Runtime\\AccountFlows",
                "Minn\\Runtime\\AjaxController",
                "Minn\\Runtime\\ApplicationPasswordSignIn",
                "Minn\\Runtime\\ArchiveLinks",
                "Minn\\Runtime\\BlockFilters",
                "Minn\\Runtime\\BlockHooks",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Runtime\\CommentFeedQuery",
                "Minn\\Runtime\\CommentForm",
                "Minn\\Runtime\\CommentPages",
                "Minn\\Runtime\\Constants",
                "Minn\\Runtime\\CurrentUser",
                "Minn\\Runtime\\Deferrals",
                "Minn\\Runtime\\FileUpload",
                "Minn\\Runtime\\Interactivity",
                "Minn\\Runtime\\MenuItemMarks",
                "Minn\\Runtime\\MetaKeys",
                "Minn\\Runtime\\NavMenuItems",
                "Minn\\Runtime\\OptionSanitizer",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\OptionsGroup",
                "Minn\\Runtime\\Patterns",
                "Minn\\Runtime\\PlaceholderTrace",
                "Minn\\Runtime\\PluginActivation",
                "Minn\\Runtime\\PluginRemoval",
                "Minn\\Runtime\\PluginRequirements",
                "Minn\\Runtime\\PluginUpdates",
                "Minn\\Runtime\\Plugins",
                "Minn\\Runtime\\PostEvents",
                "Minn\\Runtime\\PostLinks",
                "Minn\\Runtime\\PostQuery",
                "Minn\\Runtime\\PostQueryResults",
                "Minn\\Runtime\\PostQueryWhere",
                "Minn\\Runtime\\PostSave",
                "Minn\\Runtime\\RegisteredSettings",
                "Minn\\Runtime\\Registry",
                "Minn\\Runtime\\RewriteRules",
                "Minn\\Runtime\\ScriptModules",
                "Minn\\Runtime\\Shortcodes",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Runtime\\TermQueryTree",
                "Minn\\Runtime\\TermSave",
                "Minn\\Runtime\\TermWriter",
                "Minn\\Runtime\\ThemeSupports",
                "Minn\\Runtime\\ThemeSwitch",
                "Minn\\Runtime\\Upgrade",
                "Minn\\Runtime\\UserEvents",
                "Minn\\Theme\\ArchiveTitle",
                "Minn\\Theme\\ClassicContent",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\FeedHeaders",
                "Minn\\Theme\\FrontLifecycle",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\StyleLayers",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeJsonData"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Context $context, bool $isAdmin = false)",
                "doc": "The runtime for one request. Everything about the request itself\ncomes from the context; the fields below it are the same values,\nkept as properties because plugin code reaches for them by name.",
                "shapes": [],
                "params": [
                    {
                        "name": "context",
                        "type": "Minn\\Context",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "isAdmin",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 70,
                "end": 82
            },
            "cases": [],
            "constants": [
                {
                    "name": "CONTENT_DONE",
                    "value": "array (   'apply_block_hooks_to_content_from_post_object' => 8,   'do_blocks' => 9,   'wptexturize' => 10,   'wpautop' => 10,   'shortcode_unautop' => 10,   'do_shortcode' => 11,   'wp_filter_content_tags' =>    array (     0 => 12,     1 => '_minn_content_img_tag',   ), )",
                    "doc": "The the_content defaults the engine's own rendering has already done:\nblocks, texturize, paragraphs, shortcodes, block hooks, and the image\nattributes. What it has not (an attachment's own link, smilies, the\ncapital P, insecure home addresses) runs with the plugins' own\ncallbacks.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "hooks",
                    "type": "?Minn\\Runtime\\Hooks",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "options",
                    "type": "?Minn\\Runtime\\Options",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "cache",
                    "type": "?Minn\\Runtime\\ObjectCache",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "shortcodes",
                    "type": "?Minn\\Runtime\\Shortcodes",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "registry",
                    "type": "?Minn\\Runtime\\Registry",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "interactivity",
                    "type": "?Minn\\Runtime\\Interactivity",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "scriptModules",
                    "type": "?Minn\\Runtime\\ScriptModules",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "blockTemplates",
                    "type": "?Minn\\Runtime\\BlockTemplates",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "textDomains",
                    "type": "?Minn\\I18n\\TextDomains",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "locales",
                    "type": "?Minn\\I18n\\LocaleStack",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "current",
                    "type": "?self",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "facadeLoaded",
                    "type": "bool",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "state",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "The database door this request answers through.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "The site's options.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "request",
                    "type": "?Minn\\Http\\Request",
                    "readonly": true,
                    "static": false,
                    "doc": "The request being answered, absent on the command line.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "reader",
                    "type": "Minn\\Content\\Reader",
                    "readonly": false,
                    "static": false,
                    "doc": "Who reads this request; settled again (identify()) once plugins have said who the user is.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "capabilities",
                    "type": "Minn\\Auth\\Capabilities",
                    "readonly": true,
                    "static": false,
                    "doc": "The capability engine.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "engineDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "The minn/ folder: the engine's own files.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "absPath",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "The site root with a trailing slash.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "version",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "The WordPress release whose contracts the runtime speaks.",
                    "visibility": "public",
                    "promoted": false
                },
                {
                    "name": "seams",
                    "type": "?Minn\\Extension\\SeamRunner",
                    "readonly": false,
                    "static": false,
                    "doc": "The extension seams this request registered, once the front has loaded them.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "renderState",
                    "type": "?Minn\\Blocks\\RenderState",
                    "readonly": false,
                    "static": false,
                    "doc": "The counters and collected styles of everything rendered for this request.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "blockRenderer",
                    "type": "?Minn\\Blocks\\Renderer",
                    "readonly": false,
                    "static": false,
                    "doc": "The block renderer this request renders through.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "context",
                    "type": "Minn\\Context",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "isAdmin",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "identify",
                    "static": false,
                    "visibility": "public",
                    "signature": "identify(Minn\\Content\\Reader $reader): void",
                    "doc": "The request's reader from now on: the user plugin code named through determine_current_user (Runtime\\CurrentUser).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "reader",
                            "type": "Minn\\Content\\Reader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "useSeams",
                    "static": false,
                    "visibility": "public",
                    "signature": "useSeams(Minn\\Extension\\SeamRunner $seams): void",
                    "doc": "Holds the extension seams this request registered, so nothing static has to.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "seams",
                            "type": "Minn\\Extension\\SeamRunner",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "seams",
                    "static": false,
                    "visibility": "public",
                    "signature": "seams(): ?Minn\\Extension\\SeamRunner",
                    "doc": "The extension seams, or null before the front has registered any (REST and the CLI never do).",
                    "shapes": [],
                    "params": [],
                    "line": 97,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "renderState",
                    "static": false,
                    "visibility": "public",
                    "signature": "renderState(): Minn\\Blocks\\RenderState",
                    "doc": "The render state for this request, made on first use: one set of counters for everything rendered.",
                    "shapes": [],
                    "params": [],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "useRenderState",
                    "static": false,
                    "visibility": "public",
                    "signature": "useRenderState(Minn\\Blocks\\RenderState $state): void",
                    "doc": "Makes a render state this request's, so a renderer that brought its own is the one the leaves read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "state",
                            "type": "Minn\\Blocks\\RenderState",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "blockRenderer",
                    "static": false,
                    "visibility": "public",
                    "signature": "blockRenderer(): Minn\\Blocks\\Renderer",
                    "doc": "The block renderer for this request, made on first use over this request's own database door.",
                    "shapes": [],
                    "params": [],
                    "line": 115,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "boot",
                    "static": true,
                    "visibility": "public",
                    "signature": "boot(self $runtime): self",
                    "doc": "Makes this request's runtime the one the facade sees and defines the\nfacade.\n\nDeliberately does NOT start the facade's registries empty. A process\nanswering a second request would then have a fresh hook table that no\nplugin can fill again: plugin files register their hooks as they are\nincluded, and an include happens once per process. Until a plugin's\nregistrations can be replayed, a second boot inherits the first's\nregistries on purpose, which is why a worker runtime is not yet\nsomething the engine claims (see contracts/runtime.md).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "self",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 132,
                    "end": 163
                },
                {
                    "routes": [],
                    "name": "current",
                    "static": true,
                    "visibility": "public",
                    "signature": "current(): self",
                    "doc": "The booted runtime; throws when there is none.",
                    "shapes": [],
                    "params": [],
                    "line": 166,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "booted",
                    "static": true,
                    "visibility": "public",
                    "signature": "booted(): bool",
                    "doc": "Whether the runtime is up.",
                    "shapes": [],
                    "params": [],
                    "line": 175,
                    "end": 178
                },
                {
                    "routes": [],
                    "name": "hooks",
                    "static": true,
                    "visibility": "public",
                    "signature": "hooks(): Minn\\Runtime\\Hooks",
                    "doc": "The hook registry.",
                    "shapes": [],
                    "params": [],
                    "line": 181,
                    "end": 184
                },
                {
                    "routes": [],
                    "name": "options",
                    "static": true,
                    "visibility": "public",
                    "signature": "options(): Minn\\Runtime\\Options",
                    "doc": "The options store.",
                    "shapes": [],
                    "params": [],
                    "line": 187,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "storeOptions",
                    "static": true,
                    "visibility": "public",
                    "signature": "storeOptions(Minn\\Db $db): void",
                    "doc": "The options store for a connection, made as soon as the request has\none (Engine::answer) and kept by the boot that follows: the reads made\nwhile routing come from the same autoloaded list as everything after,\nand Db::option() reads through it from then on.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "installing",
                    "static": true,
                    "visibility": "public",
                    "signature": "installing(): bool",
                    "doc": "Whether this request is installing (wp_installing()); false before a runtime boots.",
                    "shapes": [],
                    "params": [],
                    "line": 207,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "optionWritten",
                    "static": true,
                    "visibility": "public",
                    "signature": "optionWritten(string $name): void",
                    "doc": "Tells the option store about a row the engine wrote behind it; nothing to do when no store was made.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 213,
                    "end": 216
                },
                {
                    "routes": [],
                    "name": "capture",
                    "static": true,
                    "visibility": "public",
                    "signature": "capture(string $action, array $args = array ( )): string",
                    "doc": "Runs an action and returns what it printed. Plugin callbacks may open\noutput buffers of their own during the action (a page post-processor\nstarted in wp_head) or close one they think is theirs (the same plugin\nin wp_footer); a sentinel buffer under the capture keeps the output\neither way: extra buffers are flushed through their handlers into the\ncapture, and a capture closed early lands in the sentinel.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "action",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 242
                },
                {
                    "routes": [],
                    "name": "contentFilter",
                    "static": true,
                    "visibility": "public",
                    "signature": "contentFilter(string $content): string",
                    "doc": "Content the engine rendered itself, through the_content for everything else hooked there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 263,
                    "end": 266
                },
                {
                    "routes": [],
                    "name": "cache",
                    "static": true,
                    "visibility": "public",
                    "signature": "cache(): Minn\\Runtime\\ObjectCache",
                    "doc": "The object cache.",
                    "shapes": [],
                    "params": [],
                    "line": 269,
                    "end": 272
                },
                {
                    "routes": [],
                    "name": "textDomains",
                    "static": true,
                    "visibility": "public",
                    "signature": "textDomains(): Minn\\I18n\\TextDomains",
                    "doc": "The text domains loaded for this request.",
                    "shapes": [],
                    "params": [],
                    "line": 275,
                    "end": 278
                },
                {
                    "routes": [],
                    "name": "locales",
                    "static": true,
                    "visibility": "public",
                    "signature": "locales(): Minn\\I18n\\LocaleStack",
                    "doc": "The locales this request switched into.",
                    "shapes": [],
                    "params": [],
                    "line": 281,
                    "end": 284
                },
                {
                    "routes": [],
                    "name": "shortcodes",
                    "static": true,
                    "visibility": "public",
                    "signature": "shortcodes(): Minn\\Runtime\\Shortcodes",
                    "doc": "The shortcode registry.",
                    "shapes": [],
                    "params": [],
                    "line": 287,
                    "end": 290
                },
                {
                    "routes": [],
                    "name": "scriptModules",
                    "static": true,
                    "visibility": "public",
                    "signature": "scriptModules(): Minn\\Runtime\\ScriptModules",
                    "doc": "The script modules registry.",
                    "shapes": [],
                    "params": [],
                    "line": 293,
                    "end": 299
                },
                {
                    "routes": [],
                    "name": "interactivity",
                    "static": true,
                    "visibility": "public",
                    "signature": "interactivity(): Minn\\Runtime\\Interactivity",
                    "doc": "The interactivity API.",
                    "shapes": [],
                    "params": [],
                    "line": 302,
                    "end": 305
                },
                {
                    "routes": [],
                    "name": "blockTemplates",
                    "static": true,
                    "visibility": "public",
                    "signature": "blockTemplates(): Minn\\Runtime\\BlockTemplates",
                    "doc": "The registered block templates.",
                    "shapes": [],
                    "params": [],
                    "line": 308,
                    "end": 311
                },
                {
                    "routes": [],
                    "name": "registry",
                    "static": true,
                    "visibility": "public",
                    "signature": "registry(): Minn\\Runtime\\Registry",
                    "doc": "The post types, taxonomies, and statuses.",
                    "shapes": [],
                    "params": [],
                    "line": 314,
                    "end": 317
                },
                {
                    "routes": [],
                    "name": "postQuery",
                    "static": true,
                    "visibility": "public",
                    "signature": "postQuery(): Minn\\Runtime\\PostQuery",
                    "doc": "A fresh post query over the runtime's registry.",
                    "shapes": [],
                    "params": [],
                    "line": 320,
                    "end": 323
                },
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $key, mixed $default = NULL): mixed",
                    "doc": "A per-request state value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "mixed",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 326,
                    "end": 329
                },
                {
                    "routes": [],
                    "name": "set",
                    "static": false,
                    "visibility": "public",
                    "signature": "set(string $key, mixed $value): void",
                    "doc": "Sets a per-request state value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 332,
                    "end": 335
                },
                {
                    "routes": [],
                    "name": "isSecure",
                    "static": false,
                    "visibility": "public",
                    "signature": "isSecure(): bool",
                    "doc": "Whether the request is over HTTPS.",
                    "shapes": [],
                    "params": [],
                    "line": 338,
                    "end": 341
                },
                {
                    "routes": [],
                    "name": "contentDir",
                    "static": false,
                    "visibility": "public",
                    "signature": "contentDir(): string",
                    "doc": "wp-content under the site root.",
                    "shapes": [],
                    "params": [],
                    "line": 344,
                    "end": 347
                },
                {
                    "routes": [],
                    "name": "loadFacade",
                    "static": true,
                    "visibility": "public",
                    "signature": "loadFacade(string $engineDir): void",
                    "doc": "Defines the facade functions once; safe to call again.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 350,
                    "end": 377
                },
                {
                    "routes": [],
                    "name": "loadPluggables",
                    "static": true,
                    "visibility": "public",
                    "signature": "loadPluggables(): void",
                    "doc": "The pluggable functions, once the plugins have had their chance to\ndefine their own: each is defined only where no plugin did. The plugin\nloader calls this before plugins_loaded; a boot that loads no plugins\ncalls it straight away.",
                    "shapes": [],
                    "params": [],
                    "line": 409,
                    "end": 412
                },
                {
                    "routes": [],
                    "name": "reset",
                    "static": true,
                    "visibility": "public",
                    "signature": "reset(): void",
                    "doc": "Fresh per-request state, for suites.",
                    "shapes": [],
                    "params": [],
                    "line": 415,
                    "end": 432
                },
                {
                    "routes": [],
                    "name": "loadObjectCacheDropin",
                    "static": true,
                    "visibility": "private",
                    "signature": "loadObjectCacheDropin(self $runtime): void",
                    "doc": "A site's object-cache.php drop-in, before the facade defines its own\ncache functions: the drop-in's functions and WP_Object_Cache win, and\nthe facade fills in only what it left out. Loaded once per process,\nunless enable_loading_object_cache_dropin (asked of the hooks added\nbefore boot, as the reference asks it whether or not there is a file)\nsays no.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "runtime",
                            "type": "self",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 387,
                    "end": 401
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ScriptLoading",
            "short": "ScriptLoading",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ScriptLoading.php",
            "lines": 82,
            "doc": "How a script may load, as the reference decides it (probe\ndependencies-classes). A script keeps its own strategy (defer or async)\nunless it has inline code after it, which makes it blocking, or an\nenqueued dependent (however deep, through dependents that are themselves\nenqueued) loads more strictly: blocking before defer before async. Its\nfetch priority rises to the highest among those dependents: low, then\nauto, then high. A delayed script that cannot be delayed (inline code\nafter it) waits for the footer when nothing enqueued depends on it. The\nvalues a script may be given are checked here too.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Assets"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Runtime\\Assets $assets)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "assets",
                        "type": "Minn\\Runtime\\Assets",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 25
            },
            "cases": [],
            "constants": [
                {
                    "name": "STRATEGIES",
                    "value": "array (   '' => 0,   'defer' => 1,   'async' => 2, )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "PRIORITIES",
                    "value": "array (   'low' => 0,   'auto' => 1,   'high' => 2, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "assets",
                    "type": "Minn\\Runtime\\Assets",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "public",
                    "signature": "refusal(string $handle, string $key, mixed $value): ?array",
                    "doc": "Why a strategy or fetch priority value is refused, as the notice the\nreference gives; null when the value is fine (empty is fine).",
                    "shapes": [
                        "@return array{0: string, 1: string}|null the message and the version"
                    ],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "key",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "strategy",
                    "static": false,
                    "visibility": "public",
                    "signature": "strategy(string $handle, array $checked = array ( )): string",
                    "doc": "The strategy a script loads with: 'defer', 'async', or '' for blocking. @param array<string, true> $checked",
                    "shapes": [
                        "@param array<string, true> $checked"
                    ],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "checked",
                            "type": "array",
                            "shape": "array<string, true>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "heldForFooter",
                    "static": false,
                    "visibility": "public",
                    "signature": "heldForFooter(string $handle): bool",
                    "doc": "Whether the head pass holds a script for the footer: one that asked to\nbe delayed but has inline code after it, with nothing enqueued that\ndepends on it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "priority",
                    "static": false,
                    "visibility": "public",
                    "signature": "priority(string $handle): array",
                    "doc": "A script's own fetch priority and the one it loads with. @return array{0: string, 1: string}",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "raised",
                    "static": false,
                    "visibility": "private",
                    "signature": "raised(string $handle, string $priority, array $checked): string",
                    "doc": "",
                    "shapes": [
                        "@param array<string, true> $checked"
                    ],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "priority",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "checked",
                            "type": "array",
                            "shape": "array<string, true>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "ownPriority",
                    "static": false,
                    "visibility": "private",
                    "signature": "ownPriority(string $handle): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "enqueuedDependents",
                    "static": false,
                    "visibility": "private",
                    "signature": "enqueuedDependents(string $handle, array $checked): array",
                    "doc": "",
                    "shapes": [
                        "@param array<string, true> $checked @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "handle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "checked",
                            "type": "array",
                            "shape": "array<string, true>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 95,
                    "end": 98
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ScriptModules",
            "short": "ScriptModules",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ScriptModules.php",
            "lines": 303,
            "doc": "The script modules registry: registrations with typed dependencies, the\nqueue, and the four things a page prints from it (the import map, module\npreloads, the module tags split head/footer, and per-module JSON data).\nBehaviour pinned by the script-modules probe fixture.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": {
                "signature": "__construct(Closure $url, Closure $data)",
                "doc": "",
                "shapes": [
                    "@param Closure(string, string|false|null): string $url turns a src and version into the printed URL",
                    "@param Closure(string, array<string, mixed>): array<string, mixed> $data applies the module data filter"
                ],
                "params": [
                    {
                        "name": "url",
                        "type": "Closure",
                        "shape": "Closure(string, string|false|null): string",
                        "default": null,
                        "doc": "turns a src and version into the printed URL"
                    },
                    {
                        "name": "data",
                        "type": "Closure",
                        "shape": "Closure(string, array<string, mixed>): array<string, mixed>",
                        "default": null,
                        "doc": "applies the module data filter"
                    }
                ],
                "visibility": "public",
                "line": 33,
                "end": 35
            },
            "cases": [],
            "constants": [
                {
                    "name": "PRIORITIES",
                    "value": "array (   0 => 'high',   1 => 'low',   2 => 'auto', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "registered",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "queue",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "done",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "a11yAvailable",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "a11yPrinted",
                    "type": "bool",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "url",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "data",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": false,
                    "visibility": "public",
                    "signature": "register(string $id, string $src, array $deps, string|false|null $version, array $args): void",
                    "doc": "Registers a module by id.",
                    "shapes": [
                        "@param list<string|array{id: string, import?: string}> $deps"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "src",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deps",
                            "type": "array",
                            "shape": "list<string|array{id: string, import?: string}>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string|false|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "enqueue",
                    "static": false,
                    "visibility": "public",
                    "signature": "enqueue(string $id, string $src, array $deps, string|false|null $version, array $args): void",
                    "doc": "Queues a module, registering it when a source is given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "src",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deps",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string|false|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "dequeue",
                    "static": false,
                    "visibility": "public",
                    "signature": "dequeue(string $id): void",
                    "doc": "Removes a module from the queue.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "deregister",
                    "static": false,
                    "visibility": "public",
                    "signature": "deregister(string $id): void",
                    "doc": "Forgets a module.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "setFetchpriority",
                    "static": false,
                    "visibility": "public",
                    "signature": "setFetchpriority(string $id, string $priority): bool",
                    "doc": "Sets a module's fetch priority.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "priority",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "moveToFooter",
                    "static": false,
                    "visibility": "public",
                    "signature": "moveToFooter(string $id): bool",
                    "doc": "Moves a module to the footer or the head.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "moveToHead",
                    "static": false,
                    "visibility": "public",
                    "signature": "moveToHead(string $id): bool",
                    "doc": "Prints a module in the head; false when it is not registered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "queue",
                    "static": false,
                    "visibility": "public",
                    "signature": "queue(): array",
                    "doc": "The module ids queued.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 142,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "registered",
                    "static": false,
                    "visibility": "public",
                    "signature": "registered(string $id): ?array",
                    "doc": "One registered module, or null.",
                    "shapes": [
                        "@return array{src: string, version: string|false|null, dependencies: list<array{id: string, import: string}>, in_footer: bool, fetchpriority: string}|null"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "printImportMap",
                    "static": false,
                    "visibility": "public",
                    "signature": "printImportMap(): string",
                    "doc": "The import map script tag.",
                    "shapes": [],
                    "params": [],
                    "line": 163,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "printPreloads",
                    "static": false,
                    "visibility": "public",
                    "signature": "printPreloads(): string",
                    "doc": "The modulepreload links.",
                    "shapes": [],
                    "params": [],
                    "line": 176,
                    "end": 187
                },
                {
                    "routes": [],
                    "name": "printHead",
                    "static": false,
                    "visibility": "public",
                    "signature": "printHead(): string",
                    "doc": "The head's module tags.",
                    "shapes": [],
                    "params": [],
                    "line": 190,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "printFooter",
                    "static": false,
                    "visibility": "public",
                    "signature": "printFooter(): string",
                    "doc": "The footer's module tags.",
                    "shapes": [],
                    "params": [],
                    "line": 196,
                    "end": 199
                },
                {
                    "routes": [],
                    "name": "printData",
                    "static": false,
                    "visibility": "public",
                    "signature": "printData(): string",
                    "doc": "The script-module-data tags.",
                    "shapes": [],
                    "params": [],
                    "line": 202,
                    "end": 215
                },
                {
                    "routes": [],
                    "name": "printA11y",
                    "static": false,
                    "visibility": "public",
                    "signature": "printA11y(): string",
                    "doc": "The a11y module's tag, once.",
                    "shapes": [],
                    "params": [],
                    "line": 218,
                    "end": 225
                },
                {
                    "routes": [],
                    "name": "placeIn",
                    "static": false,
                    "visibility": "private",
                    "signature": "placeIn(string $id, string $where): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "where",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "printTags",
                    "static": false,
                    "visibility": "private",
                    "signature": "printTags(bool $footer): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "footer",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 248
                },
                {
                    "routes": [],
                    "name": "marked",
                    "static": false,
                    "visibility": "private",
                    "signature": "marked(): array",
                    "doc": "Queued modules that are registered with every dependency registered, in queue order.",
                    "shapes": [],
                    "params": [],
                    "line": 251,
                    "end": 260
                },
                {
                    "routes": [],
                    "name": "complete",
                    "static": false,
                    "visibility": "private",
                    "signature": "complete(string $id, array $seen): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $seen"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "seen",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 263,
                    "end": 275
                },
                {
                    "routes": [],
                    "name": "dependencies",
                    "static": false,
                    "visibility": "private",
                    "signature": "dependencies(array $ids, array $types): array",
                    "doc": "Every registered dependency of the given modules, depth first in\ndeclaration order, following only the given import types.",
                    "shapes": [
                        "@param list<string> $ids",
                        "@param list<string> $types",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "ids",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 285,
                    "end": 301
                },
                {
                    "routes": [],
                    "name": "urlOf",
                    "static": false,
                    "visibility": "private",
                    "signature": "urlOf(string $id): string",
                    "doc": "A module's address with its version, as plugins may change it (script_module_loader_src).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 304,
                    "end": 307
                },
                {
                    "routes": [],
                    "name": "attr",
                    "static": false,
                    "visibility": "private",
                    "signature": "attr(string $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 309,
                    "end": 312
                },
                {
                    "routes": [],
                    "name": "wrong",
                    "static": false,
                    "visibility": "private",
                    "signature": "wrong(string $function, string $message, string $version): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "function",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "message",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "version",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 314,
                    "end": 317
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ScriptPack",
            "short": "ScriptPack",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ScriptPack.php",
            "lines": 146,
            "doc": "The site-supplied script pack: the `wp-*` JavaScript packages the engine\ndoes not reimplement, which a few plugins' front ends need (WooCommerce's\nblock cart and checkout are the reason it exists).\n\nThese packages are GPL, so the engine never ships them: the SITE installs\nthem into its own `wp-content`, the way it installs a language pack, and\nthe engine registers the handles only when they are actually there. A\nsite owner adding GPL files to a site that already runs GPL plugins is\nnot the engine distributing GPL; nothing under `minn/` changes.\n\nThe engine's own MIT packages under `minn/assets/wp` always win: the pack\nfills the gaps around them, it does not replace them.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Cli\\MinnCommand"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "RELATIVE_DIR",
                    "value": "'minn-packages/wp-scripts'",
                    "doc": "Under the site's wp-content, so backups and migrations carry it.",
                    "visibility": "public"
                },
                {
                    "name": "MANIFEST",
                    "value": "'script-loader-packages.php'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "VENDOR",
                    "value": "array (   'lodash' =>    array (   ),   'moment' =>    array (   ),   'react' =>    array (   ),   'react-dom' =>    array (     0 => 'react',   ),   'react-jsx-runtime' =>    array (     0 => 'react',   ),   'regenerator-runtime' =>    array (   ),   'wp-polyfill' =>    array (   ),   'wp-polyfill-dom-rect' =>    array (   ),   'wp-polyfill-element-closest' =>    array (   ),   'wp-polyfill-fetch' =>    array (   ),   'wp-polyfill-formdata' =>    array (   ),   'wp-polyfill-inert' =>    array (   ),   'wp-polyfill-node-contains' =>    array (   ),   'wp-polyfill-object-fit' =>    array (   ),   'wp-polyfill-url' =>    array (   ), )",
                    "doc": "The vendor handles WordPress registers outside the packages manifest\n(captured from the reference). `moment` matters as much as `react`:\none unregistered handle anywhere in a dependency tree drops every\nscript above it, which is how a missing moment silently cost the\nwhole WooCommerce cart bundle.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "dir",
                    "static": true,
                    "visibility": "public",
                    "signature": "dir(string $contentDir): string",
                    "doc": "Where the script pack lives under wp-content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "installed",
                    "static": true,
                    "visibility": "public",
                    "signature": "installed(string $contentDir): bool",
                    "doc": "Whether the script pack is on disk.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "handles",
                    "static": true,
                    "visibility": "public",
                    "signature": "handles(string $contentDir): array",
                    "doc": "Every handle the pack can register: the packages manifest keyed by\n`name.js` becomes `wp-name`, plus the three vendor handles. A handle\nwhose file is missing from the pack is skipped rather than\nregistered against a 404.",
                    "shapes": [
                        "@return array<string, array{file: string, deps: list<string>, ver: string}>"
                    ],
                    "params": [
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "installFromTree",
                    "static": true,
                    "visibility": "public",
                    "signature": "installFromTree(string $contentDir, string $tree): array",
                    "doc": "Copies the packages out of a WordPress tree (or an unpacked core\ndownload) into the site's pack directory. Only the built JavaScript\nand the manifest are taken, and only from the paths they live at, so\na wrong source folder copies nothing rather than something odd.",
                    "shapes": [
                        "@return array{files: int, dir: string}"
                    ],
                    "params": [
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tree",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": true,
                    "visibility": "public",
                    "signature": "remove(string $contentDir): bool",
                    "doc": "Removes the pack; the engine's own packages keep working without it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "contentDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "stamp",
                    "static": true,
                    "visibility": "private",
                    "signature": "stamp(string $file): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 165
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Shortcodes",
            "short": "Shortcodes",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Shortcodes.php",
            "lines": 274,
            "doc": "The shortcode registry plugin code fills with add_shortcode, and the\nexpansion do_shortcode performs: [tag attrs], [tag attrs/], [tag]…[/tag]\n(the first closing tag wins; content is not expanded again), [[tag]] as\nthe literal, unregistered tags left as written.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Html",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\KsesAttributes"
            ],
            "usedBy": [
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ATTRIBUTES",
                    "value": "'/([\\\\w-]+)\\\\s*=\\\\s*\"([^\"]*)\"(?:\\\\s|$)|([\\\\w-]+)\\\\s*=\\\\s*\\'([^\\']*)\\'(?:\\\\s|$)|([\\\\w-]+)\\\\s*=\\\\s*([^\\\\s\\'\"]+)(?:\\\\s|$)|\"([^\"]*)\"(?:\\\\s|$)|\\'([^\\']*)\\'(?:\\\\s|$)|(\\\\S+)(?:\\\\s|$)/'",
                    "doc": "The attribute pattern shortcode_parse_atts reads by (get_shortcode_atts_regex).",
                    "visibility": "public"
                },
                {
                    "name": "SET_ASIDE",
                    "value": "array (   '[' => '&#91;',   ']' => '&#93;', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "RESTORE",
                    "value": "array (   '&#91;' => '[',   '&#93;' => ']', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "tags",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "tags",
                    "static": false,
                    "visibility": "public",
                    "signature": "tags(): array",
                    "doc": "The registry itself, by reference, so the $shortcode_tags global plugin\ncode reads and copies is this array and not a snapshot of it.",
                    "shapes": [
                        "@return array<string, callable>"
                    ],
                    "params": [],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "add",
                    "static": false,
                    "visibility": "public",
                    "signature": "add(string $tag, callable $callback): void",
                    "doc": "Registers a shortcode.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "callback",
                            "type": "callable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": false,
                    "visibility": "public",
                    "signature": "remove(string $tag): void",
                    "doc": "Forgets a shortcode.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "removeAll",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeAll(): void",
                    "doc": "Forgets every shortcode.",
                    "shapes": [],
                    "params": [],
                    "line": 42,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": false,
                    "visibility": "public",
                    "signature": "has(string $tag): bool",
                    "doc": "Whether a shortcode is registered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every shortcode with its callback.",
                    "shapes": [
                        "@return array<string, callable> every registered tag and its handler, to restore after a narrowed run"
                    ],
                    "params": [],
                    "line": 58,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "restore",
                    "static": false,
                    "visibility": "public",
                    "signature": "restore(array $tags): void",
                    "doc": "Replaces the registry, after a save-and-restore.",
                    "shapes": [
                        "@param array<string, callable> $tags"
                    ],
                    "params": [
                        {
                            "name": "tags",
                            "type": "array",
                            "shape": "array<string, callable>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "names",
                    "static": false,
                    "visibility": "public",
                    "signature": "names(): array",
                    "doc": "Every shortcode name.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 78,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "pattern",
                    "static": false,
                    "visibility": "public",
                    "signature": "pattern(?array $tags = NULL): ?string",
                    "doc": "The regex matching the registered shortcodes, or null for none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tags",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 84,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "apply",
                    "static": false,
                    "visibility": "public",
                    "signature": "apply(string $content, string $tags = 'run'): string",
                    "doc": "Content with its shortcodes run (do_shortcode, probe shortcode-run):\nonly the registered names the text holds; inside HTML tags first\n(inTags: run, or with 'escape' as with ignore_html, left alone),\nthen in the text, each through run(); the brackets set aside as\nentities come back at the end. Images rendered meanwhile see the\ndo_shortcode context.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tags",
                            "type": "string",
                            "shape": "",
                            "default": "'run'",
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(array $m): string",
                    "doc": "One matched shortcode (do_shortcode_tag): [[tag]] gives the tag as\nwritten; otherwise pre_do_shortcode_tag may answer, or the callback\nruns with the attributes, the content (\"\" when it closes itself) and\nthe name, and do_shortcode_tag sees the output in its brackets.",
                    "shapes": [
                        "@param array<int, string> $m the pattern's match"
                    ],
                    "params": [
                        {
                            "name": "m",
                            "type": "array",
                            "shape": "array<int, string>",
                            "default": null,
                            "doc": "the pattern's match"
                        }
                    ],
                    "line": 129,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "inTags",
                    "static": false,
                    "visibility": "public",
                    "signature": "inTags(string $content, string $tags, array $names): string",
                    "doc": "Shortcodes inside HTML tags (do_shortcodes_in_html_tags), run before\nthe text: a quoted attribute value's shortcode runs and the attribute\nis judged again by kses, kept when anything is left; an unquoted one\n(or one standing as a name or as the tag) runs as written. Comments,\nCDATA and, with 'escape', every tag are left alone. Brackets left in a\ntag (and entities already written for them) are set aside so the text\npass cannot reach them.",
                    "shapes": [
                        "@param list<string> $names"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tags",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 184
                },
                {
                    "routes": [],
                    "name": "strip",
                    "static": false,
                    "visibility": "public",
                    "signature": "strip(string $content): string",
                    "doc": "Content with its shortcodes taken out (strip_shortcodes): the names\nstrip_shortcodes_tagnames leaves, never inside a tag; [[tag]] gives\nthe tag as written.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "stripped",
                    "static": true,
                    "visibility": "public",
                    "signature": "stripped(array $m): string",
                    "doc": "One matched shortcode taken out (strip_shortcode_tag): its outer brackets stay, [[tag]] gives the tag. @param array<int, string> $m",
                    "shapes": [
                        "@param array<int, string> $m"
                    ],
                    "params": [
                        {
                            "name": "m",
                            "type": "array",
                            "shape": "array<int, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 203,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $text): array",
                    "doc": "Shortcode attribute text as an array (shortcode_parse_atts): no-break\nand zero-width spaces read as spaces; name=value pairs (names lower\ncase) and bare values in order, each a token followed by whitespace\nor the end, backslash escapes undone; a value holding \"<\" that is not\nwhole tags becomes \"\".",
                    "shapes": [
                        "@return array<int|string, string>"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 217,
                    "end": 236
                },
                {
                    "routes": [],
                    "name": "present",
                    "static": false,
                    "visibility": "private",
                    "signature": "present(string $content, array $names): array",
                    "doc": "The names among those given that the text opens a bracket with.",
                    "shapes": [
                        "@param list<string> $names",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 250,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "attributesRun",
                    "static": true,
                    "visibility": "private",
                    "signature": "attributesRun(array $parts, Closure $run): string",
                    "doc": "A tag's attributes with their shortcodes run, from elementParts().",
                    "shapes": [
                        "@param list<string> $parts"
                    ],
                    "params": [
                        {
                            "name": "parts",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "run",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 264,
                    "end": 285
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\StoredObjects",
            "short": "StoredObjects",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/StoredObjects.php",
            "lines": 64,
            "doc": "The classes a stored blob may name and come back as. The serialized\nreader never instantiates; the facade registers one factory per value\nclass it owns (WP_Post, WP_Term, WP_Comment) and a record naming any\nother class stays a stdClass of its properties. That is what lets a\ntransient the reference wrote, holding post objects, read back typed.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\Options"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "WRAPPERS",
                    "value": "array (   'arrayobject' => 'ArrayObject',   'arrayiterator' => 'ArrayIterator',   'recursivearrayiterator' => 'RecursiveArrayIterator', )",
                    "doc": "PHP's array wrappers a stored record may name, by lower-cased class name.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "factories",
                    "type": "array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(string $class, Closure $factory): void",
                    "doc": "Registers what a record naming this class becomes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "factory",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "reviver",
                    "static": true,
                    "visibility": "public",
                    "signature": "reviver(): Closure",
                    "doc": "The reviver the serialized reader takes: PHP's array wrappers rebuilt, a factory's object, or the properties as they are.",
                    "shapes": [],
                    "params": [],
                    "line": 29,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "knows",
                    "static": true,
                    "visibility": "public",
                    "signature": "knows(string $class): bool",
                    "doc": "Whether a factory is registered for the class.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "reset",
                    "static": true,
                    "visibility": "public",
                    "signature": "reset(): void",
                    "doc": "Forgets every factory, for suites.",
                    "shapes": [],
                    "params": [],
                    "line": 73,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "arrayWrapper",
                    "static": true,
                    "visibility": "private",
                    "signature": "arrayWrapper(string $class, stdClass $properties): ?object",
                    "doc": "PHP's own array wrappers, stored as their four numbered parts (flags,\nstorage, member properties, iterator class), rebuilt through their\nconstructors so nothing else runs. Plugins keep settings in them\n(CleanTalk does), and the reference reads them back as the real class;\nwritten back, they serialize to the same bytes. One wrapping an object,\nor carrying member properties, stays a record of its parts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "class-string<\\ArrayObject|\\ArrayIterator>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "properties",
                            "type": "stdClass",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 64
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\SymbolGap",
            "short": "SymbolGap",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/SymbolGap.php",
            "lines": 196,
            "doc": "The part of the reference's interface the runtime does not answer: names in\ndata/api-names.json that no facade file defines. It is the whole input the\nsymbol gate needs, so it can be exported to JSON and carried to a machine\nthat holds plugin source but no engine, which is how the catalogue-wide\ncompatibility scan runs.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Cli\\Preflight",
                "Minn\\Runtime\\Symbols"
            ],
            "constructor": {
                "signature": "__construct(array $functions, array $classes, array $known = array ( ), array $pluggable = array ( ))",
                "doc": "",
                "shapes": [
                    "@param array<string, true> $functions lower-cased function names the runtime lacks",
                    "@param array<string, true> $classes lower-cased class, interface, trait, and enum names it lacks",
                    "@param array<string, true> $known lower-cased function names in the reference's interface, lacking or not",
                    "@param array<string, true> $pluggable lower-cased pluggable functions the runtime defines after the plugins load"
                ],
                "params": [
                    {
                        "name": "functions",
                        "type": "array",
                        "shape": "array<string, true>",
                        "default": null,
                        "doc": "lower-cased function names the runtime lacks"
                    },
                    {
                        "name": "classes",
                        "type": "array",
                        "shape": "array<string, true>",
                        "default": null,
                        "doc": "lower-cased class, interface, trait, and enum names it lacks"
                    },
                    {
                        "name": "known",
                        "type": "array",
                        "shape": "array<string, true>",
                        "default": "array ( )",
                        "doc": "lower-cased function names in the reference's interface, lacking or not"
                    },
                    {
                        "name": "pluggable",
                        "type": "array",
                        "shape": "array<string, true>",
                        "default": "array ( )",
                        "doc": "lower-cased pluggable functions the runtime defines after the plugins load"
                    }
                ],
                "visibility": "private",
                "line": 24,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "functions",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "classes",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "known",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "pluggable",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "ofLoadedFacade",
                    "static": true,
                    "visibility": "public",
                    "signature": "ofLoadedFacade(string $engineDir): self",
                    "doc": "Reads the reference's interface and subtracts everything the loaded facade\ndefines. A plugin may define a name as it loads, so each call asks again,\nbut only about the names still lacking: a name once defined stays defined,\nand asking about all four thousand for every plugin was a cost of its own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "ofShippedFacade",
                    "static": true,
                    "visibility": "public",
                    "signature": "ofShippedFacade(string $engineDir): self",
                    "doc": "The gap read from the engine's own files without loading them, for a\nmachine that has the engine but runs no site with it yet (preflight): a\nname counts as defined when a facade file declares it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "engineDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "fromFile",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromFile(string $path): self",
                    "doc": "The gap read from its JSON file.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 175
                },
                {
                    "routes": [],
                    "name": "lacksFunction",
                    "static": false,
                    "visibility": "public",
                    "signature": "lacksFunction(string $name): bool",
                    "doc": "Whether the runtime lacks a function.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 178,
                    "end": 181
                },
                {
                    "routes": [],
                    "name": "defines",
                    "static": false,
                    "visibility": "public",
                    "signature": "defines(string $name): bool",
                    "doc": "Whether the runtime already defines a function of the reference's\ninterface, so a plugin declaring it again without a guard would fail\nto compile. The pluggable functions are not counted: the runtime\ndefines those after the plugins load, each only where no plugin did.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "lacksClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "lacksClass(string $name): bool",
                    "doc": "Whether the runtime lacks a class.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 199
                },
                {
                    "routes": [],
                    "name": "json",
                    "static": false,
                    "visibility": "public",
                    "signature": "json(): string",
                    "doc": "The gap as JSON.",
                    "shapes": [],
                    "params": [],
                    "line": 202,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "typeExists",
                    "static": true,
                    "visibility": "private",
                    "signature": "typeExists(string $name): bool",
                    "doc": "Whether a class, interface, trait or enum of this name is defined.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "declaredIn",
                    "static": true,
                    "visibility": "private",
                    "signature": "declaredIn(string $source): array",
                    "doc": "The global functions and the classes (with their namespace) one file\ndeclares, lower-cased; a method, a closure and an anonymous class are\nnot declarations.",
                    "shapes": [
                        "@return array{0: array<string, true>, 1: array<string, true>}"
                    ],
                    "params": [
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 162
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\SymbolTable",
            "short": "SymbolTable",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/SymbolTable.php",
            "lines": 69,
            "doc": "What a folder's PHP names, collected while its tokens are read: the\nfunctions it calls, the classes it references, and what it declares or\nguards itself, so the gate can subtract those before judging it.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\Symbols"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "calls",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "classes",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "declared",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "declaredGlobal",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "declaredClasses",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "guarded",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "call",
                    "static": false,
                    "visibility": "public",
                    "signature": "call(string $name): void",
                    "doc": "Notes a function called.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "classRef",
                    "static": false,
                    "visibility": "public",
                    "signature": "classRef(string $name): void",
                    "doc": "Notes a class referenced.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "declare",
                    "static": false,
                    "visibility": "public",
                    "signature": "declare(string $function): void",
                    "doc": "Notes a function the folder declares, a method included: a call by that name is not a need.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "function",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "declareGlobal",
                    "static": false,
                    "visibility": "public",
                    "signature": "declareGlobal(string $function): void",
                    "doc": "Notes a function declared in the global scope, which the runtime must not already define.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "function",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "declareClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "declareClass(string $class): void",
                    "doc": "Notes a class the folder declares.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "guard",
                    "static": false,
                    "visibility": "public",
                    "signature": "guard(string $name): void",
                    "doc": "A name an existence check protects: function_exists, class_exists, defined, and the rest.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "toArray",
                    "static": false,
                    "visibility": "public",
                    "signature": "toArray(bool $truncated): array",
                    "doc": "The table as the gate reads it.",
                    "shapes": [
                        "@return array{calls: list<string>, classes: list<string>, declared: array<string, true>, declaredGlobal: array<string, true>, declaredClasses: array<string, true>, guarded: array<string, true>, truncated: bool}"
                    ],
                    "params": [
                        {
                            "name": "truncated",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 79
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Symbols",
            "short": "Symbols",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Symbols.php",
            "lines": 391,
            "doc": "A static read of what a plugin's PHP calls: global functions and classes\nit uses but does not itself declare, minus the ones it guards with\nfunction_exists() or class_exists(). Checked against what the runtime\nprovides, this decides whether a plugin loads at all.\n\nThe read is cached in the minn_runtime_symbols option, keeping only the\nreference's own names (all a verdict reads). An entry is trusted while\nthe folder's fingerprint (its own time and its top-level files' newest)\nholds, for up to FULL_CHECK_EVERY seconds; then the whole folder is\nwalked again, as an update replaces it. Installing, updating or\nactivating a plugin walks its folder at once (recheck()). Walking every\nfolder on every request cost hundreds of milliseconds on a site with\nmany plugins.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\SymbolGap",
                "Minn\\Runtime\\SymbolTable"
            ],
            "usedBy": [
                "Minn\\Cli\\Preflight",
                "Minn\\Runtime\\Plugins",
                "Minn\\Runtime\\Upgrade"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "MAX_FILES",
                    "value": "6000",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SKIP_DIRS",
                    "value": "array (   0 => 'node_modules',   1 => 'tests',   2 => 'test',   3 => '.git', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "READER",
                    "value": "3",
                    "doc": "Bumped whenever the token reader changes, so every cached scan is made again.",
                    "visibility": "private"
                },
                {
                    "name": "FULL_CHECK_EVERY",
                    "value": "300",
                    "doc": "How long a cached entry is trusted on its fingerprint alone before the folder is walked again.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "pending",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "missing",
                    "static": true,
                    "visibility": "public",
                    "signature": "missing(string $dir, Minn\\Runtime\\Options $options): array",
                    "doc": "What a plugin folder needs that the runtime lacks, cached by mtime.",
                    "shapes": [
                        "@return array{functions: list<string>, classes: list<string>, redeclares: list<string>, files: int, truncated: bool}"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "Minn\\Runtime\\Options",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 39,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "recheck",
                    "static": true,
                    "visibility": "public",
                    "signature": "recheck(string $dir, Minn\\Runtime\\Options $options): void",
                    "doc": "The folder is walked again at its next check instead of trusted on its\nfingerprint: an install, an update or an activation never waits out\nthe window. The walk still keeps the cached read when nothing changed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "Minn\\Runtime\\Options",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "redeclaresIn",
                    "static": true,
                    "visibility": "public",
                    "signature": "redeclaresIn(string $file): array",
                    "doc": "The functions one file declares in the global scope, unguarded, that the\nloaded runtime already defines: including that file would not compile.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "missingAgainst",
                    "static": true,
                    "visibility": "public",
                    "signature": "missingAgainst(string $dir, Minn\\Runtime\\SymbolGap $gap): array",
                    "doc": "The same read against an exported gap instead of the running engine, so a\nfolder can be judged with no database, no options, and no facade loaded.",
                    "shapes": [
                        "@return array{functions: list<string>, classes: list<string>, redeclares: list<string>, files: int, truncated: bool}"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "Minn\\Runtime\\SymbolGap",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "survey",
                    "static": true,
                    "visibility": "public",
                    "signature": "survey(string $dir, Minn\\Runtime\\SymbolGap $gap, array $deadEnds): array",
                    "doc": "What a folder needs and what it reaches that Minn answers with nothing,\nin one read, for a machine judging a site before the engine runs it\n(preflight): the gate's verdict against the gap given, and the dead\nends it calls (the wp-admin screens, the editors, the Customizer,\nXML-RPC, what was left out), by area. A call the folder guards or\nanswers itself is not counted, as the gate counts it.",
                    "shapes": [
                        "@param array{functions?: array<string, string>, classes?: array<string, string>} $deadEnds name => area, as data/deadend-symbols.json holds them",
                        "@return array{functions: list<string>, classes: list<string>, redeclares: list<string>, files: int, truncated: bool, deadEnds: array<string, list<string>>}"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "Minn\\Runtime\\SymbolGap",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "deadEnds",
                            "type": "array",
                            "shape": "array{functions?: array<string, string>, classes?: array<string, string>}",
                            "default": null,
                            "doc": "name => area, as data/deadend-symbols.json holds them"
                        }
                    ],
                    "line": 169,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "keep",
                    "static": true,
                    "visibility": "private",
                    "signature": "keep(array $cache, Minn\\Runtime\\Options $options): void",
                    "doc": "The cache changed this request: written once, when the request ends.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "cache",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "Minn\\Runtime\\Options",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "fingerprint",
                    "static": true,
                    "visibility": "private",
                    "signature": "fingerprint(string $dir): string",
                    "doc": "A folder's cheap fingerprint: its own time and its top-level PHP files' newest (an update replaces the folder; a version bumps the main file).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 102
                },
                {
                    "routes": [],
                    "name": "namesStamp",
                    "static": true,
                    "visibility": "private",
                    "signature": "namesStamp(): string",
                    "doc": "The reference names a reduced scan was kept against: a new interface (a WordPress update) makes every scan again.",
                    "shapes": [],
                    "params": [],
                    "line": 105,
                    "end": 109
                },
                {
                    "routes": [],
                    "name": "reduced",
                    "static": true,
                    "visibility": "private",
                    "signature": "reduced(array $scan): array",
                    "doc": "A scan cut to the reference's own names, the only ones a verdict asks about.",
                    "shapes": [
                        "@param array<string, mixed> $scan",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "scan",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "verdict",
                    "static": true,
                    "visibility": "private",
                    "signature": "verdict(array $scan, int $files, Minn\\Runtime\\SymbolGap $gap): array",
                    "doc": "Only the reference's own interface counts: a function or class the plugin\nneeds from WordPress. Its own integrations with other plugins and PHP\nextensions are its business.",
                    "shapes": [
                        "@param array{calls: list<string>, classes: list<string>, declared: array<string, true>, declaredClasses: array<string, true>, guarded: array<string, true>, truncated: bool} $scan",
                        "@return array{functions: list<string>, classes: list<string>, redeclares: list<string>, files: int, truncated: bool}"
                    ],
                    "params": [
                        {
                            "name": "scan",
                            "type": "array",
                            "shape": "array{calls: list<string>, classes: list<string>, declared: array<string, true>, declaredClasses: array<string, true>, guarded: array<string, true>, truncated: bool}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "files",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "Minn\\Runtime\\SymbolGap",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 203,
                    "end": 234
                },
                {
                    "routes": [],
                    "name": "phpFiles",
                    "static": true,
                    "visibility": "private",
                    "signature": "phpFiles(string $dir): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 237,
                    "end": 257
                },
                {
                    "routes": [],
                    "name": "scan",
                    "static": true,
                    "visibility": "private",
                    "signature": "scan(array $files): array",
                    "doc": "Every file's tokens into one table: the functions called, the classes\nreferenced, both minus what the folder declares itself or guards with\nan existence check.",
                    "shapes": [
                        "@param list<string> $files",
                        "@return array{calls: list<string>, classes: list<string>, declared: array<string, true>, declaredClasses: array<string, true>, guarded: array<string, true>, truncated: bool}"
                    ],
                    "params": [
                        {
                            "name": "files",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 287
                },
                {
                    "routes": [],
                    "name": "scanTokens",
                    "static": true,
                    "visibility": "private",
                    "signature": "scanTokens(array $tokens, Minn\\Runtime\\SymbolTable $table): void",
                    "doc": "",
                    "shapes": [
                        "@param list<array{0: int, 1: string, 2: int}|string> $tokens"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<array{0: int, 1: string, 2: int}|string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "Minn\\Runtime\\SymbolTable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 290,
                    "end": 356
                },
                {
                    "routes": [],
                    "name": "noteName",
                    "static": true,
                    "visibility": "private",
                    "signature": "noteName(array $tokens, int $i, bool $namespaced, Minn\\Runtime\\SymbolTable $table): void",
                    "doc": "A name token: a class reference when it follows new / extends /\nimplements / instanceof or precedes ::, a call when it precedes \"(\",\nand a guard when the call is an existence check on a literal.",
                    "shapes": [
                        "@param list<array{0: int, 1: string, 2: int}|string> $tokens"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<array{0: int, 1: string, 2: int}|string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "i",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "namespaced",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "table",
                            "type": "Minn\\Runtime\\SymbolTable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 365,
                    "end": 397
                },
                {
                    "routes": [],
                    "name": "significant",
                    "static": true,
                    "visibility": "private",
                    "signature": "significant(array $tokens, int $from, int $step): ?array",
                    "doc": "The nearest token in either direction that is not whitespace or a comment, as [id, text]. @param list<array|string> $tokens @return array{0: ?int, 1: string}|null",
                    "shapes": [
                        "@param list<array|string> $tokens @return array{0: ?int, 1: string}|null"
                    ],
                    "params": [
                        {
                            "name": "tokens",
                            "type": "array",
                            "shape": "list<array|string>",
                            "default": null,
                            "doc": "@return array{0: ?int, 1: string}|null"
                        },
                        {
                            "name": "from",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "step",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 400,
                    "end": 411
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TagEditor",
            "short": "TagEditor",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TagEditor.php",
            "lines": 152,
            "doc": "Edits one start tag's attributes in place the way the reference's tag\nprocessor does: a replaced value keeps its position, a new attribute goes\nright after the tag name (after any earlier insertion), and a removal takes\nonly the attribute's own text.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Runtime\\Interactivity"
            ],
            "constructor": {
                "signature": "__construct(string $tag, array $attrs)",
                "doc": "",
                "shapes": [
                    "@param list<array{name: string, value: ?string, start: int, end: int}> $attrs offsets relative to the tag"
                ],
                "params": [
                    {
                        "name": "tag",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "attrs",
                        "type": "array",
                        "shape": "list<array{name: string, value: ?string, start: int, end: int}>",
                        "default": null,
                        "doc": "offsets relative to the tag"
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 29
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "attrs",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "tag",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "insertAt",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "get",
                    "static": false,
                    "visibility": "public",
                    "signature": "get(string $name): ?string",
                    "doc": "An attribute's value, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "has",
                    "static": false,
                    "visibility": "public",
                    "signature": "has(string $name): bool",
                    "doc": "Whether the tag has an attribute.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "set",
                    "static": false,
                    "visibility": "public",
                    "signature": "set(string $name, string|bool $value): void",
                    "doc": "true sets a bare boolean attribute; a URL attribute (href, src, ...) keeps only a URL whose scheme is allowed, as the reference's set_attribute keeps it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string|bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": false,
                    "visibility": "public",
                    "signature": "remove(string $name): void",
                    "doc": "Removes an attribute.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "addClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "addClass(string $class): void",
                    "doc": "Adds or removes a class.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "removeClass",
                    "static": false,
                    "visibility": "public",
                    "signature": "removeClass(string $class): void",
                    "doc": "Removes a class, and the attribute when it was the last one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "setStyle",
                    "static": false,
                    "visibility": "public",
                    "signature": "setStyle(string $property, ?string $value): void",
                    "doc": "Sets or removes one inline style property.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "property",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 121,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "html",
                    "static": false,
                    "visibility": "public",
                    "signature": "html(): string",
                    "doc": "The tag as edited.",
                    "shapes": [],
                    "params": [],
                    "line": 147,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "classes",
                    "static": false,
                    "visibility": "private",
                    "signature": "classes(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 104,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "setClasses",
                    "static": false,
                    "visibility": "private",
                    "signature": "setClasses(array $classes): void",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $classes"
                    ],
                    "params": [
                        {
                            "name": "classes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 118
                },
                {
                    "routes": [],
                    "name": "splice",
                    "static": false,
                    "visibility": "private",
                    "signature": "splice(int $start, int $end, string $text): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "start",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "end",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 165
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermEvents",
            "short": "TermEvents",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/TermEvents.php",
            "lines": 114,
            "doc": "What the reference's REST terms controller tells plugins, for the\nengine's own: with plugins loaded a term is saved as that controller\nsaves one (rest_pre_insert_{taxonomy}, then the runtime's wp_insert_term\nor wp_update_term, and wp_delete_term), and the REST actions follow.\nWithout a booted runtime each write is the engine's own.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Request",
                "Minn\\RestError",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [
                "Minn\\Rest\\TermsController",
                "Minn\\Runtime\\MenuEvents"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "live",
                    "static": false,
                    "visibility": "public",
                    "signature": "live(): bool",
                    "doc": "Whether plugins are loaded to be told anything.",
                    "shapes": [],
                    "params": [],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "restCreate",
                    "static": false,
                    "visibility": "public",
                    "signature": "restCreate(string $taxonomy, array $body, Minn\\Http\\Request $request): int",
                    "doc": "A term created over REST with plugins loaded, as the reference's\ncontroller creates one (probe rest-term-save): the request's fields\nas the prepared term, through rest_pre_insert_{taxonomy}, into\nwp_insert_term; a refusal is its REST error.",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 38,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "restUpdate",
                    "static": false,
                    "visibility": "public",
                    "signature": "restUpdate(int $termId, string $taxonomy, array $body, Minn\\Http\\Request $request): void",
                    "doc": "A term changed over REST with plugins loaded: the fields the request\nsends, through rest_pre_insert_{taxonomy}, into wp_update_term (when\nany are left); a refusal is its REST error.",
                    "shapes": [
                        "@param array<string, mixed> $body"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(int $termId, string $taxonomy, array $data, Minn\\Http\\Request $request, Closure $quietly): void",
                    "doc": "Deletes a term, then tells plugins over REST with the term as it was and the response.",
                    "shapes": [
                        "@param array<string, mixed> $data the response",
                        "@param Closure(): void $quietly the engine's own delete"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the response"
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quietly",
                            "type": "Closure",
                            "shape": "Closure(): void",
                            "default": null,
                            "doc": "the engine's own delete"
                        }
                    ],
                    "line": 111,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "restSaved",
                    "static": false,
                    "visibility": "public",
                    "signature": "restSaved(int $termId, string $taxonomy, Minn\\Http\\Request $request, string $verb): void",
                    "doc": "rest_insert_{taxonomy}, then rest_after_insert_{taxonomy}, with the term as it stands and the request.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "verb",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 134
                },
                {
                    "routes": [],
                    "name": "prepared",
                    "static": true,
                    "visibility": "private",
                    "signature": "prepared(string $taxonomy, array $body, Minn\\Http\\Request $request): array",
                    "doc": "The prepared term: the fields the request sends, in the reference's\norder, the name and slug cleaned as its schema cleans them; then\nrest_pre_insert_{taxonomy}.",
                    "shapes": [
                        "@param array<string, mixed> $body",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "body",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "refusal",
                    "static": true,
                    "visibility": "private",
                    "signature": "refusal(WP_Error $error): Minn\\RestError",
                    "doc": "A save's refusal as REST serves it: a name in use with the term's id, anything else with its own status or 500.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "error",
                            "type": "WP_Error",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 103
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermFields",
            "short": "TermFields",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TermFields.php",
            "lines": 65,
            "doc": "A term's fields in a context, as the reference's sanitize_term_field\ntreats them (probe term-sanitize): the numeric fields are whole numbers,\nnever below zero, in every context, and raw stops there. edit runs\nedit_term_{field} and edit_{taxonomy}_{field}; db runs pre_term_{field}\nand pre_{taxonomy}_{field}, where the saving defaults live, and a slug\nalso pre_category_nicename; rss runs term_{field}_rss and\n{taxonomy}_{field}_rss; any other context runs term_{field} and\n{taxonomy}_{field} with the context named. Then a text field is escaped\nfor where it goes: a form (edit), an attribute, a script (js).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Front\\FeedTags",
                "Minn\\Runtime\\PostQueryTax",
                "Minn\\Runtime\\TermQueryRunner"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FIELDS",
                    "value": "array (   0 => 'term_id',   1 => 'name',   2 => 'description',   3 => 'slug',   4 => 'count',   5 => 'parent',   6 => 'term_group',   7 => 'term_taxonomy_id',   8 => 'object_id', )",
                    "doc": "The fields sanitize_term runs, in its order.",
                    "visibility": "public"
                },
                {
                    "name": "NUMBERS",
                    "value": "array (   0 => 'parent',   1 => 'term_id',   2 => 'count',   3 => 'term_group',   4 => 'term_taxonomy_id',   5 => 'object_id', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "ESCAPES",
                    "value": "array (   'edit' => 'esc_html',   'attribute' => 'esc_attr',   'js' => 'esc_js', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "field",
                    "static": true,
                    "visibility": "public",
                    "signature": "field(string $field, mixed $value, int $termId, string|false $taxonomy, string $context): mixed",
                    "doc": "One field's value in a context; a lookup with no taxonomy names false, and its filters get false.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": true,
                    "visibility": "public",
                    "signature": "term(object|array $term, string $taxonomy, string $context): object|array",
                    "doc": "A term (object or array) with each of its fields in the context, and\nits filter set to the context; the term's own id goes to the filters.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "object|array",
                            "shape": "T",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "filtered",
                    "static": true,
                    "visibility": "private",
                    "signature": "filtered(string $field, mixed $value, int $termId, string|false $taxonomy, string $context): mixed",
                    "doc": "The field's own filters for the context, in the reference's order.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "saving",
                    "static": true,
                    "visibility": "private",
                    "signature": "saving(string $field, mixed $value, string|false $taxonomy): mixed",
                    "doc": "The db context's filters: the field's, the taxonomy's, and a slug's old category one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 81
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermOrder",
            "short": "TermOrder",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TermOrder.php",
            "lines": 61,
            "doc": "A term query's ORDER BY as the reference writes it (probe\nwp-term-query-sql): term and taxonomy columns, the relationship's order,\nthe order include or slug lists give, none, or the name; then\nget_terms_orderby, and after it a meta key or meta_value[_num] when the\nquery has meta clauses.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Runtime\\TermQueryRunner"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TERM_COLUMNS",
                    "value": "array (   0 => 'term_id',   1 => 'name',   2 => 'slug',   3 => 'term_group', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TAXONOMY_COLUMNS",
                    "value": "array (   0 => 'count',   1 => 'parent',   2 => 'taxonomy',   3 => 'term_taxonomy_id',   4 => 'description', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "direction",
                    "static": true,
                    "visibility": "public",
                    "signature": "direction(mixed $order): string",
                    "doc": "ASC when asked for, DESC for anything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "order",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "clause",
                    "static": true,
                    "visibility": "public",
                    "signature": "clause(WP_Term_Query $query, string $raw): string",
                    "doc": "The ORDER BY body for an orderby value, filtered as the reference filters it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Term_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": true,
                    "visibility": "public",
                    "signature": "meta(WP_Term_Query $query, string $orderby): string",
                    "doc": "A meta key, meta_value[_num] or a named meta clause as SQL (parse_orderby_meta), or '' when the query has no such clause.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Term_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "orderby",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 75
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermQuery",
            "short": "TermQuery",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/TermQuery.php",
            "lines": 376,
            "doc": "Term reads in the shapes plugin code asks for: get_terms() arguments to\nrows, the tree filters (child_of, exclude_tree), the fields shapes, and\nthe single-term lookups. Behaviour pinned by contracts/fixtures/api/content.json.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\RowCache",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Runtime\\TermWriter"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Closure $slug)",
                "doc": "",
                "shapes": [
                    "@param Closure(string): string $slug the slug sanitiser, so the reference's filters apply"
                ],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "slug",
                        "type": "Closure",
                        "shape": "Closure(string): string",
                        "default": null,
                        "doc": "the slug sanitiser, so the reference's filters apply"
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 25
            },
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULTS",
                    "value": "array (   'taxonomy' => NULL,   'object_ids' => NULL,   'orderby' => 'name',   'order' => 'ASC',   'hide_empty' => true,   'include' =>    array (   ),   'exclude' =>    array (   ),   'exclude_tree' =>    array (   ),   'number' => '',   'offset' => '',   'fields' => 'all',   'count' => false,   'name' => '',   'slug' => '',   'term_taxonomy_id' => '',   'hierarchical' => true,   'search' => '',   'name__like' => '',   'description__like' => '',   'pad_counts' => false,   'get' => '',   'child_of' => 0,   'parent' => '',   'childless' => false,   'cache_domain' => 'core',   'update_term_meta_cache' => true,   'meta_query' => '',   'meta_key' => '',   'meta_value' => '', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "COLUMNS",
                    "value": "'t.term_id, t.name, t.slug, t.term_group, tt.term_taxonomy_id, tt.taxonomy, tt.description, tt.parent, tt.count'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "slug",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "row",
                    "static": false,
                    "visibility": "public",
                    "signature": "row(int $termId, ?string $taxonomy): ?array",
                    "doc": "A term row joined with its taxonomy row, by id (and taxonomy when known). @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(string $field, mixed $value, ?string $taxonomy): ?array",
                    "doc": "The term id and taxonomy a field value names; null when nothing matches\nor the field is not one a term can be found by.",
                    "shapes": [
                        "@return array{term_id: int, taxonomy: string}|null"
                    ],
                    "params": [
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "exists",
                    "static": false,
                    "visibility": "public",
                    "signature": "exists(string|int $term, ?string $taxonomy, ?int $parent): ?array",
                    "doc": "Whether a term (by id, or by slug or name) exists, optionally under a\ntaxonomy and parent; the ids when it does.",
                    "shapes": [
                        "@return array{term_id: int, term_taxonomy_id: int}|null"
                    ],
                    "params": [
                        {
                            "name": "term",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "lookup",
                    "static": false,
                    "visibility": "public",
                    "signature": "lookup(string $field, string $value, ?string $taxonomy, ?int $parent): ?array",
                    "doc": "The term whose slug or name (as stored) is exactly the value,\noptionally in a taxonomy and under a parent (0 for the top level).",
                    "shapes": [
                        "@return array{term_id: int, term_taxonomy_id: int}|null"
                    ],
                    "params": [
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 130
                },
                {
                    "routes": [],
                    "name": "hasChildren",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasChildren(int $parent, ?array $taxonomies): bool",
                    "doc": "Whether any term in the taxonomies (any taxonomy for null) sits\nunder the parent: the reference answers a lookup under a childless\nparent with nothing before it looks.",
                    "shapes": [
                        "@param list<string>|null $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "?array",
                            "shape": "list<string>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "slugTaken",
                    "static": false,
                    "visibility": "public",
                    "signature": "slugTaken(string $slug, int $exceptTermId): bool",
                    "doc": "Whether a term other than the one named holds the slug, in any taxonomy.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "exceptTermId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 151,
                    "end": 154
                },
                {
                    "routes": [],
                    "name": "normalise",
                    "static": false,
                    "visibility": "public",
                    "signature": "normalise(array $args): array",
                    "doc": "get_terms() arguments normalised: the \"get all\" shortcut, integer lists, sanitised slugs.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 157,
                    "end": 167
                },
                {
                    "routes": [],
                    "name": "rows",
                    "static": false,
                    "visibility": "public",
                    "signature": "rows(array $args, ?array $taxonomies): array",
                    "doc": "The term rows the arguments match, ordered and paged, with the tree\nfilters applied.",
                    "shapes": [
                        "@param list<string>|null $taxonomies",
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "?array",
                            "shape": "list<string>|null",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 217
                },
                {
                    "routes": [],
                    "name": "hierarchy",
                    "static": false,
                    "visibility": "public",
                    "signature": "hierarchy(string $taxonomy): array",
                    "doc": "Every parent in a taxonomy that has children, mapped to its children's\nids. A taxonomy nobody nested reads as an empty map.",
                    "shapes": [
                        "@return array<int, list<int>>"
                    ],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 335,
                    "end": 346
                },
                {
                    "routes": [],
                    "name": "children",
                    "static": false,
                    "visibility": "public",
                    "signature": "children(int $termId, string $taxonomy): array",
                    "doc": "Every term id under a term, however deep. @return list<int>",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 349,
                    "end": 364
                },
                {
                    "routes": [],
                    "name": "objectsIn",
                    "static": false,
                    "visibility": "public",
                    "signature": "objectsIn(array $termIds, array $taxonomies, string $order): array",
                    "doc": "The object ids attached to any of the terms in any of the taxonomies. @param list<int> $termIds @param list<string> $taxonomies @return list<int>",
                    "shapes": [
                        "@param list<int> $termIds @param list<string> $taxonomies @return list<int>"
                    ],
                    "params": [
                        {
                            "name": "termIds",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "@param list<string> $taxonomies @return list<int>"
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "order",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 367,
                    "end": 375
                },
                {
                    "routes": [],
                    "name": "readRow",
                    "static": false,
                    "visibility": "private",
                    "signature": "readRow(int $termId, ?string $taxonomy): ?array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "idList",
                    "static": true,
                    "visibility": "private",
                    "signature": "idList(mixed $value): array",
                    "doc": "A comma list, array, or blank as positive ids. @return list<int>",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 220,
                    "end": 224
                },
                {
                    "routes": [],
                    "name": "descendants",
                    "static": true,
                    "visibility": "private",
                    "signature": "descendants(array $rows, int $root): array",
                    "doc": "The rows under a term, however deep, in source order. @param list<array<string, mixed>> $rows @return list<array<string, mixed>>",
                    "shapes": [
                        "@param list<array<string, mixed>> $rows @return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "@return list<array<string, mixed>>"
                        },
                        {
                            "name": "root",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 227,
                    "end": 243
                },
                {
                    "routes": [],
                    "name": "where",
                    "static": false,
                    "visibility": "private",
                    "signature": "where(array $args, ?array $taxonomies): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: string, 1: string, 2: list<mixed>} the join, the WHERE clause, its parameters"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 246,
                    "end": 317
                },
                {
                    "routes": [],
                    "name": "metaClauses",
                    "static": false,
                    "visibility": "private",
                    "signature": "metaClauses(array $args): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array{key: string, value?: mixed}>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 320,
                    "end": 327
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": true,
                    "visibility": "private",
                    "signature": "ids(mixed $list): array",
                    "doc": "",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "list",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 378,
                    "end": 385
                },
                {
                    "routes": [],
                    "name": "like",
                    "static": true,
                    "visibility": "private",
                    "signature": "like(string $needle): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "needle",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 387,
                    "end": 390
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermQueryRunner",
            "short": "TermQueryRunner",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TermQueryRunner.php",
            "lines": 255,
            "doc": "WP_Term_Query::get_terms as the reference runs it (probe\nwp-term-query-sql): the variables parsed and handed to pre_get_terms,\nget_terms_args, the WHERE pieces (taxonomies, inclusions, exclusions with\nexcluded trees and childless terms through list_terms_exclusions, names,\nslugs, term taxonomy ids, likes, objects, parent, counts, search, meta),\nthe order through get_terms_orderby, the fields through get_terms_fields,\nall of it through terms_clauses, terms_pre_query, and the results shaped\nby TermQueryTree (children, padded counts, the empty hidden, the page).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Query\\Sql",
                "Minn\\Runtime\\TermFields",
                "Minn\\Runtime\\TermOrder",
                "Minn\\Runtime\\TermQueryTree",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "query",
                    "type": "WP_Term_Query",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "wpdb",
                    "type": "object",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "where",
                    "type": "array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "run",
                    "static": false,
                    "visibility": "public",
                    "signature": "run(WP_Term_Query $query, object $wpdb): mixed",
                    "doc": "Runs a term query object's variables: its terms in the shape the\nfields ask for, a count, or what a plugin answered first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Term_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpdb",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": "the database object plugins see"
                        }
                    ],
                    "line": 33,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "lists",
                    "static": true,
                    "visibility": "private",
                    "signature": "lists(array $args): array",
                    "doc": "Names, slugs, term taxonomy ids and object ids as lists, as the\nreference holds them once plugins have had the arguments.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "hierarchical",
                    "static": true,
                    "visibility": "private",
                    "signature": "hierarchical(array $args): bool",
                    "doc": "Whether the results have a tree to walk (a count never does). @param array<string, mixed> $args",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "settle",
                    "static": false,
                    "visibility": "private",
                    "signature": "settle(array $args, array $taxonomies): array",
                    "doc": "The variables pre_get_terms left, settled: a flat taxonomy needs no\ntree, a parent overrides child_of, `get=all` asks for every term;\nthen get_terms_args.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@param list<string> $taxonomies",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "inHierarchy",
                    "static": false,
                    "visibility": "private",
                    "signature": "inHierarchy(int $parent, array $taxonomies): bool",
                    "doc": "Whether a parent or child_of term has children in any of the taxonomies (when none, the query is not run). @param list<string> $taxonomies",
                    "shapes": [
                        "@param list<string> $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 127
                },
                {
                    "routes": [],
                    "name": "order",
                    "static": false,
                    "visibility": "private",
                    "signature": "order(array $args): array",
                    "doc": "The ORDER BY clause and direction, term_order needing the relationships. @param array<string, mixed> $args @return array{0: string, 1: string}",
                    "shapes": [
                        "@param array<string, mixed> $args @return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@return array{0: string, 1: string}"
                        }
                    ],
                    "line": 130,
                    "end": 138
                },
                {
                    "routes": [],
                    "name": "clauses",
                    "static": false,
                    "visibility": "private",
                    "signature": "clauses(array $args, array $taxonomies): void",
                    "doc": "The WHERE pieces, by name, in the reference's order. @param array<string, mixed> $args @param list<string> $taxonomies",
                    "shapes": [
                        "@param array<string, mixed> $args @param list<string> $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $taxonomies"
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "exclusions",
                    "static": false,
                    "visibility": "private",
                    "signature": "exclusions(array $args, array $taxonomies): string",
                    "doc": "The excluded ids (an excluded term's whole tree, childless terms' parents), unless ids are included. @param array<string, mixed> $args @param list<string> $taxonomies",
                    "shapes": [
                        "@param array<string, mixed> $args @param list<string> $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $taxonomies"
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "names",
                    "static": false,
                    "visibility": "private",
                    "signature": "names(array $args, array $taxonomies): void",
                    "doc": "Names (as saving stores them), slugs and term taxonomy ids. @param array<string, mixed> $args @param list<string> $taxonomies",
                    "shapes": [
                        "@param array<string, mixed> $args @param list<string> $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $taxonomies"
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "likes",
                    "static": false,
                    "visibility": "private",
                    "signature": "likes(array $args): void",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 208,
                    "end": 216
                },
                {
                    "routes": [],
                    "name": "select",
                    "static": false,
                    "visibility": "private",
                    "signature": "select(array $args, array $taxonomies, string $orderby, string $order): void",
                    "doc": "The rest of the WHERE (counts, search, meta), the fields, the joins,\nterms_clauses, and the request written from what it returned.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@param list<string> $taxonomies"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "orderby",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "order",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 225,
                    "end": 251
                },
                {
                    "routes": [],
                    "name": "limits",
                    "static": true,
                    "visibility": "private",
                    "signature": "limits(array $args): string",
                    "doc": "A LIMIT only when no tree has to be walked first (the tree's page is cut afterwards). @param array<string, mixed> $args",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 254,
                    "end": 261
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "private",
                    "signature": "meta(): array",
                    "doc": "The meta query's join and WHERE piece, read again in case pre_get_terms changed its variables. @return array{0: string, 1: string}",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [],
                    "line": 264,
                    "end": 273
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermQueryTree",
            "short": "TermQueryTree",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TermQueryTree.php",
            "lines": 146,
            "doc": "What a term query does with its rows, as the reference does it (probe\nwp-term-query-sql): each row a term through get_term (with the object id\na relationship query carries); only child_of's descendants; counts padded\nwith the children's posts; an empty term kept only while one of its\nchildren has posts (the rest dropped where they stood, keys and all); a\ntree's page cut once the tree is walked; then the shape the fields ask\nfor.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Runtime\\TermQueryRunner"
            ],
            "constructor": {
                "signature": "__construct(array $taxonomies)",
                "doc": "",
                "shapes": [
                    "@param list<string> $taxonomies"
                ],
                "params": [
                    {
                        "name": "taxonomies",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 21
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "taxonomies",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "populate",
                    "static": true,
                    "visibility": "public",
                    "signature": "populate(array $rows): array",
                    "doc": "The terms the rows name, keyed as the rows were.",
                    "shapes": [
                        "@param array<array-key, object> $rows",
                        "@return array<array-key, \\WP_Term>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "array<array-key, object>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "settle",
                    "static": false,
                    "visibility": "public",
                    "signature": "settle(array $terms, array $args): array",
                    "doc": "The terms after the tree has had its say: descendants only, padded\ncounts, empty branches dropped, the page cut.",
                    "shapes": [
                        "@param array<array-key, \\WP_Term> $terms",
                        "@param array<string, mixed> $args",
                        "@return array<array-key, \\WP_Term>"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "array<array-key, \\WP_Term>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "pad",
                    "static": true,
                    "visibility": "public",
                    "signature": "pad(array $terms, string $taxonomy): void",
                    "doc": "Each term's count raised to the published posts in it or under it, as\n_pad_term_counts does for a hierarchical taxonomy.",
                    "shapes": [
                        "@param array<array-key, \\WP_Term> $terms"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "array<array-key, \\WP_Term>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "format",
                    "static": true,
                    "visibility": "public",
                    "signature": "format(array $terms, string $fields): array",
                    "doc": "The terms in the shape the fields ask for.",
                    "shapes": [
                        "@param array<array-key, \\WP_Term> $terms",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "array",
                            "shape": "array<array-key, \\WP_Term>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "hasPosts",
                    "static": true,
                    "visibility": "private",
                    "signature": "hasPosts(WP_Term $term): bool",
                    "doc": "Whether a term, or one of its children, has posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "term",
                            "type": "WP_Term",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 135
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermSave",
            "short": "TermSave",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TermSave.php",
            "lines": 199,
            "doc": "wp_insert_term and wp_update_term in the reference's order (probe\nterm-insert-filters, contracts/runtime.md \"Terms plugins can change\").\nAn insert asks pre_insert_term, refuses an empty name or a missing\nparent, runs every field through its db filters (sanitize_term), refuses\na name the parent (or, for tags, the taxonomy) already has, makes the\nslug unique, hands the row to wp_insert_term_data, writes it (a slug left\nempty becomes the term's id), puts it in the taxonomy, lets a plugin\nname a duplicate to keep instead, and tells plugins. An update merges\nthe stored term (slashed, so a backslash in it survives) under the\nchanges, runs the same filters, asks wp_update_term_parent (where a\nparent that would put the term under itself becomes 0), and refuses a\nslug a sibling holds.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Terms",
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Lists",
                "Minn\\Support\\Slashes"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DEFAULTS",
                    "value": "array (   'alias_of' => '',   'description' => '',   'parent' => 0,   'slug' => '', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "insert",
                    "static": true,
                    "visibility": "public",
                    "signature": "insert(mixed $term, string $taxonomy, array $args): WP_Error|array",
                    "doc": "A new term's ids, or why not.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array{term_id: int, term_taxonomy_id: int}|\\WP_Error"
                    ],
                    "params": [
                        {
                            "name": "term",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": true,
                    "visibility": "public",
                    "signature": "update(int $termId, string $taxonomy, array $changes): WP_Error|array",
                    "doc": "A changed term's ids, or why not.",
                    "shapes": [
                        "@param array<string, mixed> $changes",
                        "@return array{term_id: int, term_taxonomy_id: int}|\\WP_Error"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "changes",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "private",
                    "signature": "write(WP_Term $term, array $data, string $description, int $parent, array $args): array",
                    "doc": "The update's writes and their actions, in the reference's order.",
                    "shapes": [
                        "@param array{name: string, slug: string, term_group: int} $data",
                        "@param array<string, mixed> $args",
                        "@return array{term_id: int, term_taxonomy_id: int}"
                    ],
                    "params": [
                        {
                            "name": "term",
                            "type": "WP_Term",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array{name: string, slug: string, term_group: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "description",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "nameTaken",
                    "static": true,
                    "visibility": "private",
                    "signature": "nameTaken(string $name, string $taxonomy, array $args): ?WP_Error",
                    "doc": "The refusal for a name already in use: under the same parent in a\nhierarchical taxonomy (unless a different slug was asked for), or\nanywhere in a flat one. The lookup sanitizes the name again, as the\nreference's does.",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 162,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "updatedSlug",
                    "static": true,
                    "visibility": "private",
                    "signature": "updatedSlug(string $slug, string $asked, int $parent, int $termId, array $args): WP_Error|string",
                    "doc": "An update's slug: as asked when no other term holds it; made unique\nwhen it was made from the name (none was asked for) or the holder\nsits under another parent; refused otherwise.",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "asked",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 186,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "slugFromId",
                    "static": true,
                    "visibility": "private",
                    "signature": "slugFromId(Minn\\Content\\Terms $terms, int $termId, string $taxonomy, array $data, array $args): void",
                    "doc": "A slug saving left empty (a name with nothing a slug can keep) becomes\nthe term's id, between edit_terms and edited_terms.",
                    "shapes": [
                        "@param array{name: string, slug: string, term_group: int} $data",
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "terms",
                            "type": "Minn\\Content\\Terms",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array{name: string, slug: string, term_group: int}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 205,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "row",
                    "static": true,
                    "visibility": "private",
                    "signature": "row(mixed $data): array",
                    "doc": "The row a plugin's filter handed back, with the columns it dropped\nput back.",
                    "shapes": [
                        "@return array{name: string, slug: string, term_group: int}"
                    ],
                    "params": [
                        {
                            "name": "data",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 218,
                    "end": 222
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TermWriter",
            "short": "TermWriter",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/TermWriter.php",
            "lines": 157,
            "doc": "The decisions behind wp_delete_term and the object-term relationships:\nwhich relationships to add and remove (saves are Runtime\\TermSave). The rows themselves come\nfrom Content\\Terms; the lifecycle actions fire from here in the\nreference's order. Behaviour pinned by contracts/fixtures/api/content.json.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\TermRecord",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\TermQuery"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Terms $terms, Minn\\Runtime\\TermQuery $query, Minn\\Content\\PostWriter $posts)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "query",
                        "type": "Minn\\Runtime\\TermQuery",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 21,
                "end": 23
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "query",
                    "type": "Minn\\Runtime\\TermQuery",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(array $row, string $taxonomy, bool $hierarchical, int $default): array",
                    "doc": "Deletes a term; objects left without a category fall back to the\ndefault one. Returns the object ids the term was attached to.",
                    "shapes": [
                        "@param array<string, mixed> $row",
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hierarchical",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "default",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "relate",
                    "static": false,
                    "visibility": "public",
                    "signature": "relate(int $objectId, array $keep, array $old, string $taxonomy, ?Closure $count = NULL): void",
                    "doc": "Makes an object's relationships in a taxonomy exactly $keep (or $old\nplus $keep when appending), in the reference's order: each new\nrelationship between add_term_relationship and\nadded_term_relationship, the counts of those terms, then the ones\nthat went, between delete_term_relationships and\ndeleted_term_relationships, and their counts. $count recounts a list\nof term_taxonomy ids and tells plugins (wp_update_term_count); without\nit the taxonomy is recounted quietly.",
                    "shapes": [
                        "@param list<int> $keep term_taxonomy ids",
                        "@param list<int> $old the object's current term_taxonomy ids in the taxonomy",
                        "@param (Closure(list<int>): void)|null $count"
                    ],
                    "params": [
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "keep",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "term_taxonomy ids"
                        },
                        {
                            "name": "old",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "the object's current term_taxonomy ids in the taxonomy"
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "?Closure",
                            "shape": "(Closure(list<int>): void)|null",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 81
                },
                {
                    "routes": [],
                    "name": "unrelate",
                    "static": false,
                    "visibility": "public",
                    "signature": "unrelate(int $objectId, array $ttIds, string $taxonomy, ?Closure $count = NULL): bool",
                    "doc": "Removes the given relationships between delete_term_relationships and\ndeleted_term_relationships, then recounts those terms; true when any\nrow went.",
                    "shapes": [
                        "@param list<int> $ttIds",
                        "@param (Closure(list<int>): void)|null $count"
                    ],
                    "params": [
                        {
                            "name": "objectId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ttIds",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "?Closure",
                            "shape": "(Closure(list<int>): void)|null",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "publishedCount",
                    "static": false,
                    "visibility": "public",
                    "signature": "publishedCount(int $ttId, array $statuses = array (   0 => 'publish', )): int",
                    "doc": "How many objects in the counted statuses a term holds, as the stored\ncount keeps it (published ones unless a plugin widens the list).",
                    "shapes": [
                        "@param list<string> $statuses"
                    ],
                    "params": [
                        {
                            "name": "ttId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "statuses",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array (   0 => 'publish', )",
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 120
                },
                {
                    "routes": [],
                    "name": "split",
                    "static": false,
                    "visibility": "public",
                    "signature": "split(int $termId, int $ttId): ?array",
                    "doc": "Gives a taxonomy row that shares its term with another taxonomy a\nterm of its own (the same name, slug and group), and moves its\nchildren under it. Null when no other taxonomy holds the term.",
                    "shapes": [
                        "@return array{0: int, 1: string, 2: list<int>}|null the new term id, the taxonomy, the children moved"
                    ],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "ttId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "relationshipCount",
                    "static": false,
                    "visibility": "public",
                    "signature": "relationshipCount(int $ttId): int",
                    "doc": "Every object filed under a term, whatever it is: the count a taxonomy of links or other non-posts keeps.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ttId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 149,
                    "end": 152
                },
                {
                    "routes": [],
                    "name": "storeCount",
                    "static": false,
                    "visibility": "public",
                    "signature": "storeCount(int $ttId, int $count): void",
                    "doc": "Stores a term's count.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "ttId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "termIdsOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "termIdsOf(array $ttIds): array",
                    "doc": "The term ids behind term_taxonomy ids, as stored (strings), in the order given. @param list<int> $ttIds @return list<string>",
                    "shapes": [
                        "@param list<int> $ttIds @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "ttIds",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 161,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "ttIdOf",
                    "static": false,
                    "visibility": "private",
                    "signature": "ttIdOf(int $termId, string $taxonomy): int",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "termId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 171,
                    "end": 174
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ThemeSupports",
            "short": "ThemeSupports",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ThemeSupports.php",
            "lines": 183,
            "doc": "What a theme supports, as add_theme_support keeps it (probe rest-themes):\na bare feature is true, anything else its arguments. html5 lists add up\n(repeats and all), post thumbnails stay on for every type once on, post\nformats keep only real formats, the custom logo fills in its defaults at\nonce (flexible both ways when asked for bare), and the custom header and\nbackground get theirs as WordPress finishes loading, a header with no\nwidth or height made flexible that way. title-tag declared after loading\nis refused. A block theme supports thumbnails, responsive embeds, editor\nstyles, HTML5 markup and feed links before its own setup runs.\n\nThe features themselves (data/theme-features.json, and any a theme\nregisters) say how each is shown in REST: its schema, or the default\nwhen the theme does not support it.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Runtime\\Runtime"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "KEY",
                    "value": "'theme_supports'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "FEATURES",
                    "value": "'theme_features'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "LOGO",
                    "value": "array (   'width' => NULL,   'height' => NULL,   'flex-width' => false,   'flex-height' => false,   'header-text' => '',   'unlink-homepage-logo' => false, )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "HEADER",
                    "value": "array (   'default-image' => '',   'random-default' => false,   'width' => 0,   'height' => 0,   'flex-height' => false,   'flex-width' => false,   'default-text-color' => '',   'header-text' => true,   'uploads' => true,   'wp-head-callback' => '',   'admin-head-callback' => '',   'admin-preview-callback' => '',   'video' => false,   'video-active-callback' => 'is_front_page', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "BACKGROUND",
                    "value": "array (   'default-image' => '',   'default-preset' => 'default',   'default-position-x' => 'left',   'default-position-y' => 'top',   'default-size' => 'auto',   'default-repeat' => 'repeat',   'default-attachment' => 'scroll',   'default-color' => '',   'wp-head-callback' => '_custom_background_cb',   'admin-head-callback' => '',   'admin-preview-callback' => '', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "FORMATS",
                    "value": "array (   0 => 'aside',   1 => 'chat',   2 => 'gallery',   3 => 'link',   4 => 'image',   5 => 'quote',   6 => 'status',   7 => 'video',   8 => 'audio', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "TYPES",
                    "value": "array (   0 => 'boolean',   1 => 'integer',   2 => 'number',   3 => 'string',   4 => 'array',   5 => 'object', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": true,
                    "visibility": "public",
                    "signature": "all(): array",
                    "doc": "Every feature the theme has declared, as stored. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "add",
                    "static": true,
                    "visibility": "public",
                    "signature": "add(string $feature, array $args): bool",
                    "doc": "add_theme_support: false when refused. @param list<mixed> $args",
                    "shapes": [
                        "@param list<mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "feature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "remove",
                    "static": true,
                    "visibility": "public",
                    "signature": "remove(string $feature): bool",
                    "doc": "remove_theme_support: false when the theme did not support it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "feature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 77
                },
                {
                    "routes": [],
                    "name": "blockThemeDefaults",
                    "static": true,
                    "visibility": "public",
                    "signature": "blockThemeDefaults(): void",
                    "doc": "_add_default_theme_supports: what every block theme supports before its own setup.",
                    "shapes": [],
                    "params": [],
                    "line": 80,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "editorDefaults",
                    "static": true,
                    "visibility": "public",
                    "signature": "editorDefaults(string $which): void",
                    "doc": "wp_enable_block_templates and wp_setup_widgets_block_editor: a block theme's templates, and the block widget editor for any theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "which",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "justInTime",
                    "static": true,
                    "visibility": "public",
                    "signature": "justInTime(): void",
                    "doc": "_custom_header_background_just_in_time: the header's and background's defaults filled in once loaded.",
                    "shapes": [],
                    "params": [],
                    "line": 101,
                    "end": 124
                },
                {
                    "routes": [],
                    "name": "register",
                    "static": true,
                    "visibility": "public",
                    "signature": "register(string $feature, array $args): WP_Error|true",
                    "doc": "register_theme_feature: true, or why the feature cannot be registered.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "feature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "features",
                    "static": true,
                    "visibility": "public",
                    "signature": "features(): array",
                    "doc": "Core's features, then those registered since. @return array<string, array<string, mixed>>",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [],
                    "line": 156,
                    "end": 161
                },
                {
                    "routes": [],
                    "name": "forRest",
                    "static": true,
                    "visibility": "public",
                    "signature": "forRest(WP_REST_Request $request): array",
                    "doc": "The active theme's supports as wp/v2/themes shows them: each feature shown in REST, shaped by its schema. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 164,
                    "end": 181
                },
                {
                    "routes": [],
                    "name": "prepared",
                    "static": true,
                    "visibility": "public",
                    "signature": "prepared(mixed $support, array $config, string $feature, WP_REST_Request $request): mixed",
                    "doc": "One feature's support as the REST API shows it (the runtime's\nWP_REST_Themes_Controller::prepare_theme_support): a feature that is\nnot variadic shown by its first value, through its prepare_callback\nor else cut to its schema.",
                    "shapes": [
                        "@param array<string, mixed> $config the feature as it was registered"
                    ],
                    "params": [
                        {
                            "name": "support",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "config",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the feature as it was registered"
                        },
                        {
                            "name": "feature",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 199
                },
                {
                    "routes": [],
                    "name": "unwrapped",
                    "static": true,
                    "visibility": "private",
                    "signature": "unwrapped(mixed $support, array $config): mixed",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $config"
                    ],
                    "params": [
                        {
                            "name": "support",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "config",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 205
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\ThemeSwitch",
            "short": "ThemeSwitch",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/ThemeSwitch.php",
            "lines": 145,
            "doc": "Switching the theme as the reference does it, in two halves. The switch\n(switch_theme): the leaving theme keeps its widgets and its menu\nlocations are remembered, the three theme options move, the switch is\nrecorded (theme_switched), the arriving theme's mods start with the\nclassic sidebars, only its mods stay autoloaded, then switch_theme. The\nnext load, on init (check_theme_switched): after_switch_theme with the\ntheme that left, whose defaults map the menu locations across\n(_wp_menus_changed) and look the widgets over, then the rules flushed\nand the record cleared. Deleting a theme fires delete_theme and\ndeleted_theme around its folder going, and forgets the update check.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Support\\Files"
            ],
            "usedBy": [
                "Minn\\Admin\\PackagesController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SLUG_GROUPS",
                    "value": "array (   0 =>    array (     0 => 'primary',     1 => 'menu-1',     2 => 'main',     3 => 'header',     4 => 'navigation',     5 => 'top',   ),   1 =>    array (     0 => 'secondary',     1 => 'menu-2',     2 => 'footer',     3 => 'subsidiary',     4 => 'bottom',   ),   2 =>    array (     0 => 'social',   ), )",
                    "doc": "The menu location names, by role, a theme's locations are matched across by.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "switchTo",
                    "static": true,
                    "visibility": "public",
                    "signature": "switchTo(string $stylesheet): void",
                    "doc": "switch_theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "checkSwitched",
                    "static": true,
                    "visibility": "public",
                    "signature": "checkSwitched(): void",
                    "doc": "check_theme_switched: on the load after a switch, after_switch_theme with the theme that left.",
                    "shapes": [],
                    "params": [],
                    "line": 53,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "menusChanged",
                    "static": true,
                    "visibility": "public",
                    "signature": "menusChanged(): void",
                    "doc": "_wp_menus_changed: the leaving theme's menu locations mapped onto the arriving theme's.",
                    "shapes": [],
                    "params": [],
                    "line": 71,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "mapLocations",
                    "static": true,
                    "visibility": "public",
                    "signature": "mapLocations(array $new, mixed $old): array",
                    "doc": "wp_map_nav_menu_locations: with one location on each side, it is\nkept; otherwise a location of the same name keeps its menu, then by\nrole, each name of a role in turn hands the next unused location of\nthat role (with a menu) to the arriving locations that name it.",
                    "shapes": [
                        "@param array<string, int> $new"
                    ],
                    "params": [
                        {
                            "name": "new",
                            "type": "array",
                            "shape": "array<string, int>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "old",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": true,
                    "visibility": "public",
                    "signature": "delete(string $stylesheet, ?callable $remove = NULL): bool",
                    "doc": "delete_theme: the folder removed between delete_theme and deleted_theme\n(by $remove when the caller removes it its own way); false for no name.",
                    "shapes": [
                        "@param (callable(string): bool)|null $remove"
                    ],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "remove",
                            "type": "?callable",
                            "shape": "(callable(string): bool)|null",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 125,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "removeFolder",
                    "static": true,
                    "visibility": "private",
                    "signature": "removeFolder(string $stylesheet): bool",
                    "doc": "A theme's folder, directly inside the themes folder (a symlink unlinked, never followed); one already gone counts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 138,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "nextOfGroup",
                    "static": true,
                    "visibility": "private",
                    "signature": "nextOfGroup(array $old, array $group): ?string",
                    "doc": "The first location left in $old that a name of the group names, with a menu in it. @param array<string, mixed> $old @param list<string> $group",
                    "shapes": [
                        "@param array<string, mixed> $old @param list<string> $group"
                    ],
                    "params": [
                        {
                            "name": "old",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "@param list<string> $group"
                        },
                        {
                            "name": "group",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 148,
                    "end": 158
                },
                {
                    "routes": [],
                    "name": "names",
                    "static": true,
                    "visibility": "private",
                    "signature": "names(string $location, string $slug): bool",
                    "doc": "Whether a location and a role's name contain one another, letter case aside.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 161,
                    "end": 164
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TreeWalk",
            "short": "TreeWalk",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TreeWalk.php",
            "lines": 182,
            "doc": "The Walker contract's traversal: elements keyed by the walker's\ndb_fields parent/id pair, displayed depth-first through the walker's\nfour element methods, whole or a page of top-level elements at a time\n(probe comment-walker). The facade Walker delegates here; subclasses\noverride the element methods (or display_element itself, as\nWalker_Comment does to keep replies past the depth limit at their\nparent's level) and the dispatch stays virtual.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "walk",
                    "static": true,
                    "visibility": "public",
                    "signature": "walk(object $walker, array $elements, int $maxDepth, array $args): string",
                    "doc": "Walks a tree with a Walker the way the reference does.",
                    "shapes": [
                        "@param list<object> $elements"
                    ],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxDepth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": true,
                    "visibility": "public",
                    "signature": "page(object $walker, array $elements, int $maxDepth, int $page, int $perPage, array $args): string",
                    "doc": "One page of top-level elements, each with its children (paged_walk);\nno paging when the page is below one or the size negative. Sets the\nwalker's max_pages. Elements whose parent is not in the list are\norphans, printed at the top level after the last page's elements;\nthe replies of earlier pages' elements are not orphans.",
                    "shapes": [
                        "@param list<object> $elements"
                    ],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxDepth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "page",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perPage",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "roots",
                    "static": true,
                    "visibility": "public",
                    "signature": "roots(object $walker, array $elements): int",
                    "doc": "How many of the elements have no parent. @param list<object> $elements",
                    "shapes": [
                        "@param list<object> $elements"
                    ],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "forget",
                    "static": true,
                    "visibility": "public",
                    "signature": "forget(object $walker, mixed $element, array $children): void",
                    "doc": "An element's children, and theirs through the walker's unset_children,\ntaken out of the children list.",
                    "shapes": [
                        "@param array<int|string, list<object>> $children"
                    ],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "element",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "children",
                            "type": "array",
                            "shape": "array<int|string, list<object>>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "element",
                    "static": true,
                    "visibility": "public",
                    "signature": "element(object $walker, mixed $element, array $children, int $maxDepth, int $depth, array $args, string $output): void",
                    "doc": "Walks one element and its children; replies past the depth limit stay\nin the list for the walker (or the orphans) to place.",
                    "shapes": [
                        "@param array<int|string, mixed> $children"
                    ],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "element",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "children",
                            "type": "array",
                            "shape": "array<int|string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxDepth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "output",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "buckets",
                    "static": true,
                    "visibility": "private",
                    "signature": "buckets(object $walker, array $elements, mixed $root = NULL): array",
                    "doc": "The top-level elements (no parent, or the parent given) and the\nothers by parent.",
                    "shapes": [
                        "@param list<object> $elements",
                        "@return array{0: list<object>, 1: array<int|string, list<object>>}"
                    ],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "root",
                            "type": "mixed",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 179
                },
                {
                    "routes": [],
                    "name": "alone",
                    "static": true,
                    "visibility": "private",
                    "signature": "alone(object $walker, mixed $element, array $args, string $output): void",
                    "doc": "One element on its own at the top level: no children, one level shown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "element",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "output",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 182,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "orphans",
                    "static": true,
                    "visibility": "private",
                    "signature": "orphans(object $walker, array $children, array $args, string $output): void",
                    "doc": "",
                    "shapes": [
                        "@param array<int|string, list<object>> $children"
                    ],
                    "params": [
                        {
                            "name": "walker",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "children",
                            "type": "array",
                            "shape": "array<int|string, list<object>>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "output",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 196
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\TypeProps",
            "short": "TypeProps",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/TypeProps.php",
            "lines": 150,
            "doc": "A post type's or taxonomy's properties from the arguments it was built\nwith, as WP_Post_Type::set_props and WP_Taxonomy::set_props fill them\n(probe type-object-methods): the reference's defaults where an argument\nis missing, a given value kept as given.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Registry"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "postType",
                    "static": true,
                    "visibility": "public",
                    "signature": "postType(string $name, array $args): array",
                    "doc": "A post type's properties from its arguments (probe type-object-methods):\nthe reference's defaults where an argument is missing, a given value\nkept as given. The labels are the type's own; get_post_type_labels\nmakes them whole on the object.",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "taxonomy",
                    "static": true,
                    "visibility": "public",
                    "signature": "taxonomy(string $name, array $objectTypes, array $args): array",
                    "doc": "A taxonomy's properties from the types it belongs to and its\narguments (probe type-object-methods): the reference's defaults where\nan argument is missing, a given value kept as given. The meta box is\nthe category checklist for a hierarchical taxonomy and the tag box for\nany other; its input is read as checkboxes for the checklist and as\ntext otherwise. A default term gets a name, slug and description.",
                    "shapes": [
                        "@param list<mixed> $objectTypes",
                        "@param array<string, mixed> $args",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "objectTypes",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 105,
                    "end": 146
                },
                {
                    "routes": [],
                    "name": "typeRewrite",
                    "static": true,
                    "visibility": "private",
                    "signature": "typeRewrite(string $name, mixed $rewrite, mixed $hasArchive): mixed",
                    "doc": "A type's rewrite settles into its full form, public or not; feeds only where there is an archive (probe registry-rewrites).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rewrite",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "hasArchive",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "taxonomyRewrite",
                    "static": true,
                    "visibility": "private",
                    "signature": "taxonomyRewrite(string $name, mixed $rewrite): mixed",
                    "doc": "A taxonomy's rewrite settles, whether queryable or not, the given keys\nmerged over the defaults; a rewrite of true leaves an empty \"0\" entry\nbehind, as the reference's merge does (probe registry-rewrites).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rewrite",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 161
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\UpdateCounts",
            "short": "UpdateCounts",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/UpdateCounts.php",
            "lines": 31,
            "doc": "The updates waiting, as wp_get_update_data counts them for the user\n(probe admin-bar): plugins and themes from their update transients,\nWordPress itself unless it is current, translations; each only for a\nuser who may update it. WordPress counts its own update only where\nwp-admin's update functions are loaded; the engine always has them, so\nit counts it everywhere.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "forCurrentUser",
                    "static": true,
                    "visibility": "public",
                    "signature": "forCurrentUser(): array",
                    "doc": "The counts and their title (before the wp_get_update_data filter),\nand the titles one by one.",
                    "shapes": [
                        "@return array{0: array{counts: array<string, int>, title: string}, 1: array<string, string>}"
                    ],
                    "params": [],
                    "line": 26,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\Upgrade",
            "short": "Upgrade",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/Upgrade.php",
            "lines": 349,
            "doc": "What WP_Upgrader does with a package (probe upgrader), for the facade's\nupgraders and so for everything that installs or updates a plugin or a\ntheme. run() is the whole pass: the options through\nupgrader_package_options, the package downloaded and unpacked into\nwp-content/upgrade/, put in place by install(), the result through\nupgrader_install_package_result and told to the skin, and, for a single\nitem, upgrader_process_complete. The steps a subclass may replace\n(fs_connect, download_package, unpack_package, install_package,\nclear_destination) are called on the upgrader itself, as the reference\ncalls them, so a plugin's own upgrader class is honoured.\n\nAn update names the folder it replaces (hook_extra temp_backup); that\ncopy is moved to wp-content/upgrade-temp-backup/<dir>/<slug> before the\ndestination is cleared, moved back when the new one fails, and removed\nonce the pass is over. The reference keeps it for a weekly event to\nclear and puts it back at shutdown; Minn keeps nothing and restores at\nonce.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime",
                "Minn\\Runtime\\Symbols",
                "Minn\\Support\\Files",
                "Minn\\Support\\Url"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "RUN",
                    "value": "array (   'package' => '',   'destination' => '',   'clear_destination' => false,   'clear_working' => true,   'abort_if_destination_exists' => true,   'is_multi' => false,   'hook_extra' =>    array (   ), )",
                    "doc": "The run options in the reference's order, which upgrader_package_options sees.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "run",
                    "static": true,
                    "visibility": "public",
                    "signature": "run(WP_Upgrader $upgrader, array $options): mixed",
                    "doc": "WP_Upgrader::run; false when the filesystem cannot be reached.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "bulk",
                    "static": true,
                    "visibility": "public",
                    "signature": "bulk(WP_Upgrader $upgrader, array $items, array $offers, array $how): array|false",
                    "doc": "The bulk pass of Plugin_Upgrader and Theme_Upgrader: the skin opened,\nmaintenance mode on when an active item is replaced, each item with an\noffer run as one of many (one without is up to date, answered true),\nthe pass stopped when the filesystem refuses, then maintenance off, the\nupdate cache cleaned, upgrader_process_complete told the whole list,\nand the skin closed. False when the filesystem cannot be reached.",
                    "shapes": [
                        "@param list<string> $items plugin files or theme folders",
                        "@param array<string, mixed> $offers item => the offer (its package)",
                        "@param array{directories: list<string>, maintenance: bool, prepare: \\Closure(string): array{0: string, 1: array}, clean: \\Closure(): void, complete: array} $how",
                        "@return array<string, mixed>|false"
                    ],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "plugin files or theme folders"
                        },
                        {
                            "name": "offers",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "item => the offer (its package)"
                        },
                        {
                            "name": "how",
                            "type": "array",
                            "shape": "array{directories: list<string>, maintenance: bool, prepare: \\Closure(string): array{0: string, 1: array}, clean: \\Closure(): void, complete: array}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "install",
                    "static": true,
                    "visibility": "public",
                    "signature": "install(WP_Upgrader $upgrader, array $args): WP_Error|array",
                    "doc": "WP_Upgrader::install_package: the unpacked folder chosen (its one\nfolder, or the working folder when it holds several things), offered\nto upgrader_pre_install and upgrader_source_selection, the destination\ncleared or refused when something is there, the folder moved in (and\nwalked by the symbol gate at its next check), and the result offered\nto upgrader_post_install.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 136,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "unpack",
                    "static": true,
                    "visibility": "public",
                    "signature": "unpack(WP_Upgrader $upgrader, string $package): WP_Error|string",
                    "doc": "WP_Upgrader::unpack_package, without the package's deletion (the\ncaller's): the upgrade folder emptied of what earlier passes left,\nthe package unzipped into a folder named for it, and an archive that\nwill not open refused in the upgrader's words with the reader's reason.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "package",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "clear",
                    "static": true,
                    "visibility": "public",
                    "signature": "clear(WP_Upgrader $upgrader, string $remote): WP_Error|bool",
                    "doc": "WP_Upgrader::clear_destination: whatever is at the destination removed; true when nothing is left there.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "remote",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 213,
                    "end": 219
                },
                {
                    "routes": [],
                    "name": "maintenanceOn",
                    "static": true,
                    "visibility": "public",
                    "signature": "maintenanceOn(WP_Upgrader $upgrader): void",
                    "doc": "Maintenance mode on, as a bulk update of active plugins turns it on: the .maintenance file the front door reads.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 222,
                    "end": 226
                },
                {
                    "routes": [],
                    "name": "maintenanceOff",
                    "static": true,
                    "visibility": "public",
                    "signature": "maintenanceOff(WP_Upgrader $upgrader): void",
                    "doc": "Maintenance mode off; said only when it was on.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 229,
                    "end": 235
                },
                {
                    "routes": [],
                    "name": "destinationFor",
                    "static": true,
                    "visibility": "private",
                    "signature": "destinationFor(string $destination, string $source): string",
                    "doc": "The folder the item lands in: a folder named for the package inside a known parent, otherwise the destination itself.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "destination",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 238,
                    "end": 244
                },
                {
                    "routes": [],
                    "name": "clearOrRefuse",
                    "static": true,
                    "visibility": "private",
                    "signature": "clearOrRefuse(WP_Upgrader $upgrader, string $remote, array $args): WP_Error|bool",
                    "doc": "Clears the destination (an update's copy set aside first), or refuses when something is there and must not be replaced.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "remote",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 247,
                    "end": 265
                },
                {
                    "routes": [],
                    "name": "move",
                    "static": true,
                    "visibility": "private",
                    "signature": "move(string $source, string $remote, WP_Upgrader $upgrader): WP_Error|bool",
                    "doc": "The source moved (or, across filesystems, copied) to the destination; an existing destination is merged into.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "source",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "remote",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 268,
                    "end": 277
                },
                {
                    "routes": [],
                    "name": "copyInto",
                    "static": true,
                    "visibility": "private",
                    "signature": "copyInto(string $from, string $to): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 279,
                    "end": 290
                },
                {
                    "routes": [],
                    "name": "report",
                    "static": true,
                    "visibility": "private",
                    "signature": "report(WP_Upgrader $upgrader, mixed $result, array $extra): void",
                    "doc": "The run's outcome told to the skin; an update's set-aside copy put back on failure, removed on success.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "result",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 293,
                    "end": 308
                },
                {
                    "routes": [],
                    "name": "setAside",
                    "static": true,
                    "visibility": "private",
                    "signature": "setAside(WP_Upgrader $upgrader, array $backup): WP_Error|true",
                    "doc": "Moves an update's current copy to the backup folder (one left there by an earlier pass is replaced).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "upgrader",
                            "type": "WP_Upgrader",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "backup",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 311,
                    "end": 322
                },
                {
                    "routes": [],
                    "name": "putBack",
                    "static": true,
                    "visibility": "private",
                    "signature": "putBack(array $backup): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "backup",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 324,
                    "end": 334
                },
                {
                    "routes": [],
                    "name": "forget",
                    "static": true,
                    "visibility": "private",
                    "signature": "forget(array $backup): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "backup",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 336,
                    "end": 342
                },
                {
                    "routes": [],
                    "name": "backedUp",
                    "static": true,
                    "visibility": "private",
                    "signature": "backedUp(array $backup, string $end): ?string",
                    "doc": "Where an update's copy lives ('from') and where it is set aside ('to'), or null when the update names none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "backup",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "end",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 345,
                    "end": 354
                },
                {
                    "routes": [],
                    "name": "listing",
                    "static": true,
                    "visibility": "private",
                    "signature": "listing(string $folder): array",
                    "doc": "A folder's entries in the order the filesystem gives them, as the\nreference's dirlist reads them (no sorting).",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 362,
                    "end": 376
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\UserEvents",
            "short": "UserEvents",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/UserEvents.php",
            "lines": 102,
            "doc": "What the reference's REST users controller tells plugins, for the\nengine's own: with plugins loaded an account is written through the\nruntime's wp_insert_user, wp_update_user and wp_delete_user\n(wp_set_password, each profile meta, the role, clean_user_cache,\nuser_register and the count, profile_update, delete_user and\ndeleted_user), and the REST actions follow. Without a booted runtime each\nwrite is the engine's own, given as a closure.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Request",
                "Minn\\RestError",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Rest\\RestMeta",
                "Minn\\Rest\\RuntimeRoutes",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Rest\\UsersController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "live",
                    "static": false,
                    "visibility": "public",
                    "signature": "live(): bool",
                    "doc": "Whether plugins are loaded to be told anything.",
                    "shapes": [],
                    "params": [],
                    "line": 26,
                    "end": 29
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(array $userdata, string $role, Minn\\Http\\Request $request, Closure $quietly): int",
                    "doc": "Creates an account the way the REST controller does: wp_insert_user\nwith no role, rest_insert_user, then the role added, then\nrest_after_insert_user. Returns the new id.",
                    "shapes": [
                        "@param array<string, mixed> $userdata wp_insert_user's fields",
                        "@param Closure(): int $quietly the engine's own write"
                    ],
                    "params": [
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "wp_insert_user's fields"
                        },
                        {
                            "name": "role",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quietly",
                            "type": "Closure",
                            "shape": "Closure(): int",
                            "default": null,
                            "doc": "the engine's own write"
                        }
                    ],
                    "line": 39,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "update",
                    "static": false,
                    "visibility": "public",
                    "signature": "update(int $id, array $userdata, ?string $role, Minn\\Http\\Request $request, Closure $quietly): void",
                    "doc": "Updates an account: wp_update_user with the changed fields, the role\nwhen one is given, then the two REST actions.",
                    "shapes": [
                        "@param array<string, mixed> $userdata the fields the request changes",
                        "@param Closure(): void $quietly the engine's own write"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the fields the request changes"
                        },
                        {
                            "name": "role",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quietly",
                            "type": "Closure",
                            "shape": "Closure(): void",
                            "default": null,
                            "doc": "the engine's own write"
                        }
                    ],
                    "line": 68,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "delete",
                    "static": false,
                    "visibility": "public",
                    "signature": "delete(int $id, ?int $reassign, array $data, Minn\\Http\\Request $request, Closure $quietly): void",
                    "doc": "Deletes an account, its posts going to $reassign (or with it when\nnone), then rest_delete_user with the account as it was.",
                    "shapes": [
                        "@param array<string, mixed> $data the response",
                        "@param Closure(): void $quietly the engine's own delete"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "reassign",
                            "type": "?int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the response"
                        },
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quietly",
                            "type": "Closure",
                            "shape": "Closure(): void",
                            "default": null,
                            "doc": "the engine's own delete"
                        }
                    ],
                    "line": 96,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "prepared",
                    "static": true,
                    "visibility": "private",
                    "signature": "prepared(array $userdata, WP_REST_Request $request): array",
                    "doc": "rest_pre_insert_user over the prepared user (the request's fields), as\nthe reference runs it before the save; what the filter changes is\nsaved, an error refuses.",
                    "shapes": [
                        "@param array<string, mixed> $userdata",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "request",
                            "type": "WP_REST_Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 123
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\UserInsert",
            "short": "UserInsert",
            "namespace": "Minn\\Runtime",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Runtime/UserInsert.php",
            "lines": 122,
            "doc": "The decisions behind wp_insert_user: what a new account needs, which email\nand login collide, the resolved profile fields, and which columns an\nupdate changes. The sanitisers and lookups arrive as closures so the\nreference's filters apply. Behaviour pinned by contracts/fixtures/api/functions.json.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(Closure $sanitizeLogin, Closure $sanitizeSlug, Closure $isEmail, Closure $loginTaken, Closure $emailOwner, Closure $roleExists)",
                "doc": "",
                "shapes": [
                    "@param Closure(string): string $sanitizeLogin",
                    "@param Closure(string): string $sanitizeSlug",
                    "@param Closure(string): bool $isEmail",
                    "@param Closure(string): bool $loginTaken",
                    "@param Closure(string): int $emailOwner 0 when nobody has it",
                    "@param Closure(string): bool $roleExists"
                ],
                "params": [
                    {
                        "name": "sanitizeLogin",
                        "type": "Closure",
                        "shape": "Closure(string): string",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "sanitizeSlug",
                        "type": "Closure",
                        "shape": "Closure(string): string",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "isEmail",
                        "type": "Closure",
                        "shape": "Closure(string): bool",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "loginTaken",
                        "type": "Closure",
                        "shape": "Closure(string): bool",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "emailOwner",
                        "type": "Closure",
                        "shape": "Closure(string): int",
                        "default": null,
                        "doc": "0 when nobody has it"
                    },
                    {
                        "name": "roleExists",
                        "type": "Closure",
                        "shape": "Closure(string): bool",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 29
            },
            "cases": [],
            "constants": [
                {
                    "name": "META_KEYS",
                    "value": "array (   0 => 'nickname',   1 => 'first_name',   2 => 'last_name',   3 => 'description',   4 => 'rich_editing',   5 => 'syntax_highlighting',   6 => 'comment_shortcuts',   7 => 'admin_color',   8 => 'use_ssl',   9 => 'show_admin_bar_front',   10 => 'locale', )",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "sanitizeLogin",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "sanitizeSlug",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "isEmail",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "loginTaken",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "emailOwner",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "roleExists",
                    "type": "Closure",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "resolve",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolve(array $userdata, ?array $existing): Minn\\Runtime\\Refusal|array",
                    "doc": "The validated, resolved fields, or the refusal the reference gives.",
                    "shapes": [
                        "@param array<string, mixed> $userdata",
                        "@param array<string, mixed>|null $existing the current row on an update",
                        "@return array{login: string, email: string, nicename: ?string, display_name: string, role: ?string}|Refusal"
                    ],
                    "params": [
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": "the current row on an update"
                        }
                    ],
                    "line": 38,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "account",
                    "static": true,
                    "visibility": "public",
                    "signature": "account(array $userdata, array $resolved, string $defaultRole): array",
                    "doc": "The fields a new account is created from. @param array{login: string, email: string, nicename: ?string, display_name: string, role: ?string} $resolved @return array<string, mixed>",
                    "shapes": [
                        "@param array{login: string, email: string, nicename: ?string, display_name: string, role: ?string} $resolved @return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolved",
                            "type": "array",
                            "shape": "array{login: string, email: string, nicename: ?string, display_name: string, role: ?string}",
                            "default": null,
                            "doc": "@return array<string, mixed>"
                        },
                        {
                            "name": "defaultRole",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "changes",
                    "static": true,
                    "visibility": "public",
                    "signature": "changes(array $userdata, array $existing, array $resolved, Closure $url, Closure $hash): array",
                    "doc": "The columns an update actually changes.",
                    "shapes": [
                        "@param array<string, mixed> $existing",
                        "@param array{login: string, email: string, nicename: ?string, display_name: string, role: ?string} $resolved",
                        "@param Closure(string): string $url the URL sanitiser",
                        "@param Closure(string): string $hash the password hasher",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolved",
                            "type": "array",
                            "shape": "array{login: string, email: string, nicename: ?string, display_name: string, role: ?string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "url",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": "the URL sanitiser"
                        },
                        {
                            "name": "hash",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": "the password hasher"
                        }
                    ],
                    "line": 106,
                    "end": 135
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\UserOrder",
            "short": "UserOrder",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/UserOrder.php",
            "lines": 43,
            "doc": "A user query's ORDER BY keys as the reference writes them (probe\nwp-user-query-sql): the user columns by their short or full names, the\ndisplay name, a post count (its subquery joined in), the id, the meta\nkey or meta value, the order include or a name list gives, or a named\nmeta clause; '' for a key it does not know.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Runtime\\UserQueryRunner"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "SHORT",
                    "value": "array (   0 => 'login',   1 => 'nicename',   2 => 'email',   3 => 'url',   4 => 'registered', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "FULL",
                    "value": "array (   0 => 'user_login',   1 => 'user_nicename',   2 => 'user_email',   3 => 'user_url',   4 => 'user_registered', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "direction",
                    "static": true,
                    "visibility": "public",
                    "signature": "direction(mixed $order): string",
                    "doc": "ASC when asked for, DESC for anything else.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "order",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "clause",
                    "static": true,
                    "visibility": "public",
                    "signature": "clause(WP_User_Query $query, string $orderby, object $wpdb): string",
                    "doc": "The column or expression one orderby key stands for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "orderby",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpdb",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "postCount",
                    "static": true,
                    "visibility": "private",
                    "signature": "postCount(WP_User_Query $query, object $wpdb): string",
                    "doc": "Joins each author's published post count in, and orders by it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wpdb",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 57
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\UserQueryRoles",
            "short": "UserQueryRoles",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/UserQueryRoles.php",
            "lines": 91,
            "doc": "A user query's roles and capabilities as the meta clauses the reference\nwrites for them (probe wp-user-query-sql): a capability matches its own\nname or any role granting it, capability__in and __not_in widen the role\nlists, and each role is a LIKE on the site's capabilities meta (NOT LIKE\nto leave it out).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\UserQueryRunner"
            ],
            "constructor": {
                "signature": "__construct(string $capabilitiesKey)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "capabilitiesKey",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "capabilitiesKey",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "clauses",
                    "static": false,
                    "visibility": "public",
                    "signature": "clauses(array $qv, array $queries, array $roles): array",
                    "doc": "The meta query's clauses once the roles and capabilities join them.",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@param array<array-key, mixed> $queries the meta query's own clauses",
                        "@param array<string, array{capabilities: array<string, bool>}> $roles the site's roles",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "queries",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": "the meta query's own clauses"
                        },
                        {
                            "name": "roles",
                            "type": "array",
                            "shape": "array<string, array{capabilities: array<string, bool>}>",
                            "default": null,
                            "doc": "the site's roles"
                        }
                    ],
                    "line": 28,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "lists",
                    "static": false,
                    "visibility": "private",
                    "signature": "lists(array $qv, array $roles): array",
                    "doc": "The roles asked for, the role__in and role__not_in lists (widened by\nthe roles granting capability__in and __not_in, then the capabilities\nthemselves), and the roles granting each capability asked for.",
                    "shapes": [
                        "@param array<string, mixed> $qv",
                        "@param array<string, array{capabilities: array<string, bool>}> $roles",
                        "@return array{0: array{roles: list<string>, capabilities: list<string>}, 1: list<string>, 2: list<string>, 3: array<string, list<string>>}"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "roles",
                            "type": "array",
                            "shape": "array<string, array{capabilities: array<string, bool>}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "firstOf",
                    "static": true,
                    "visibility": "private",
                    "signature": "firstOf(array $wanted, array $granted): ?string",
                    "doc": "The first of the wanted capabilities a role grants, in the order asked. @param list<string> $wanted @param list<string> $granted",
                    "shapes": [
                        "@param list<string> $wanted @param list<string> $granted"
                    ],
                    "params": [
                        {
                            "name": "wanted",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@param list<string> $granted"
                        },
                        {
                            "name": "granted",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "like",
                    "static": false,
                    "visibility": "private",
                    "signature": "like(string $role, string $compare = 'LIKE'): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "role",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "compare",
                            "type": "string",
                            "shape": "",
                            "default": "'LIKE'",
                            "doc": ""
                        }
                    ],
                    "line": 100,
                    "end": 103
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\UserQueryRunner",
            "short": "UserQueryRunner",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/UserQueryRunner.php",
            "lines": 218,
            "doc": "WP_User_Query as the reference runs it (probe wp-user-query-sql): the\nvariables filled and handed to pre_get_users; the fields (a column list,\nids, the count), published authors, nicenames and logins, the meta query\nwith the roles and capabilities joined in, the order (post counts joined\nin, include and list orders kept), the limit, a search over the columns\nits shape suggests (through user_search_columns), ids in or out, the date\nquery, then pre_user_query; the query (users_pre_query may answer it),\nfound_users_query, and the results shaped as the fields ask.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Query\\Sql",
                "Minn\\Runtime\\UserOrder",
                "Minn\\Runtime\\UserQueryRoles",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(object $wpdb)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "wpdb",
                        "type": "object",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 27,
                "end": 29
            },
            "cases": [],
            "constants": [
                {
                    "name": "COLUMNS",
                    "value": "array (   0 => 'id',   1 => 'user_login',   2 => 'user_pass',   3 => 'user_nicename',   4 => 'user_email',   5 => 'user_url',   6 => 'user_registered',   7 => 'user_activation_key',   8 => 'user_status',   9 => 'display_name', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SEARCHABLE",
                    "value": "array (   0 => 'ID',   1 => 'user_login',   2 => 'user_email',   3 => 'user_url',   4 => 'user_nicename',   5 => 'display_name', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "EMAIL",
                    "value": "'user_email'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "URL",
                    "value": "'user_url'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "wpdb",
                    "type": "object",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "prepare",
                    "static": false,
                    "visibility": "public",
                    "signature": "prepare(WP_User_Query $query): void",
                    "doc": "Builds the query's pieces from its variables, as prepare_query does.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "searchSql",
                    "static": true,
                    "visibility": "public",
                    "signature": "searchSql(string $search, array $columns, string|false $wild): string",
                    "doc": "A search over columns (get_search_sql): ID matched exactly, the rest\nby LIKE with wildcards at the leading or trailing end, or both.",
                    "shapes": [
                        "@param list<string> $columns"
                    ],
                    "params": [
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "columns",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "wild",
                            "type": "string|false",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 192,
                    "end": 197
                },
                {
                    "routes": [],
                    "name": "query",
                    "static": false,
                    "visibility": "public",
                    "signature": "query(WP_User_Query $query): void",
                    "doc": "Runs the query: users_pre_query may answer it; the count follows; the results take the fields' shape.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 200,
                    "end": 236
                },
                {
                    "routes": [],
                    "name": "fields",
                    "static": false,
                    "visibility": "private",
                    "signature": "fields(array $qv): string",
                    "doc": "The SELECT's fields: named columns, ids, and the count's own. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "published",
                    "static": false,
                    "visibility": "private",
                    "signature": "published(array $qv, int $blog): string",
                    "doc": "Authors with published posts (of public types, or the ones named). @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "blog",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "names",
                    "static": false,
                    "visibility": "private",
                    "signature": "names(array $qv): string",
                    "doc": "One nicename or login, or lists of them, in or out. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": false,
                    "visibility": "private",
                    "signature": "meta(WP_User_Query $query, array $qv, int $blog): void",
                    "doc": "The meta query with roles and capabilities, joined and written in. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "blog",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "order",
                    "static": false,
                    "visibility": "private",
                    "signature": "order(WP_User_Query $query, array $qv): string",
                    "doc": "ORDER BY from a key, a list, or a map of keys to directions; user_login when none is usable. @param array<string, mixed> $qv",
                    "shapes": [
                        "@param array<string, mixed> $qv"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "qv",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 159
                },
                {
                    "routes": [],
                    "name": "search",
                    "static": false,
                    "visibility": "private",
                    "signature": "search(WP_User_Query $query, string $search, array $given): string",
                    "doc": "The search: wildcards at either end, the columns given (those the\nreference searches) or those its shape suggests, through\nuser_search_columns; ID matched exactly, the rest by LIKE.",
                    "shapes": [
                        "@param list<string> $given"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_User_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "search",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "given",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 184
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\UserSave",
            "short": "UserSave",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/UserSave.php",
            "lines": 74,
            "doc": "An account's fields through the filters the reference's wp_insert_user\nruns, in its order (probe user-insert-filters, contracts/runtime.md\n\"Accounts plugins can change\"): the login (pre_user_login), refused when\nillegal_user_logins names it; the nicename, made from the login for a\nnew account (pre_user_nicename); the email and the URL; the nickname\n(the login when none), first and last names; the display name, made as\nthe reference makes it when none is given; the description. Each\npre_user_* filter carries the reference's sanitisers. Then\nwp_pre_insert_user_data over the row and insert_user_meta over the meta.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Refusal"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "fields",
                    "static": true,
                    "visibility": "public",
                    "signature": "fields(array $userdata, ?array $existing): Minn\\Runtime\\Refusal|array",
                    "doc": "The fields after their filters, or the refusal for an illegal login.",
                    "shapes": [
                        "@param array<string, mixed> $userdata",
                        "@param array<string, mixed>|null $existing the stored account on an update",
                        "@return array<string, mixed>|Refusal"
                    ],
                    "params": [
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "existing",
                            "type": "?array",
                            "shape": "array<string, mixed>|null",
                            "default": null,
                            "doc": "the stored account on an update"
                        }
                    ],
                    "line": 27,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "data",
                    "static": true,
                    "visibility": "public",
                    "signature": "data(array $row, int $userId, array $userdata): array",
                    "doc": "wp_pre_insert_user_data over the row an insert or update writes: the\nrow, whether it updates, the account's id (null for a new one), what\nthe caller gave.",
                    "shapes": [
                        "@param array<string, mixed> $row",
                        "@param array<string, mixed> $userdata",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "meta",
                    "static": true,
                    "visibility": "public",
                    "signature": "meta(array $meta, int $userId, array $userdata): array",
                    "doc": "insert_user_meta over the profile meta, then insert_custom_user_meta\nover the meta_input the caller gave beyond it; the two merged. An\nupdate is one whose userdata names an ID.",
                    "shapes": [
                        "@param array<string, mixed> $meta",
                        "@param array<string, mixed> $userdata",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "meta",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userdata",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 83,
                    "end": 90
                }
            ]
        },
        {
            "name": "Minn\\Runtime\\WidgetAreas",
            "short": "WidgetAreas",
            "namespace": "Minn\\Runtime",
            "kind": "final class",
            "file": "public/minn/src/Minn/Runtime/WidgetAreas.php",
            "lines": 184,
            "doc": "The widgets helper functions as the reference answers them (probe\nwidget-helpers): a widget id split into its base and number, a sidebar\nby id (the inactive widgets are a sidebar too, with a name and nothing\nelse), finding and moving a widget between sidebars, one widget rendered\nin its sidebar as dynamic_sidebar renders each (an unregistered widget\nrenders nothing), and the sidebars with every registered one present.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\SidebarsController",
                "Minn\\Rest\\WidgetObject",
                "Minn\\Rest\\WidgetsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "INACTIVE",
                    "value": "'wp_inactive_widgets'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "MAPPING_GROUPS",
                    "value": "array (   0 =>    array (     0 => 'sidebar',     1 => 'primary',     2 => 'main',     3 => 'right',   ),   1 =>    array (     0 => 'second',     1 => 'left',   ),   2 =>    array (     0 => 'sidebar-2',     1 => 'footer',     2 => 'bottom',   ),   3 =>    array (     0 => 'header',     1 => 'top',   ), )",
                    "doc": "The id fragments a theme switch matches sidebars by, group by group (probe sidebars-mapping).",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $id): array",
                    "doc": "wp_parse_widget_id: ['id_base' => ..., 'number' => n], or the id alone as its base. @return array{id_base: string, number?: int}",
                    "shapes": [
                        "@return array{id_base: string, number?: int}"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "sidebar",
                    "static": true,
                    "visibility": "public",
                    "signature": "sidebar(string $id): ?array",
                    "doc": "wp_get_sidebar: a registered sidebar, the inactive widgets, or null. @return array<string, mixed>|null",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": true,
                    "visibility": "public",
                    "signature": "find(string $widgetId): ?string",
                    "doc": "wp_find_widgets_sidebar: the sidebar holding a widget, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widgetId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "assign",
                    "static": true,
                    "visibility": "public",
                    "signature": "assign(string $widgetId, string $sidebarId): void",
                    "doc": "wp_assign_widget_to_sidebar: out of every sidebar, then onto the end of one ('' leaves it in none).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widgetId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sidebarId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(string $widgetId, string $sidebarId): string",
                    "doc": "wp_render_widget: a registered widget as its sidebar wraps it, through dynamic_sidebar_params; '' otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widgetId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "sidebarId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 59,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "control",
                    "static": true,
                    "visibility": "public",
                    "signature": "control(string $widgetId): ?string",
                    "doc": "wp_render_widget_control: a registered widget's settings form, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widgetId",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 77,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "retrieve",
                    "static": true,
                    "visibility": "public",
                    "signature": "retrieve(array $stored, array $areas, array $registered): array",
                    "doc": "retrieve_widgets (probe widgets-remaining): the inactive list, then every\nregistered sidebar, holding only widgets that are registered. The\ninactive list takes, in order, the registered widgets no list mentions\n(the -1 placeholders aside, in the order they were registered), the\nwidgets already inactive, and the widgets of sidebars no longer\nregistered, which go.",
                    "shapes": [
                        "@param array<string, mixed> $stored the stored lists, sidebar => widget ids",
                        "@param list<string> $areas the registered sidebars",
                        "@param list<string> $registered the registered widgets",
                        "@return array<string, list<string>>"
                    ],
                    "params": [
                        {
                            "name": "stored",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the stored lists, sidebar => widget ids"
                        },
                        {
                            "name": "areas",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the registered sidebars"
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the registered widgets"
                        }
                    ],
                    "line": 101,
                    "end": 113
                },
                {
                    "routes": [],
                    "name": "map",
                    "static": true,
                    "visibility": "public",
                    "signature": "map(array $existing, array $areas, array $stored, array $registered): array",
                    "doc": "The old theme's widget lists fitted to the new theme's sidebars\n(probe sidebars-mapping). One old sidebar and one new map straight\nacross. Otherwise a sidebar of the same id keeps its widgets; then,\ngroup by group, the new sidebars whose ids hold one of the group's\nfragments take, in order, the old ones that do (a new sidebar may take\nfrom several groups); what is left goes after the inactive widgets.\nWhen nothing is inactive then, the stored inactive widgets that are\nregistered and placed nowhere come back, keys kept.",
                    "shapes": [
                        "@param array<string, mixed> $existing the old theme's lists",
                        "@param list<string> $areas the new theme's sidebars",
                        "@param array<array-key, mixed> $stored the theme's stored inactive widgets",
                        "@param list<string> $registered the registered widgets",
                        "@return array<string, array<array-key, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "existing",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the old theme's lists"
                        },
                        {
                            "name": "areas",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the new theme's sidebars"
                        },
                        {
                            "name": "stored",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": "the theme's stored inactive widgets"
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the registered widgets"
                        }
                    ],
                    "line": 134,
                    "end": 173
                },
                {
                    "routes": [],
                    "name": "inGroup",
                    "static": true,
                    "visibility": "private",
                    "signature": "inGroup(string $id, array $fragments): bool",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $fragments"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fragments",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 176,
                    "end": 184
                },
                {
                    "routes": [],
                    "name": "unmentioned",
                    "static": true,
                    "visibility": "private",
                    "signature": "unmentioned(array $stored, array $registered): array",
                    "doc": "Registered widgets no stored list mentions, the -1 placeholders aside.",
                    "shapes": [
                        "@param array<string, mixed> $stored",
                        "@param list<string> $registered",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "stored",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "registered",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 197
                }
            ]
        },
        {
            "name": "Minn\\Support\\Accents",
            "short": "Accents",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Accents.php",
            "lines": 35,
            "doc": "Accented and special characters to their plain spelling, from the\nreference's own table (data/accents.json, captured with\ntests/tools/accents-capture.php): text is put in composed form first, a\nlocale with spellings of its own (German, Danish, Catalan, Serbian,\nBosnian) has them, and a string that is not UTF-8 is read as Latin-1.\nAnything the table does not name stays as it is.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Content\\Slug"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "data",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "strip",
                    "static": true,
                    "visibility": "public",
                    "signature": "strip(string $text, string $locale = ''): string",
                    "doc": "The text with its accented characters spelled plainly, as the locale spells them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 41
                },
                {
                    "routes": [],
                    "name": "data",
                    "static": true,
                    "visibility": "private",
                    "signature": "data(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{table: array<string, string>, locales: array<string, array<string, string>>, latin1: array<string, string>}"
                    ],
                    "params": [],
                    "line": 44,
                    "end": 51
                }
            ]
        },
        {
            "name": "Minn\\Support\\Backtrace",
            "short": "Backtrace",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Backtrace.php",
            "lines": 32,
            "doc": "A call stack named as wp_debug_backtrace_summary names it (probe\nplaceholders-a): Class->method, Class::method and function names; a\nhook's function with the hook named; an included file by its path with\nthe given prefixes taken off, in order. Innermost first.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "HOOKS",
                    "value": "array (   0 => 'do_action',   1 => 'apply_filters',   2 => 'do_action_ref_array',   3 => 'apply_filters_ref_array', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "INCLUDES",
                    "value": "array (   0 => 'include',   1 => 'include_once',   2 => 'require',   3 => 'require_once', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "summary",
                    "static": true,
                    "visibility": "public",
                    "signature": "summary(array $frames, ?string $ignoreClass, int $skip, array $truncate): array",
                    "doc": "The frames' names, after the first $skip.",
                    "shapes": [
                        "@param list<array<string, mixed>> $frames debug_backtrace()'s frames, innermost first",
                        "@param list<string> $truncate path prefixes taken off an included file",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "frames",
                            "type": "array",
                            "shape": "list<array<string, mixed>>",
                            "default": null,
                            "doc": "debug_backtrace()'s frames, innermost first"
                        },
                        {
                            "name": "ignoreClass",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "truncate",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "path prefixes taken off an included file"
                        }
                    ],
                    "line": 25,
                    "end": 43
                }
            ]
        },
        {
            "name": "Minn\\Support\\DirectoryListing",
            "short": "DirectoryListing",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/DirectoryListing.php",
            "lines": 34,
            "doc": "Walks a directory the way the filesystem API lists it: named entries, dot entries skipped, hidden ones optional, recursion optional.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $path, bool $includeHidden, bool $recursive, ?string $onlyName, callable $describe): array|false",
                    "doc": "A directory's entries described one by one, or false when unreadable.",
                    "shapes": [
                        "@param callable(string): array<string, mixed> $describe the entry's own fields for an absolute path",
                        "@return array<string, array<string, mixed>>|false false when the path is not a readable directory"
                    ],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "includeHidden",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "recursive",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "onlyName",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "describe",
                            "type": "callable",
                            "shape": "callable(string): array<string, mixed>",
                            "default": null,
                            "doc": "the entry's own fields for an absolute path"
                        }
                    ],
                    "line": 16,
                    "end": 40
                }
            ]
        },
        {
            "name": "Minn\\Support\\Email",
            "short": "Email",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Email.php",
            "lines": 69,
            "doc": "The address rules the reference applies: a local part from a fixed\ncharacter class, a dotted domain of hyphen-trimmed labels. `check` names\nthe first rule an address breaks; `sanitize` strips what it can and names\nwhy it gave up.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\CommentsController"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "LOCAL_CHARACTER",
                    "value": "'a-zA-Z0-9!#$%&\\'*+\\\\/=?^_`{|}~\\\\.-'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "check",
                    "static": true,
                    "visibility": "public",
                    "signature": "check(string $email): ?string",
                    "doc": "Why an address is invalid, or null when it passes the reference's checks.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "email",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(string $raw): array",
                    "doc": "An address with the characters the reference strips removed, and what was removed.",
                    "shapes": [
                        "@return array{0: string, 1: string|null} the cleaned address (empty when refused) and the reason"
                    ],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 80
                }
            ]
        },
        {
            "name": "Minn\\Support\\Entities",
            "short": "Entities",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Entities.php",
            "lines": 82,
            "doc": "HTML special-character encoding with the reference's quote styles and its\n\"do not double encode\" rule: an ampersand that already starts a known\nnamed or numeric entity stays as it is.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Runtime\\AccountFlows",
                "Minn\\Support\\Escape",
                "Minn\\Support\\Kses"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DECODE",
                    "value": "array (   '&amp;' => '&',   '&#038;' => '&',   '&#x26;' => '&',   '&lt;' => '<',   '&#060;' => '<',   '&#x3C;' => '<',   '&gt;' => '>',   '&#062;' => '>',   '&#x3E;' => '>', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "DOUBLE_QUOTES",
                    "value": "array (   '&quot;' => '\"',   '&#034;' => '\"',   '&#x22;' => '\"', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SINGLE_QUOTES",
                    "value": "array (   '&#039;' => '\\'',   '&#x27;' => '\\'',   '&#39;' => '\\'',   '&apos;' => '\\'', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "specialchars",
                    "static": true,
                    "visibility": "public",
                    "signature": "specialchars(string $text, string|int|false $quoteStyle, bool $doubleEncode, callable $knownEntity): string",
                    "doc": "The reference's special-characters escaping, with its quote styles and double-encoding rule.",
                    "shapes": [
                        "@param callable(string): bool $knownEntity whether a named entity is in the allowed table"
                    ],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quoteStyle",
                            "type": "string|int|false",
                            "shape": "int|string|false",
                            "default": null,
                            "doc": "ENT_* flags, 'single', 'double', or false for none"
                        },
                        {
                            "name": "doubleEncode",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "knownEntity",
                            "type": "callable",
                            "shape": "callable(string): bool",
                            "default": null,
                            "doc": "whether a named entity is in the allowed table"
                        }
                    ],
                    "line": 20,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "public",
                    "signature": "decode(string $text, string|int $quoteStyle): string",
                    "doc": "The reverse of specialchars: the five characters back, with the quote pairs the style asks for.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "quoteStyle",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "convertInvalid",
                    "static": true,
                    "visibility": "public",
                    "signature": "convertInvalid(string $text): string",
                    "doc": "Windows-1252 numeric references rewritten as the Unicode references they meant.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 89,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "encodeStrayAmpersands",
                    "static": true,
                    "visibility": "private",
                    "signature": "encodeStrayAmpersands(string $text, callable $knownEntity): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "knownEntity",
                            "type": "callable",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 45
                },
                {
                    "routes": [],
                    "name": "windows1252",
                    "static": true,
                    "visibility": "private",
                    "signature": "windows1252(): array",
                    "doc": "Decimal references 128 to 159 name Windows-1252 characters, not the C1\ncontrols Unicode puts there; each becomes the reference to the Unicode\ncharacter it meant, and a code Windows-1252 leaves unassigned is\nremoved. Only the exact unpadded decimal spelling is touched.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 74,
                    "end": 86
                }
            ]
        },
        {
            "name": "Minn\\Support\\Escape",
            "short": "Escape",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Escape.php",
            "lines": 25,
            "doc": "Text made safe for HTML the way WordPress's escapers make it (esc_html,\nesc_attr): invalid UTF-8 emptied, entities already present normalised\nrather than encoded again, the specials and both quotes encoded, then the\nfilter plugins hook (esc_html, attribute_escape) handed the result and the\noriginal.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Entities",
                "Minn\\Support\\Kses",
                "Minn\\Support\\KsesEntities"
            ],
            "usedBy": [
                "Minn\\Content\\MediaShortcodes",
                "Minn\\Content\\TextFilters",
                "Minn\\Front\\EmbedCard",
                "Minn\\Front\\FeedTags",
                "Minn\\Front\\PageLinks",
                "Minn\\Front\\PostEmbed",
                "Minn\\Front\\ToolbarMarkup",
                "Minn\\Front\\ToolbarMenus",
                "Minn\\Runtime\\NavMenu",
                "Minn\\Runtime\\OptionSanitizer",
                "Minn\\Runtime\\UpdateCounts",
                "Minn\\Support\\KsesAttributes",
                "Minn\\Support\\TimezoneChoice",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Widgets\\WidgetForms"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(mixed $text): string",
                    "doc": "Text for an element's content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 20
                },
                {
                    "routes": [],
                    "name": "attr",
                    "static": true,
                    "visibility": "public",
                    "signature": "attr(mixed $text): string",
                    "doc": "Text for an attribute's value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "encoded",
                    "static": true,
                    "visibility": "private",
                    "signature": "encoded(string $text): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 28,
                    "end": 37
                }
            ]
        },
        {
            "name": "Minn\\Support\\FileHeaders",
            "short": "FileHeaders",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/FileHeaders.php",
            "lines": 27,
            "doc": "Header values from a plugin or theme file. The labels (Plugin Name,\nTheme Name, Version) are the published file-header contract; the\nreader is a line scan of the first 8 KB, never PHP execution.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\App",
                "Minn\\Admin\\ThemesController",
                "Minn\\Cli\\ThemeCommand",
                "Minn\\Content\\Inventory",
                "Minn\\Ops\\InstalledSoftware",
                "Minn\\Ops\\Packages",
                "Minn\\Ops\\Updates",
                "Minn\\Runtime\\PluginRequirements",
                "Minn\\Runtime\\Plugins",
                "Minn\\Theme\\Folder"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "values",
                    "static": true,
                    "visibility": "public",
                    "signature": "values(string $file, array $labels): array",
                    "doc": "The header values of a plugin or theme file, by label.",
                    "shapes": [
                        "@param list<string> $labels",
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "labels",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 37
                }
            ]
        },
        {
            "name": "Minn\\Support\\FileTree",
            "short": "FileTree",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/FileTree.php",
            "lines": 70,
            "doc": "Whole-directory reads and copies. The engine's own installer, the update\nunpacker and the plugins that reach for WordPress's copy_dir all want the\nsame two operations: list a tree, and duplicate one.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "files",
                    "static": true,
                    "visibility": "public",
                    "signature": "files(string $dir, int $depth = 0, array $skip = array ( ), int $level = 1): array|false",
                    "doc": "Every file under a directory, and every directory itself with a trailing\nslash, to the given depth. Depth 0 means no limit; depth 1 stops at the\ndirectory's own entries and names its subdirectories without descending.",
                    "shapes": [
                        "@param list<string> $skip names to leave out at every level",
                        "@return list<string>|false false when the directory cannot be read"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array ( )",
                            "doc": "names to leave out at every level"
                        },
                        {
                            "name": "level",
                            "type": "int",
                            "shape": "",
                            "default": "1",
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "copy",
                    "static": true,
                    "visibility": "public",
                    "signature": "copy(string $from, string $to, array $skip = array ( )): bool",
                    "doc": "Copies a directory's contents into another, creating it if it is not\nthere. Names in $skip are left behind at the top level only, which is\nhow the update unpacker keeps a directory it means to preserve.",
                    "shapes": [
                        "@param list<string> $skip"
                    ],
                    "params": [
                        {
                            "name": "from",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "to",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 57,
                    "end": 80
                }
            ]
        },
        {
            "name": "Minn\\Support\\Files",
            "short": "Files",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Files.php",
            "lines": 66,
            "doc": "Recursive filesystem work behind WP_Filesystem_Direct: best-effort tree\ndelete and chmod (suppressed errors, keep-going semantics, the AND of\nevery step as the result), and the symbolic-to-octal permission string\nconversion. The facade class keeps the reference's argument handling and\nmaps each operation here.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Cli\\Installer",
                "Minn\\Ops\\EngineChecksums",
                "Minn\\Ops\\EngineUpdate",
                "Minn\\Ops\\Packages",
                "Minn\\Runtime\\PluginRemoval",
                "Minn\\Runtime\\ThemeSwitch",
                "Minn\\Runtime\\Upgrade"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "octalFromSymbolic",
                    "static": true,
                    "visibility": "public",
                    "signature": "octalFromSymbolic(string $mode): string",
                    "doc": "drwxr-xr-x (or any rwx string) to its octal digits, the reference's tallying shape.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mode",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "deleteTree",
                    "static": true,
                    "visibility": "public",
                    "signature": "deleteTree(string $path): bool",
                    "doc": "Delete a directory tree, files first, best effort; true only when\neverything went. A symlinked directory is unlinked, never followed:\nthe dev sites symlink plugin folders into the tree, and a delete that\nreached through one would empty the real source.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "chmodTree",
                    "static": true,
                    "visibility": "public",
                    "signature": "chmodTree(string $path, int $mode): bool",
                    "doc": "Apply a mode to every FILE under a directory (the directories themselves keep theirs); always reports true.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "mode",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 78
                }
            ]
        },
        {
            "name": "Minn\\Support\\Flag",
            "short": "Flag",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Flag.php",
            "lines": 11,
            "doc": "A yes or no as WordPress reads one from loose input (wp_validate_boolean).",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Content\\MediaShortcodes"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(mixed $value): bool",
                    "doc": "The string \"false\" in any case is no; anything else is PHP's truth.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 11,
                    "end": 17
                }
            ]
        },
        {
            "name": "Minn\\Support\\Hierarchy",
            "short": "Hierarchy",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Hierarchy.php",
            "lines": 52,
            "doc": "Loops in a parent chain, found with two walkers: a slow one that takes one\nstep at a time and a fast one that takes two (probe functions-utils, the\nhierarchy-loop finders). They meet only when the chain loops; it ends\nwhen a parent is empty. Each walker reads parents through the closure it\nis given, so a caller can override any node's parent.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "meeting",
                    "static": true,
                    "visibility": "public",
                    "signature": "meeting(Closure $parentOf, mixed $start): mixed",
                    "doc": "The node where the slow walker meets the fast one, or null when the chain ends.",
                    "shapes": [
                        "@param Closure(mixed): mixed $parentOf a node's parent"
                    ],
                    "params": [
                        {
                            "name": "parentOf",
                            "type": "Closure",
                            "shape": "Closure(mixed): mixed",
                            "default": null,
                            "doc": "a node's parent"
                        },
                        {
                            "name": "start",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "walked",
                    "static": true,
                    "visibility": "public",
                    "signature": "walked(Closure $parentOf, mixed $start): ?array",
                    "doc": "Every node either walker stepped on before they met, in the order first\nreached (the slow walker's node, then the fast one's two steps), or null\nwhen the chain ends without a loop.",
                    "shapes": [
                        "@param Closure(mixed): mixed $parentOf a node's parent",
                        "@return array<int|string, true>|null"
                    ],
                    "params": [
                        {
                            "name": "parentOf",
                            "type": "Closure",
                            "shape": "Closure(mixed): mixed",
                            "default": null,
                            "doc": "a node's parent"
                        },
                        {
                            "name": "start",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "walk",
                    "static": true,
                    "visibility": "private",
                    "signature": "walk(Closure $parentOf, mixed $start): array",
                    "doc": "",
                    "shapes": [
                        "@return array{0: mixed, 1: array<int|string, true>} the meeting node (or null) and the nodes walked"
                    ],
                    "params": [
                        {
                            "name": "parentOf",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "start",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 66
                }
            ]
        },
        {
            "name": "Minn\\Support\\Ip",
            "short": "Ip",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Ip.php",
            "lines": 22,
            "doc": "Addresses with their identifying tail removed, for logs and analytics that\nmust not keep a visitor's exact address. An IPv4 address loses its last\noctet, an IPv6 address its last four groups. Anything that is not an\naddress at all reads as the unspecified IPv4 address rather than as itself,\nso a malformed value can never leak through unchanged.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "UNSPECIFIED",
                    "value": "'0.0.0.0'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "anonymize",
                    "static": true,
                    "visibility": "public",
                    "signature": "anonymize(string $address): string",
                    "doc": "An address with its last octet, or its tail, zeroed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "address",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 34
                }
            ]
        },
        {
            "name": "Minn\\Support\\Kses",
            "short": "Kses",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Kses.php",
            "lines": 481,
            "doc": "The HTML a user without unfiltered_html may store. Tags outside the\nallowlist are removed and their text kept; attributes outside the tag's\nlist are dropped; URL attributes lose unsafe schemes; style attributes\nkeep only listed properties and no code. Comments keep their text, and\nblock delimiters are written back with their attribute values filtered.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\Serializer",
                "Minn\\Html\\Decoder",
                "Minn\\Support\\Entities",
                "Minn\\Support\\KsesCss",
                "Minn\\Support\\KsesEntities",
                "Minn\\Support\\KsesPolicy",
                "Minn\\Support\\KsesValues",
                "Minn\\Support\\Utf8"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\LatestComments",
                "Minn\\Blocks\\Dynamic\\SocialLinks",
                "Minn\\Blocks\\Dynamic\\Theme\\Comments",
                "Minn\\Blocks\\Dynamic\\Theme\\Navigation",
                "Minn\\Content\\Users",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\PostsWriteController",
                "Minn\\Rest\\RevisionsController",
                "Minn\\Rest\\TermsController",
                "Minn\\Rest\\UsersController",
                "Minn\\Runtime\\TagEditor",
                "Minn\\Support\\Escape",
                "Minn\\Support\\KsesAttributes",
                "Minn\\Support\\KsesCss",
                "Minn\\Support\\KsesPolicy",
                "Minn\\Theme\\PatternText"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "COMMENT",
                    "value": "array (   'a' =>    array (     0 => 'href',     1 => 'title',     2 => 'rel',   ),   'abbr' =>    array (     0 => 'title',   ),   'acronym' =>    array (     0 => 'title',   ),   'b' =>    array (   ),   'blockquote' =>    array (     0 => 'cite',   ),   'cite' =>    array (   ),   'code' =>    array (   ),   'del' =>    array (     0 => 'datetime',   ),   'em' =>    array (   ),   'i' =>    array (   ),   'q' =>    array (     0 => 'cite',   ),   's' =>    array (   ),   'strike' =>    array (   ),   'strong' =>    array (   ), )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "URI_ATTRIBUTES",
                    "value": "array (   0 => 'action',   1 => 'archive',   2 => 'background',   3 => 'cite',   4 => 'classid',   5 => 'codebase',   6 => 'data',   7 => 'formaction',   8 => 'href',   9 => 'icon',   10 => 'longdesc',   11 => 'manifest',   12 => 'poster',   13 => 'profile',   14 => 'src',   15 => 'usemap',   16 => 'xmlns', )",
                    "doc": "Every attribute the reference treats as holding a URI, so its scheme is judged wherever the attribute is allowed.",
                    "visibility": "public"
                },
                {
                    "name": "SCHEMES",
                    "value": "array (   0 => 'http',   1 => 'https',   2 => 'ftp',   3 => 'ftps',   4 => 'mailto',   5 => 'news',   6 => 'irc',   7 => 'gopher',   8 => 'nntp',   9 => 'feed',   10 => 'telnet',   11 => 'mms',   12 => 'rtsp',   13 => 'sms',   14 => 'svn',   15 => 'tel',   16 => 'fax',   17 => 'xmpp',   18 => 'webcal',   19 => 'urn', )",
                    "doc": "The URI schemes allowed by default.",
                    "visibility": "public"
                },
                {
                    "name": "REFERENCE",
                    "value": "'/&(#[0-9]+|#[xX][0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]{0,31});/'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "STRAY_AMPERSAND",
                    "value": "'/&(?!(?:#[0-9]+|#[xX][0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]{0,31});)/'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "MARKUP",
                    "value": "array (   '&' => '&amp;',   '<' => '&lt;',   '>' => '&gt;',   '\"' => '&quot;',   '\\'' => '&apos;', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "post",
                    "static": true,
                    "visibility": "public",
                    "signature": "post(string $html): string",
                    "doc": "Post content as an author without unfiltered_html may store it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "comment",
                    "static": true,
                    "visibility": "public",
                    "signature": "comment(string $html): string",
                    "doc": "A comment, profile or term description as anyone without unfiltered_html may store it: listed attributes only.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "sanitize",
                    "static": true,
                    "visibility": "public",
                    "signature": "sanitize(string $html, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "The whole pass wp_kses makes with its default hooks: control\ncharacters out, references normalized, a \"<\" that opens no tag\nescaped, block attribute values filtered the same way, then the tags.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "withoutControls",
                    "static": true,
                    "visibility": "public",
                    "signature": "withoutControls(string $html): string",
                    "doc": "The control characters kses removes (tab, newline and carriage return stay).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "normalizeEntities",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalizeEntities(string $html): string",
                    "doc": "Every \"&\" made a reference, in one pass: a known name or a code point\nkses accepts stays one (decimal padded to three digits, hex with a\nlower-case x), anything else becomes \"&amp;\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "lessThan",
                    "static": true,
                    "visibility": "public",
                    "signature": "lessThan(string $html, ?Closure $escape = NULL): string",
                    "doc": "A \"<\" that reaches the next \"<\" or the end without a \">\" is text: the\nrun is escaped the way esc_html escapes it (quotes included).",
                    "shapes": [
                        "@param (Closure(string): string)|null $escape"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "escape",
                            "type": "?Closure",
                            "shape": "(Closure(string): string)|null",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 94,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "escapeHtml",
                    "static": true,
                    "visibility": "public",
                    "signature": "escapeHtml(string $text): string",
                    "doc": "Text escaped for HTML with references kept: invalid UTF-8 gives nothing, quotes become &quot; and &#039;.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 107
                },
                {
                    "routes": [],
                    "name": "blockAttributes",
                    "static": true,
                    "visibility": "public",
                    "signature": "blockAttributes(string $html, Closure $clean): string",
                    "doc": "Block markup with every attribute key and string value passed through\nthe same filter, and the delimiters written back in their canonical\nform (\"--->\" read as \"-->\"). Markup without a comment is left alone.",
                    "shapes": [
                        "@param Closure(string): string $clean"
                    ],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clean",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "filter",
                    "static": true,
                    "visibility": "public",
                    "signature": "filter(string $html, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "The tag pass: each run from \"<\" to the next \">\" (or the end) is a\ncomment, an inert bogus comment (\"</\" before a non-letter, \"<!\"\nbefore a lower-case letter), or an element judged by the policy;\nanything else in angle brackets goes. Text between keeps its\nreferences, with stray ones escaped. Run alone (wp_kses_split), a\nlast \"<\" with no \">\" still reads as a tag; inside sanitize() the\nless-than pass has already escaped it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "html",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 155,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "tag",
                    "static": true,
                    "visibility": "public",
                    "signature": "tag(string $run, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "One run of the tag pass on its own (wp_kses_split2): a comment, a\ntag, or, for anything not starting with \"<\", a lone \">\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "run",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 168,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "element",
                    "static": true,
                    "visibility": "public",
                    "signature": "element(string $element, string $attributes, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "An element rebuilt with the attributes the policy allows it\n(wp_kses_attr), its name as written and an XHTML slash kept; an\nelement the policy does not know keeps none.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "element",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 178,
                    "end": 181
                },
                {
                    "routes": [],
                    "name": "attributeList",
                    "static": true,
                    "visibility": "public",
                    "signature": "attributeList(string $raw): ?array",
                    "doc": "The attributes written inside a tag, read the way kses reads them: a\nname, then \"=\" and a quoted or bare value, or no value at all; junk\nbetween (stray quotes, \"=\", \"/\") is skipped; the first of two\nsame-named attributes wins. Null when a quoted value never closes,\nwhich costs the tag every attribute.",
                    "shapes": [
                        "@return array<string, array{name: string, value: ?string, whole: string}>|null"
                    ],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 233,
                    "end": 268
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "public",
                    "signature": "text(string $value): string",
                    "doc": "Plain text: tags gone, whitespace collapsed, control characters dropped.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 277
                },
                {
                    "routes": [],
                    "name": "url",
                    "static": true,
                    "visibility": "public",
                    "signature": "url(string $url): string",
                    "doc": "A URL for a stored field: empty when its scheme is not one the\nreference allows. The scheme is judged as a browser reads it, without\nthe tabs, line breaks and other control characters it drops (java,\na tab, then script: is javascript:).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 285,
                    "end": 293
                },
                {
                    "routes": [],
                    "name": "attributeUrl",
                    "static": true,
                    "visibility": "public",
                    "signature": "attributeUrl(string $url, array $schemes = self::SCHEMES): string",
                    "doc": "A URL inside markup: whatever stands before the first colon, once\nevery character reference and percent escape is decoded as deep as it\ngoes and the invisible characters are dropped, must be an allowed\nscheme, or it is cut off and the rest is judged again. The reference\ncuts \"?q=a:b\" to \"b\" and \"javascript:alert(1)//http://\" to \"//\" the\nsame way. A value with a good scheme is returned as given.",
                    "shapes": [
                        "@param list<string> $schemes"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "schemes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": "self::SCHEMES",
                            "doc": ""
                        }
                    ],
                    "line": 305,
                    "end": 321
                },
                {
                    "routes": [],
                    "name": "validCodePoint",
                    "static": true,
                    "visibility": "public",
                    "signature": "validCodePoint(int $code): bool",
                    "doc": "Whether a code point is one a reference may name (valid_unicode): tab,\nline feed, carriage return, and the rest of Unicode from space up,\nexcept the surrogates and U+FFFE and U+FFFF.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 413,
                    "end": 419
                },
                {
                    "routes": [],
                    "name": "pdfObject",
                    "static": true,
                    "visibility": "public",
                    "signature": "pdfObject(string $url, string $uploadsUrl): bool",
                    "doc": "Whether a URL may be an object's data in post content: an http or https\nURL on the uploads host and port, no credentials, query or fragment,\nwhose path ends in \".pdf\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uploadsUrl",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 473,
                    "end": 487
                },
                {
                    "routes": [],
                    "name": "cleanValue",
                    "static": true,
                    "visibility": "private",
                    "signature": "cleanValue(mixed $value, Closure $clean): mixed",
                    "doc": "",
                    "shapes": [
                        "@param Closure(string): string $clean"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "clean",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 131,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "run",
                    "static": true,
                    "visibility": "private",
                    "signature": "run(string $run, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "One bracketed run as the tag pass keeps it, or nothing.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "run",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 184,
                    "end": 205
                },
                {
                    "routes": [],
                    "name": "htmlComment",
                    "static": true,
                    "visibility": "private",
                    "signature": "htmlComment(string $body, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "A comment kept whole, its body run through the same pass (a \">\" in it\nescaped, tags judged): no \"--\" inside, an empty one dropped, an\nunclosed one closed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 212,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "deepDecode",
                    "static": true,
                    "visibility": "private",
                    "signature": "deepDecode(string $value): string",
                    "doc": "A value with its references and percent escapes decoded until nothing changes, so no encoding hides a scheme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 324,
                    "end": 334
                },
                {
                    "routes": [],
                    "name": "visible",
                    "static": true,
                    "visibility": "private",
                    "signature": "visible(string $text): string",
                    "doc": "The text with whitespace, control characters, no-break spaces, and replacement characters removed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 337,
                    "end": 341
                },
                {
                    "routes": [],
                    "name": "normalizeText",
                    "static": true,
                    "visibility": "private",
                    "signature": "normalizeText(string $text): string",
                    "doc": "Text between tags as the reference stores it: valid references stay\nreferences (decimal ones padded to three digits), invalid ones and\nstray ampersands become \"&amp;\", and a closing bracket is escaped.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 352,
                    "end": 367
                },
                {
                    "routes": [],
                    "name": "normalizeAttribute",
                    "static": true,
                    "visibility": "private",
                    "signature": "normalizeAttribute(string $value): string",
                    "doc": "An attribute value as the reference stores it: valid references become\ntheir characters, except that the five markup characters stay escaped\n(an apostrophe as &apos;); invalid references and stray ampersands\nbecome \"&amp;\"; raw quotes are escaped.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 375,
                    "end": 392
                },
                {
                    "routes": [],
                    "name": "named",
                    "static": true,
                    "visibility": "private",
                    "signature": "named(string $name): ?string",
                    "doc": "What a named reference stands for, or null when the name is not one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 395,
                    "end": 399
                },
                {
                    "routes": [],
                    "name": "codePoint",
                    "static": true,
                    "visibility": "private",
                    "signature": "codePoint(string $body): ?int",
                    "doc": "A numeric reference's code point, or null when it names no character the reference accepts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 402,
                    "end": 406
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "attributes(string $raw, string $tag, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "The attributes the policy allows, in the order written: a value must\nmeet its rules, a URI keeps only an allowed scheme, srcset and style are\njudged on their own terms. A tag that loses a required attribute keeps\nnone at all.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "raw",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 427,
                    "end": 449
                },
                {
                    "routes": [],
                    "name": "rendered",
                    "static": true,
                    "visibility": "private",
                    "signature": "rendered(string $name, ?string $value, Minn\\Support\\KsesPolicy $policy): ?string",
                    "doc": "One allowed attribute as stored, or null when its value is judged away entirely.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "value",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 452,
                    "end": 466
                },
                {
                    "routes": [],
                    "name": "srcset",
                    "static": true,
                    "visibility": "private",
                    "signature": "srcset(string $value): string",
                    "doc": "Every candidate must be an absolute URL with a safe scheme, or the attribute goes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 490,
                    "end": 499
                }
            ]
        },
        {
            "name": "Minn\\Support\\KsesAttributes",
            "short": "KsesAttributes",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/KsesAttributes.php",
            "lines": 76,
            "doc": "Kses one attribute at a time, for the shortcode pass that runs inside\nHTML tags: an opening tag cut into its attributes, and one attribute\njudged as kses judges it on its element. Probe shortcode-run.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Escape",
                "Minn\\Support\\Kses",
                "Minn\\Support\\KsesCss",
                "Minn\\Support\\KsesPolicy",
                "Minn\\Support\\KsesValues"
            ],
            "usedBy": [
                "Minn\\Runtime\\Shortcodes"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "elementParts",
                    "static": true,
                    "visibility": "public",
                    "signature": "elementParts(string $element): ?array",
                    "doc": "An opening tag cut as wp_kses_attr_parse cuts it: the start (\"<a \"),\neach attribute with the whitespace after it (a shortcode standing as\na name counts as one), and the end (\">\" or \"/>\"). Null for a closing\ntag, a comment, CDATA, or anything between the brackets that is not\nattributes.",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "element",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $attributes): ?array",
                    "doc": "An attribute string cut into its attributes, each with the whitespace\nafter it (wp_kses_hair_parse): a name (or a shortcode standing as one),\nthen \"=\" and a quoted or bare value, or nothing. Null when anything in\nit is not an attribute: leading whitespace, a stray quote, a quoted\nvalue that never closes.",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "oneAttribute",
                    "static": true,
                    "visibility": "public",
                    "signature": "oneAttribute(string $attr, string $element, Minn\\Support\\KsesPolicy $policy): string",
                    "doc": "One attribute as written, judged as kses judges it on the element\n(wp_kses_one_attr): the value escaped for an attribute and kept in its\nown quotes (a bare one gains double quotes), a URL's bad scheme cut\naway, style kept to the allowed properties; nothing when the element\nmay not carry it or a quoted value never closes. The whitespace\naround it stays.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attr",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "element",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "policy",
                            "type": "Minn\\Support\\KsesPolicy",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 86
                }
            ]
        },
        {
            "name": "Minn\\Support\\KsesCss",
            "short": "KsesCss",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/KsesCss.php",
            "lines": 138,
            "doc": "The style attribute as kses keeps it (safecss_filter_attr): each\ndeclaration whose property is on the list stays, a value's url() only\non the properties that may hold one and only with a safe scheme, the\ngradients and CSS functions the reference allows, and nothing that could\nend the declaration. Plugins widen the list and the verdict through the\nhooks the facade wires in (safe_style_css, safecss_filter_attr_allow_css).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Blocks\\Layout",
                "Minn\\Support\\Kses",
                "Minn\\Support\\KsesAttributes"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CSS_PROPERTIES",
                    "value": "array (   0 => 'background',   1 => 'background-color',   2 => 'background-image',   3 => 'background-position',   4 => 'background-repeat',   5 => 'background-size',   6 => 'background-attachment',   7 => 'background-blend-mode',   8 => 'border',   9 => 'border-radius',   10 => 'border-width',   11 => 'border-color',   12 => 'border-style',   13 => 'border-right',   14 => 'border-right-color',   15 => 'border-right-style',   16 => 'border-right-width',   17 => 'border-bottom',   18 => 'border-bottom-color',   19 => 'border-bottom-left-radius',   20 => 'border-bottom-right-radius',   21 => 'border-bottom-style',   22 => 'border-bottom-width',   23 => 'border-bottom-right-radius',   24 => 'border-bottom-left-radius',   25 => 'border-left',   26 => 'border-left-color',   27 => 'border-left-style',   28 => 'border-left-width',   29 => 'border-top',   30 => 'border-top-color',   31 => 'border-top-left-radius',   32 => 'border-top-right-radius',   33 => 'border-top-style',   34 => 'border-top-width',   35 => 'border-top-left-radius',   36 => 'border-top-right-radius',   37 => 'border-spacing',   38 => 'border-collapse',   39 => 'caption-side',   40 => 'columns',   41 => 'column-count',   42 => 'column-fill',   43 => 'column-gap',   44 => 'column-rule',   45 => 'column-span',   46 => 'column-width',   47 => 'display',   48 => 'color',   49 => 'filter',   50 => 'font',   51 => 'font-family',   52 => 'font-size',   53 => 'font-style',   54 => 'font-variant',   55 => 'font-weight',   56 => 'letter-spacing',   57 => 'line-height',   58 => 'text-align',   59 => 'text-decoration',   60 => 'text-indent',   61 => 'text-transform',   62 => 'white-space',   63 => 'height',   64 => 'min-height',   65 => 'max-height',   66 => 'width',   67 => 'min-width',   68 => 'max-width',   69 => 'margin',   70 => 'margin-right',   71 => 'margin-bottom',   72 => 'margin-left',   73 => 'margin-top',   74 => 'margin-block-start',   75 => 'margin-block-end',   76 => 'margin-inline-start',   77 => 'margin-inline-end',   78 => 'padding',   79 => 'padding-right',   80 => 'padding-bottom',   81 => 'padding-left',   82 => 'padding-top',   83 => 'padding-block-start',   84 => 'padding-block-end',   85 => 'padding-inline-start',   86 => 'padding-inline-end',   87 => 'flex',   88 => 'flex-basis',   89 => 'flex-direction',   90 => 'flex-flow',   91 => 'flex-grow',   92 => 'flex-shrink',   93 => 'flex-wrap',   94 => 'gap',   95 => 'column-gap',   96 => 'row-gap',   97 => 'grid-template-columns',   98 => 'grid-auto-columns',   99 => 'grid-column-start',   100 => 'grid-column-end',   101 => 'grid-column',   102 => 'grid-column-gap',   103 => 'grid-template-rows',   104 => 'grid-auto-rows',   105 => 'grid-row-start',   106 => 'grid-row-end',   107 => 'grid-row',   108 => 'grid-row-gap',   109 => 'grid-gap',   110 => 'justify-content',   111 => 'justify-items',   112 => 'justify-self',   113 => 'align-content',   114 => 'align-items',   115 => 'align-self',   116 => 'clear',   117 => 'cursor',   118 => 'direction',   119 => 'float',   120 => 'list-style-type',   121 => 'object-fit',   122 => 'object-position',   123 => 'opacity',   124 => 'overflow',   125 => 'vertical-align',   126 => 'writing-mode',   127 => 'position',   128 => 'top',   129 => 'right',   130 => 'bottom',   131 => 'left',   132 => 'z-index',   133 => 'box-shadow',   134 => 'aspect-ratio',   135 => 'container-type',   136 => 'fill',   137 => 'fill-opacity',   138 => 'fill-rule',   139 => 'stroke',   140 => 'stroke-dasharray',   141 => 'stroke-dashoffset',   142 => 'stroke-linecap',   143 => 'stroke-linejoin',   144 => 'stroke-miterlimit',   145 => 'stroke-opacity',   146 => 'stroke-width',   147 => 'color-interpolation',   148 => 'color-interpolation-filters',   149 => 'paint-order',   150 => 'stop-color',   151 => 'stop-opacity',   152 => 'flood-color',   153 => 'flood-opacity',   154 => 'lighting-color',   155 => 'marker',   156 => 'marker-end',   157 => 'marker-mid',   158 => 'marker-start',   159 => 'clip-path',   160 => 'clip-rule',   161 => 'mask',   162 => 'mask-type',   163 => 'cx',   164 => 'cy',   165 => 'r',   166 => 'rx',   167 => 'ry',   168 => 'x',   169 => 'y',   170 => 'd',   171 => 'alignment-baseline',   172 => 'baseline-shift',   173 => 'dominant-baseline',   174 => 'glyph-orientation-horizontal',   175 => 'glyph-orientation-vertical',   176 => 'text-anchor',   177 => 'unicode-bidi',   178 => 'word-spacing',   179 => 'font-size-adjust',   180 => 'font-stretch',   181 => 'color-rendering',   182 => 'image-rendering',   183 => 'shape-rendering',   184 => 'text-rendering',   185 => 'vector-effect',   186 => 'transform',   187 => 'transform-origin',   188 => 'pointer-events',   189 => 'visibility',   190 => '--*', )",
                    "doc": "The properties style attributes keep, as the reference lists them before safe_style_css (probe safety-filters); --* stands for custom properties.",
                    "visibility": "private"
                },
                {
                    "name": "CSS_FUNCTIONS",
                    "value": "'/\\\\b(?:var|calc|min|max|minmax|clamp|repeat|rotate(?:X|Y|Z|3d)?|translate(?:X|Y|Z|3d)?|scale(?:X|Y|Z|3d)?|skew(?:X|Y)?|matrix(?:3d)?|perspective|inset|circle|ellipse|polygon|path)(\\\\((?:[^()]|(?1))*\\\\))/'",
                    "doc": "The CSS functions a value may use (transforms, shapes and the math ones), whatever they hold.",
                    "visibility": "private"
                },
                {
                    "name": "CSS_GRADIENTS",
                    "value": "'/\\\\b(?:repeating-)?(?:linear|radial|conic)-gradient(\\\\((?:[^()]|(?1))*\\\\))/'",
                    "doc": "The gradients a background may use.",
                    "visibility": "private"
                },
                {
                    "name": "CSS_URL_PROPERTIES",
                    "value": "array (   0 => 'background',   1 => 'background-image',   2 => 'cursor',   3 => 'filter',   4 => 'mask',   5 => 'clip-path', )",
                    "doc": "The properties that may use a url().",
                    "visibility": "private"
                },
                {
                    "name": "CSS_GRADIENT_PROPERTIES",
                    "value": "array (   0 => 'background',   1 => 'background-image', )",
                    "doc": "The properties that may use a gradient.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "styleHooks",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "style",
                    "static": true,
                    "visibility": "public",
                    "signature": "style(string $style): string",
                    "doc": "A style attribute's value with only the listed properties kept.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "style",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "styleHooks",
                    "static": true,
                    "visibility": "public",
                    "signature": "styleHooks(Closure $properties, Closure $allow): void",
                    "doc": "The runtime's say over style attributes: the property list\n(safe_style_css) and each declaration (safecss_filter_attr_allow_css).\nThe facade sets these as it loads.",
                    "shapes": [
                        "@param Closure(list<string>): list<string> $properties",
                        "@param Closure(bool, string): bool $allow"
                    ],
                    "params": [
                        {
                            "name": "properties",
                            "type": "Closure",
                            "shape": "Closure(list<string>): list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allow",
                            "type": "Closure",
                            "shape": "Closure(bool, string): bool",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 150,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "css",
                    "static": true,
                    "visibility": "private",
                    "signature": "css(string $style): string",
                    "doc": "The style attribute's declarations kept as written, as the reference\nkeeps them (probes kses, block-supports): a listed property, named\nexactly (the list through safe_style_css when the runtime hooks it;\n--* lets custom properties through), or a bare value; and nothing in\nthe value that could end the declaration or open a function (\\ ( & =\n} or a comment) once the functions it may use are taken out, with a\nbackground's gradients and the url()s of allowed schemes a background,\na cursor, a filter, a mask or a clip path may use. Each is asked\nthrough safecss_filter_attr_allow_css.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "style",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "cssTestString",
                    "static": true,
                    "visibility": "private",
                    "signature": "cssTestString(string $declaration, array $allowed): ?string",
                    "doc": "What of a declaration must hold no unsafe character: its value (or the\nbare value) without the functions it may use; null for a property not\nlisted, or a url() with a scheme not allowed (on a property that cannot\nuse one, its parenthesis fails the test).",
                    "shapes": [
                        "@param list<string> $allowed"
                    ],
                    "params": [
                        {
                            "name": "declaration",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowed",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 116,
                    "end": 140
                }
            ]
        },
        {
            "name": "Minn\\Support\\KsesEntities",
            "short": "KsesEntities",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/KsesEntities.php",
            "lines": 30,
            "doc": "The named references kses keeps as written: the list captured from the\nreference (data/kses.json) plus the five XML ones. Any other name is\nstored as \"&amp;name;\".",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Feed\\Tree",
                "Minn\\Support\\Escape",
                "Minn\\Support\\Kses",
                "Minn\\Support\\KsesPolicy"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "table",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "known",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "known",
                    "static": true,
                    "visibility": "public",
                    "signature": "known(string $name): bool",
                    "doc": "Whether \"&name;\" is a reference kses leaves alone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 22,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "allowlist",
                    "static": true,
                    "visibility": "public",
                    "signature": "allowlist(string $context): array",
                    "doc": "An allowlist the reference ships, by context (\"post\" or \"data\").",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "context",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "table",
                    "static": true,
                    "visibility": "private",
                    "signature": "table(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 39,
                    "end": 42
                }
            ]
        },
        {
            "name": "Minn\\Support\\KsesPolicy",
            "short": "KsesPolicy",
            "namespace": "Minn\\Support",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Support/KsesPolicy.php",
            "lines": 115,
            "doc": "What one kses pass allows: the tags, each tag's attributes (allowed\nplainly or with value rules), whether a tag takes data- attributes,\nwhich attributes hold URIs, and the schemes those URIs may use.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Kses",
                "Minn\\Support\\KsesEntities"
            ],
            "usedBy": [
                "Minn\\Support\\Kses",
                "Minn\\Support\\KsesAttributes"
            ],
            "constructor": {
                "signature": "__construct(array $tags, array $prefixes, array $uriAttributes, array $schemes)",
                "doc": "",
                "shapes": [
                    "@param array<string, array<string, mixed>> $tags tag => attribute => true, or a list of value rules",
                    "@param array<string, list<string>> $prefixes tag => attribute-name prefixes it accepts (only \"data-\")",
                    "@param list<string> $uriAttributes",
                    "@param list<string> $schemes"
                ],
                "params": [
                    {
                        "name": "tags",
                        "type": "array",
                        "shape": "array<string, array<string, mixed>>",
                        "default": null,
                        "doc": "tag => attribute => true, or a list of value rules"
                    },
                    {
                        "name": "prefixes",
                        "type": "array",
                        "shape": "array<string, list<string>>",
                        "default": null,
                        "doc": "tag => attribute-name prefixes it accepts (only \"data-\")"
                    },
                    {
                        "name": "uriAttributes",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "schemes",
                        "type": "array",
                        "shape": "list<string>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 20,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "tags",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "prefixes",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "uriAttributes",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "schemes",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "post",
                    "static": true,
                    "visibility": "public",
                    "signature": "post(): self",
                    "doc": "Post content from an author without unfiltered_html: the reference's post allowlist as captured.",
                    "shapes": [],
                    "params": [],
                    "line": 29,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "comment",
                    "static": true,
                    "visibility": "public",
                    "signature": "comment(): self",
                    "doc": "Comments, profiles and term descriptions: only the attributes each tag lists, nothing global.",
                    "shapes": [],
                    "params": [],
                    "line": 35,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "fromAllowlist",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromAllowlist(array $allowedHtml, array $schemes, array $uriAttributes): self",
                    "doc": "A caller's own allowlist taken literally: a listed attribute is allowed\nwhatever it maps to (false included, as the reference only asks whether\nthe name is there), an array carries value rules, and \"data-*\" lets the\ntag take any data- name. Nothing else is implied.",
                    "shapes": [
                        "@param array<array-key, mixed> $allowedHtml",
                        "@param list<string> $schemes",
                        "@param list<string> $uriAttributes"
                    ],
                    "params": [
                        {
                            "name": "allowedHtml",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "schemes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "uriAttributes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "allowsTag",
                    "static": false,
                    "visibility": "public",
                    "signature": "allowsTag(string $tag): bool",
                    "doc": "Whether the tag may appear at all.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "rules",
                    "static": false,
                    "visibility": "public",
                    "signature": "rules(string $tag, string $name): ?array",
                    "doc": "The rules an attribute carries on a tag: an empty list when it is\nallowed plainly, null when it is not allowed.",
                    "shapes": [
                        "@return array<array-key, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "required",
                    "static": false,
                    "visibility": "public",
                    "signature": "required(string $tag): array",
                    "doc": "The attributes a tag must keep: lose one and the tag keeps none.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "tag",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 110,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "holdsUri",
                    "static": false,
                    "visibility": "public",
                    "signature": "holdsUri(string $name): bool",
                    "doc": "Whether the attribute holds a URI whose scheme must be judged.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 125
                }
            ]
        },
        {
            "name": "Minn\\Support\\KsesValues",
            "short": "KsesValues",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/KsesValues.php",
            "lines": 38,
            "doc": "The value rules an allowlist attribute may carry, as the reference judges\nthem: lengths count bytes, bounds need a whole number (up to six digits,\nup to six spaces either side), \"valueless\" compares the attribute's form,\n\"values\" compares without case, and a callback decides for itself. A rule\nthe reference does not know passes. Where the reference fatals (a values\nrule that is not a list, a callback that does not exist) the value fails.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Support\\Kses",
                "Minn\\Support\\KsesAttributes"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "satisfies",
                    "static": true,
                    "visibility": "public",
                    "signature": "satisfies(string $value, string $valueless, array $rules): bool",
                    "doc": "Whether a value meets every rule its attribute carries; \"required\" is\nthe tag's concern, so it is skipped here.",
                    "shapes": [
                        "@param array<array-key, mixed> $rules"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "valueless",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rules",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "check",
                    "static": true,
                    "visibility": "public",
                    "signature": "check(string $value, string $valueless, string $rule, mixed $expected): bool",
                    "doc": "One rule against one value; $valueless is \"y\" for a bare attribute and \"n\" for one with a value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "valueless",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rule",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "expected",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "wholeNumber",
                    "static": true,
                    "visibility": "private",
                    "signature": "wholeNumber(string $value): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 51
                }
            ]
        },
        {
            "name": "Minn\\Support\\Lists",
            "short": "Lists",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Lists.php",
            "lines": 190,
            "doc": "List shaping behind the facade's array utilities: arguments over their\ndefaults (wp_parse_args), plucking and filtering (WP_List_Util), the multi-field sort\nwp_list_sort() promises (loose comparison per field, first difference\nwins) and the row-shape conversions wpdb hands back for its OBJECT_K /\nARRAY_A / ARRAY_N output formats.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Query\\CommentOrder",
                "Minn\\Rest\\InstalledThemesController",
                "Minn\\Rest\\MenusController",
                "Minn\\Rest\\RegisteredFields",
                "Minn\\Runtime\\CommentPages",
                "Minn\\Runtime\\CommentQueryWhere",
                "Minn\\Runtime\\NavMenuItems",
                "Minn\\Runtime\\Pages",
                "Minn\\Runtime\\TermOrder",
                "Minn\\Runtime\\TermQueryRunner",
                "Minn\\Runtime\\TermSave",
                "Minn\\Runtime\\UserOrder",
                "Minn\\Runtime\\UserQueryRunner",
                "Minn\\Theme\\HeadLinks"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "args",
                    "static": true,
                    "visibility": "public",
                    "signature": "args(mixed $args, mixed $defaults = array ( )): array",
                    "doc": "Arguments as WordPress takes them (wp_parse_args): an object's\nproperties, an array, or a query string, over the defaults.",
                    "shapes": [
                        "@param array<array-key, mixed> $defaults",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "defaults",
                            "type": "mixed",
                            "shape": "array<array-key, mixed>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "pluck",
                    "static": true,
                    "visibility": "public",
                    "signature": "pluck(array $items, string|int $field, string|int|null $indexKey = NULL): array",
                    "doc": "One field of each item (wp_list_pluck), keyed as the list was, or by\nanother field when one is named (items without it are appended);\nanything not an array or an object is passed over.",
                    "shapes": [
                        "@param array<array-key, mixed> $items",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "indexKey",
                            "type": "string|int|null",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "filter",
                    "static": true,
                    "visibility": "public",
                    "signature": "filter(array $items, array $fields, string $operator): array",
                    "doc": "The items matching all the fields given (AND), any of them (OR), or\nnone (NOT), compared loosely, keys kept; nothing for another operator.",
                    "shapes": [
                        "@param array<array-key, mixed> $items @param array<array-key, mixed> $fields",
                        "@return array<array-key, mixed>"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": "@param array<array-key, mixed> $fields"
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "operator",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "items",
                    "static": true,
                    "visibility": "public",
                    "signature": "items(mixed $input): array",
                    "doc": "A list as arguments give one (wp_parse_list): an array's entries\ntrimmed, the empty ones dropped (keys kept); a string split on commas\nand whitespace.",
                    "shapes": [
                        "@return array<int|string, string>"
                    ],
                    "params": [
                        {
                            "name": "input",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "ids",
                    "static": true,
                    "visibility": "public",
                    "signature": "ids(mixed $input): array",
                    "doc": "Ids as arguments give them (wp_parse_id_list): each a whole number made\npositive, each once, in first-seen order.",
                    "shapes": [
                        "@return list<int>"
                    ],
                    "params": [
                        {
                            "name": "input",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 114
                },
                {
                    "routes": [],
                    "name": "sort",
                    "static": true,
                    "visibility": "public",
                    "signature": "sort(array $items, array $orderby, bool $preserveKeys): array",
                    "doc": "Items sorted by several fields, each ascending or descending.",
                    "shapes": [
                        "@param array<int|string, mixed> $items",
                        "@param array<string, string> $orderby field => ASC|DESC",
                        "@return array<int|string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "array<int|string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "orderby",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "field => ASC|DESC"
                        },
                        {
                            "name": "preserveKeys",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 123,
                    "end": 143
                },
                {
                    "routes": [],
                    "name": "shapeRows",
                    "static": true,
                    "visibility": "public",
                    "signature": "shapeRows(array $rows, string $output): array",
                    "doc": "Rows of stdClass shaped for a wpdb output format: keyed by their first\ncolumn (first row wins a duplicate key), associative, or numeric.",
                    "shapes": [
                        "@param list<object> $rows",
                        "@return array<int|string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "output",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 152,
                    "end": 160
                },
                {
                    "routes": [],
                    "name": "descendants",
                    "static": true,
                    "visibility": "public",
                    "signature": "descendants(array $items, int $rootId, callable $id, callable $parent, array $visited = array ( )): array",
                    "doc": "Every descendant of one root in a flat parent-linked list, preorder\n(a child ahead of its own children), the shape _get_term_children and\nget_page_children walk. Visited ids guard against a parent cycle.",
                    "shapes": [
                        "@param list<mixed> $items",
                        "@param callable(mixed): int $id",
                        "@param callable(mixed): int $parent",
                        "@param list<int> $visited",
                        "@return list<mixed>"
                    ],
                    "params": [
                        {
                            "name": "items",
                            "type": "array",
                            "shape": "list<mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "rootId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "callable",
                            "shape": "callable(mixed): int",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "callable",
                            "shape": "callable(mixed): int",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "visited",
                            "type": "array",
                            "shape": "list<int>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 173,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "keyedByFirstColumn",
                    "static": true,
                    "visibility": "private",
                    "signature": "keyedByFirstColumn(array $rows): array",
                    "doc": "",
                    "shapes": [
                        "@param list<object> $rows",
                        "@return array<string, object>"
                    ],
                    "params": [
                        {
                            "name": "rows",
                            "type": "array",
                            "shape": "list<object>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 191,
                    "end": 202
                }
            ]
        },
        {
            "name": "Minn\\Support\\Locale",
            "short": "Locale",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Locale.php",
            "lines": 31,
            "doc": "The locale's calendar and number vocabulary as data: the names a site\nprints for weekdays, months and meridiems, and how it separates\nthousands and decimals.\n\nThe names are English here because the engine carries no core\ntranslations yet; the facade runs each one through the translation\nfilters on the way out, so a catalogue can answer for them later\nwithout this class changing.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\I18n\\LocalDates"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "WEEKDAYS",
                    "value": "array (   0 => 'Sunday',   1 => 'Monday',   2 => 'Tuesday',   3 => 'Wednesday',   4 => 'Thursday',   5 => 'Friday',   6 => 'Saturday', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "MONTHS",
                    "value": "array (   0 => 'January',   1 => 'February',   2 => 'March',   3 => 'April',   4 => 'May',   5 => 'June',   6 => 'July',   7 => 'August',   8 => 'September',   9 => 'October',   10 => 'November',   11 => 'December', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "MERIDIEM",
                    "value": "array (   'am' => 'am',   'pm' => 'pm',   'AM' => 'AM',   'PM' => 'PM', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "NUMBER_FORMAT",
                    "value": "array (   'thousands_sep' => ',',   'decimal_point' => '.', )",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "LIST_ITEM_SEPARATOR",
                    "value": "', '",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "WORD_COUNT_TYPE",
                    "value": "'words'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "TEXT_DIRECTION",
                    "value": "'ltr'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "weekdayInitial",
                    "static": true,
                    "visibility": "public",
                    "signature": "weekdayInitial(string $day): string",
                    "doc": "A weekday's one-letter form.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "day",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 31,
                    "end": 34
                },
                {
                    "routes": [],
                    "name": "abbreviation",
                    "static": true,
                    "visibility": "public",
                    "signature": "abbreviation(string $name): string",
                    "doc": "A weekday's or month's three-letter form; May is already three letters.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 40
                },
                {
                    "routes": [],
                    "name": "monthKey",
                    "static": true,
                    "visibility": "public",
                    "signature": "monthKey(string|int $month): string",
                    "doc": "Months are keyed by their zero-padded number, both ways round.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "month",
                            "type": "string|int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 43,
                    "end": 46
                }
            ]
        },
        {
            "name": "Minn\\Support\\Markers",
            "short": "Markers",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Markers.php",
            "lines": 59,
            "doc": "The BEGIN/END marker blocks insert_with_markers() maintains in files like\n.htaccess: the captured shape keeps everything outside the markers,\nreplaces the block inside them, and writes the reference's four-line\ndo-not-edit preamble ahead of the inserted lines.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "write",
                    "static": true,
                    "visibility": "public",
                    "signature": "write(string $file, string $marker, array $lines): bool",
                    "doc": "Replaces the lines between a marker's begin and end comments in a file.",
                    "shapes": [
                        "@param list<string> $lines"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "marker",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "lines",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $file, string $marker): array",
                    "doc": "The lines between a marker's begin and end comments, every block of it\nin order. A line opens or closes a block when it contains the comment\nanywhere (case-sensitive); lines that start with \"#\" are left out, so\nthe preamble and any nested markers are, while indented comments stay.\nLines split on \"\\n\" only, and a block left open at the end of the file\nkeeps the empty line after its final newline.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "marker",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 70
                }
            ]
        },
        {
            "name": "Minn\\Support\\Paths",
            "short": "Paths",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Paths.php",
            "lines": 75,
            "doc": "File-system path and permission spellings.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "translationDir",
                    "static": true,
                    "visibility": "public",
                    "signature": "translationDir(string $domain, string $locale, string $langDir, ?string $customPath, ?Closure $listed = NULL): string|false",
                    "doc": "The trailing-slashed directory holding a text domain's {domain}-{locale}.mo:\na custom path first, then the language dir's plugins and themes folders,\nthen the dir itself for the default domain; false when none has the file.\n$listed, when given, lists a folder's files (the textdomain registry's\nown lister, which plugins may answer for) and is read instead of the disk.",
                    "shapes": [
                        "@param (\\Closure(string): array<int, string>)|null $listed"
                    ],
                    "params": [
                        {
                            "name": "domain",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "locale",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "langDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "customPath",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "listed",
                            "type": "?Closure",
                            "shape": "(\\Closure(string): array<int, string>)|null",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "normalize",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalize(string $path): string",
                    "doc": "Forward slashes only, runs collapsed, a stream wrapper kept, a Windows drive letter upper-cased.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "path",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "symbolicMode",
                    "static": true,
                    "visibility": "public",
                    "signature": "symbolicMode(int $mode): string",
                    "doc": "The `ls -l` spelling of a mode: type letter, then rwx for owner, group and world with the setuid, setgid and sticky bits folded in.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "mode",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 81
                }
            ]
        },
        {
            "name": "Minn\\Support\\ScriptTag",
            "short": "ScriptTag",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/ScriptTag.php",
            "lines": 69,
            "doc": "Script elements as the reference builds them (probe script-tags): the\nattributes sorted by name, a src or href through esc_url and every other\nvalue escaped (true or null printed bare, false left out); inline code\nbetween newlines, with any \"<script\" or \"</script\" that would end or\nopen an element written with its \"s\" as a \\u escape. Only JavaScript and\nJSON can carry that escape: a script of another type whose code holds\nsuch a sequence is not printed at all.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "ESCAPABLE",
                    "value": "array (   0 => '',   1 => 'module',   2 => 'application/json',   3 => 'importmap',   4 => 'speculationrules',   5 => 'application/ecmascript',   6 => 'application/javascript',   7 => 'application/x-ecmascript',   8 => 'application/x-javascript',   9 => 'text/ecmascript',   10 => 'text/javascript',   11 => 'text/javascript1.0',   12 => 'text/javascript1.1',   13 => 'text/javascript1.2',   14 => 'text/javascript1.3',   15 => 'text/javascript1.4',   16 => 'text/javascript1.5',   17 => 'text/jscript',   18 => 'text/livescript',   19 => 'text/x-ecmascript',   20 => 'text/x-javascript', )",
                    "doc": "The script types inline code is JavaScript or JSON in (lowercase, trimmed; no type at all counts as JavaScript).",
                    "visibility": "private"
                },
                {
                    "name": "TAG",
                    "value": "'#<(/?)(s)(cript[\\\\t\\\\n\\\\f\\\\r />])#i'",
                    "doc": "A sequence that would open or close a script element inside one.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "element",
                    "static": true,
                    "visibility": "public",
                    "signature": "element(array $attributes): string",
                    "doc": "The empty element for a script file.",
                    "shapes": [
                        "@param array<string, mixed> $attributes"
                    ],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "inline",
                    "static": true,
                    "visibility": "public",
                    "signature": "inline(string $code, array $attributes): string",
                    "doc": "The element for inline code (already between its newlines), or '' when\nits type cannot hold the code safely.",
                    "shapes": [
                        "@param array<string, mixed> $attributes"
                    ],
                    "params": [
                        {
                            "name": "code",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "attributes",
                    "static": true,
                    "visibility": "private",
                    "signature": "attributes(array $attributes): string",
                    "doc": "The attributes as markup, each with its leading space.",
                    "shapes": [
                        "@param array<string, mixed> $attributes"
                    ],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 83
                }
            ]
        },
        {
            "name": "Minn\\Support\\SearchReplace",
            "short": "SearchReplace",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/SearchReplace.php",
            "lines": 38,
            "doc": "String replace that walks serialized-PHP arrays of scalars without\nunserialize, so a domain change in an option blob keeps its lengths.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Serialized"
            ],
            "usedBy": [
                "Minn\\Cli\\SearchReplaceCommand"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "in",
                    "static": true,
                    "visibility": "public",
                    "signature": "in(string $value, string $old, string $new): array",
                    "doc": "A value with one string replaced, and how many times.",
                    "shapes": [
                        "@return array{0: string, 1: int} replacement and how many times $old occurred"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "old",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "new",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 18,
                    "end": 31
                },
                {
                    "routes": [],
                    "name": "walk",
                    "static": true,
                    "visibility": "private",
                    "signature": "walk(mixed $value, string $old, string $new, int $count): mixed",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "old",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "new",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "count",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 33,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Support\\Serialized",
            "short": "Serialized",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Serialized.php",
            "lines": 356,
            "doc": "Tolerant readers for the serialized-PHP blobs WordPress stores. Nothing\nhere executes the blob; each reader scans for the one shape it needs.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Admin\\App",
                "Minn\\Admin\\Appearance",
                "Minn\\Admin\\Dashboard",
                "Minn\\Admin\\HiddenIntegrations",
                "Minn\\Admin\\Notifications",
                "Minn\\Admin\\OverviewController",
                "Minn\\Admin\\SiteController",
                "Minn\\Admin\\UploadsSize",
                "Minn\\Auth\\ApplicationPasswords",
                "Minn\\Auth\\Capabilities",
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks",
                "Minn\\Cli\\OptionCommand",
                "Minn\\Cli\\Preflight",
                "Minn\\Content\\Inventory",
                "Minn\\Content\\Menus",
                "Minn\\Content\\PluginState",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Terms",
                "Minn\\Extension\\Loader",
                "Minn\\Mail\\MailSettings",
                "Minn\\Ops\\Updates",
                "Minn\\Rest\\MediaObject",
                "Minn\\Rest\\PluginsController",
                "Minn\\Rest\\PostObject",
                "Minn\\Runtime\\CronTable",
                "Minn\\Runtime\\Options",
                "Minn\\Runtime\\Recovery",
                "Minn\\Support\\SearchReplace"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "INVALID",
                    "value": "'' . \"\\0\" . 'minn:invalid' . \"\\0\" . ''",
                    "doc": "Returned by decode() when the blob is not a serialized value the reader accepts.",
                    "visibility": "public"
                },
                {
                    "name": "MAX_DEPTH",
                    "value": "4096",
                    "doc": "The deepest nesting a record may have, PHP's own default (unserialize_max_depth).",
                    "visibility": "private"
                },
                {
                    "name": "SMALLEST_PAIR",
                    "value": "6",
                    "doc": "The fewest bytes an array or object member can take: a key \"i:0;\" and a value \"N;\".",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "records",
                    "type": "?WeakMap",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "open",
                    "type": "?SplObjectStorage",
                    "readonly": false,
                    "static": true,
                    "doc": "The objects being encoded right now, outermost first, so a loop is seen.",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "depth",
                    "type": "int",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "stringList",
                    "static": true,
                    "visibility": "public",
                    "signature": "stringList(?string $blob): array",
                    "doc": "The string values of a serialized string list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "serializeStringList",
                    "static": true,
                    "visibility": "public",
                    "signature": "serializeStringList(array $values): string",
                    "doc": "A flat string list in the stored form.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "values",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 37
                },
                {
                    "routes": [],
                    "name": "field",
                    "static": true,
                    "visibility": "public",
                    "signature": "field(?string $blob, string $field): ?string",
                    "doc": "The first \"field\";value pair inside a blob: string, int, or float value as a string.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 40,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "public",
                    "signature": "decode(string $blob, ?Closure $revive = NULL): mixed",
                    "doc": "A serialized scalar or array as PHP data, parsed by this reader:\nstrings, integers, floats, booleans, null, and arrays of those. An\nobject record becomes a stdClass of its properties, or whatever the\nreviver makes of the class name and those properties; nothing here\ninstantiates anything itself. A blob with trailing bytes or a\nmalformed shape is INVALID.",
                    "shapes": [
                        "@param ?\\Closure(string, \\stdClass): object $revive"
                    ],
                    "params": [
                        {
                            "name": "blob",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "revive",
                            "type": "?Closure",
                            "shape": "?\\Closure(string, \\stdClass): object",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 83
                },
                {
                    "routes": [],
                    "name": "storedClass",
                    "static": true,
                    "visibility": "public",
                    "signature": "storedClass(object $object): ?string",
                    "doc": "The class an object was stored as, when it came back as a stdClass of its properties.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "object",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 198
                },
                {
                    "routes": [],
                    "name": "looksSerialized",
                    "static": true,
                    "visibility": "public",
                    "signature": "looksSerialized(string $data): bool",
                    "doc": "Whether a string has the shape of serialized data, as is_serialized()\njudges it: what maybe_serialize() stores serialized again so it reads\nback as the string it was.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 260,
                    "end": 264
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "public",
                    "signature": "encode(mixed $value): string",
                    "doc": "PHP's serialize() for the values decode() accepts: null, bool, int,\nfloat, string, arrays of those, and objects written as their class.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 281,
                    "end": 297
                },
                {
                    "routes": [],
                    "name": "intList",
                    "static": true,
                    "visibility": "public",
                    "signature": "intList(?string $blob): array",
                    "doc": "The integer values of a serialized list such as sticky_posts.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 359,
                    "end": 365
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "private",
                    "signature": "read(string $blob, int $offset, ?Closure $revive): mixed",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "revive",
                            "type": "?Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "readValue",
                    "static": true,
                    "visibility": "private",
                    "signature": "readValue(string $blob, int $offset, ?Closure $revive): mixed",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "revive",
                            "type": "?Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "readObject",
                    "static": true,
                    "visibility": "private",
                    "signature": "readObject(string $blob, int $offset, ?Closure $revive): object",
                    "doc": "An object record. The properties land on a plain stdClass; only the\nreviver may turn that into something else, and only for a class it\nknows. A record it leaves alone keeps its class name and its stored\nproperty names (visibility markers, numbered parts, a private name a\nparent class shares) on the side, so encode() writes it back as it\nwas read instead of as a stdClass.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "revive",
                            "type": "?Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "encodeRecord",
                    "static": true,
                    "visibility": "private",
                    "signature": "encodeRecord(object $object, array $record): string",
                    "doc": "A stdClass, or a record read back as one, in PHP's own form: the\nstored class name and property names where there are some, property\nnames as strings otherwise, each value through encode() so a record\nnested inside keeps its class too.",
                    "shapes": [
                        "@param array{class: string, keys: array<string, int|string>, hidden: list<array{0: int|string, 1: mixed}>} $record"
                    ],
                    "params": [
                        {
                            "name": "object",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "record",
                            "type": "array",
                            "shape": "array{class: string, keys: array<string, int|string>, hidden: list<array{0: int|string, 1: mixed}>}",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 208,
                    "end": 222
                },
                {
                    "routes": [],
                    "name": "encodeWrapper",
                    "static": true,
                    "visibility": "private",
                    "signature": "encodeWrapper(ArrayObject|ArrayIterator $wrapper): string",
                    "doc": "PHP's array wrappers in their own form (flags, storage, members, iterator class), the storage through encode().",
                    "shapes": [],
                    "params": [
                        {
                            "name": "wrapper",
                            "type": "ArrayObject|ArrayIterator",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 225,
                    "end": 230
                },
                {
                    "routes": [],
                    "name": "expect",
                    "static": true,
                    "visibility": "private",
                    "signature": "expect(string $blob, int $offset, string $char): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "char",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 232,
                    "end": 238
                },
                {
                    "routes": [],
                    "name": "size",
                    "static": true,
                    "visibility": "private",
                    "signature": "size(string $blob, int $offset, string $char, int $perItem): int",
                    "doc": "A length or a count: digits only, and never more than the bytes left\ncould hold, $perItem bytes each. A negative length would move the\nreader backwards and a huge count would keep it reading, so either\nmakes the record no record at all, as PHP's own reader finds it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "char",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perItem",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 246,
                    "end": 253
                },
                {
                    "routes": [],
                    "name": "until",
                    "static": true,
                    "visibility": "private",
                    "signature": "until(string $blob, int $offset, string $char): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "blob",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "char",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 266,
                    "end": 275
                },
                {
                    "routes": [],
                    "name": "encodeValue",
                    "static": true,
                    "visibility": "private",
                    "signature": "encodeValue(mixed $value): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 299,
                    "end": 329
                },
                {
                    "routes": [],
                    "name": "encodeObject",
                    "static": true,
                    "visibility": "private",
                    "signature": "encodeObject(object $value): string",
                    "doc": "Plugin code stores objects (maybe_serialize's contract). A record read\nback as a stdClass is written under the class it was stored as; a\nstdClass and PHP's array wrappers are written here so a record inside\nthem keeps its class too; any other object goes through PHP's own\nserializer, which runs nothing and matches the reference byte for\nbyte. Only reading is the hazard, and reads stay on decode().",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "object",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 339,
                    "end": 356
                }
            ]
        },
        {
            "name": "Minn\\Support\\Slashes",
            "short": "Slashes",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Slashes.php",
            "lines": 32,
            "doc": "Magic-quote slashes the way WordPress keeps them (wp_slash, wp_unslash):\nadded to or stripped from every string inside a value, arrays and\nobjects walked all the way down, anything else left as it is.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\MediaController",
                "Minn\\Rest\\RestMeta",
                "Minn\\Runtime\\ApplicationPasswordEvents",
                "Minn\\Runtime\\CommentEvents",
                "Minn\\Runtime\\CommentForm",
                "Minn\\Runtime\\PostRevisions",
                "Minn\\Runtime\\PostSave",
                "Minn\\Runtime\\TermEvents",
                "Minn\\Runtime\\TermSave"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "add",
                    "static": true,
                    "visibility": "public",
                    "signature": "add(mixed $value): mixed",
                    "doc": "Every string in a value with its quotes and backslashes slashed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 15,
                    "end": 18
                },
                {
                    "routes": [],
                    "name": "strip",
                    "static": true,
                    "visibility": "public",
                    "signature": "strip(mixed $value): mixed",
                    "doc": "Every string in a value with one level of slashes taken off.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 24
                },
                {
                    "routes": [],
                    "name": "deep",
                    "static": true,
                    "visibility": "private",
                    "signature": "deep(mixed $value, Closure $change): mixed",
                    "doc": "",
                    "shapes": [
                        "@param \\Closure(string): string $change"
                    ],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "change",
                            "type": "Closure",
                            "shape": "\\Closure(string): string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 42
                }
            ]
        },
        {
            "name": "Minn\\Support\\SqlTable",
            "short": "SqlTable",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/SqlTable.php",
            "lines": 63,
            "doc": "The table a SQL statement is about, as wpdb::get_table_from_query reports\nit, and a database host string read into its parts (probe wpdb). A name is\nletters, digits, $ _ . - and backticks (dropped), plus two-byte UTF-8.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "NAME",
                    "value": "'((?:[0-9a-zA-Z$_.`-]|[\\\\xC2-\\\\xDF][\\\\x80-\\\\xBF])+)'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "LEADS",
                    "value": "array (   0 => 'EXPLAIN(?:\\\\s+EXTENDED)?\\\\s+SELECT.*?\\\\s+FROM',   1 => 'SELECT.*?\\\\s+FROM',   2 => 'INSERT(?:\\\\s+(?:LOW_PRIORITY|DELAYED|HIGH_PRIORITY))?(?:\\\\s+IGNORE)?(?:\\\\s+INTO)?',   3 => 'REPLACE(?:\\\\s+(?:LOW_PRIORITY|DELAYED))?(?:\\\\s+INTO)?',   4 => 'UPDATE(?:\\\\s+LOW_PRIORITY)?(?:\\\\s+IGNORE)?',   5 => 'DELETE(?:\\\\s+(?:LOW_PRIORITY|QUICK|IGNORE))*(?:.+?FROM)?',   6 => '(?:DESCRIBE|DESC|EXPLAIN)',   7 => 'SHOW(?:\\\\s+FULL)?\\\\s+(?:COLUMNS|FIELDS|INDEX|INDEXES)\\\\s+FROM',   8 => 'SHOW\\\\s+CREATE\\\\s+TABLE',   9 => 'CREATE(?:\\\\s+TEMPORARY)?\\\\s+TABLE(?:\\\\s+IF\\\\s+NOT\\\\s+EXISTS)?',   10 => 'DROP\\\\s+TABLE(?:\\\\s+IF\\\\s+EXISTS)?',   11 => '(?:ALTER|TRUNCATE|OPTIMIZE|REPAIR|CHECK|ANALYZE|RENAME)(?:\\\\s+TABLE)?',   12 => 'LOCK\\\\s+TABLES?',   13 => 'LOAD\\\\s+DATA.*?INTO\\\\s+TABLE', )",
                    "doc": "What leads to the table name in each statement the reference reads, tried in order.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(string $query): ?string",
                    "doc": "The table a statement names (backticks dropped), or null when it names none the reference recognises.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 51
                },
                {
                    "routes": [],
                    "name": "host",
                    "static": true,
                    "visibility": "public",
                    "signature": "host(string $host): ?array",
                    "doc": "A DB_HOST read as host, port, socket and whether the host is IPv6: a\nsocket after \":/\", an IPv6 address in brackets (more than one colon),\na port only when it is digits. Null when nothing parses.",
                    "shapes": [
                        "@return array{0: string, 1: ?int, 2: ?string, 3: bool}|null"
                    ],
                    "params": [
                        {
                            "name": "host",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 73
                }
            ]
        },
        {
            "name": "Minn\\Support\\Time",
            "short": "Time",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Time.php",
            "lines": 21,
            "doc": "Human-scale spans: a number of seconds as the largest whole unit it fills, rounded, never below one.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "UNITS",
                    "value": "array (   0 =>    array (     0 => 'second',     1 => 1,   ),   1 =>    array (     0 => 'minute',     1 => 60,   ),   2 =>    array (     0 => 'hour',     1 => 3600,   ),   3 =>    array (     0 => 'day',     1 => 86400,   ),   4 =>    array (     0 => 'week',     1 => 604800,   ),   5 =>    array (     0 => 'month',     1 => 2592000,   ),   6 =>    array (     0 => 'year',     1 => 31536000,   ), )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "span",
                    "static": true,
                    "visibility": "public",
                    "signature": "span(int $seconds): array",
                    "doc": "A number of seconds as its largest whole unit and count.",
                    "shapes": [
                        "@return array{0: int, 1: string} count and unit name"
                    ],
                    "params": [
                        {
                            "name": "seconds",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 27
                }
            ]
        },
        {
            "name": "Minn\\Support\\TimezoneChoice",
            "short": "TimezoneChoice",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/TimezoneChoice.php",
            "lines": 109,
            "doc": "The timezone choices a settings form offers (wp_timezone_choice, probe\nplaceholder-helpers): the zones of each continent, cities in natural\norder (a zone with three parts reads \"City - Sub-city\"), then UTC, then\nthe offsets set by hand. \"Select a city\" leads when nothing is chosen, and\na real zone outside the list (an old name, Etc/) leads when it is the one\nchosen. Each choice is a line of its own.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CONTINENTS",
                    "value": "array (   0 => 'Africa',   1 => 'America',   2 => 'Antarctica',   3 => 'Arctic',   4 => 'Asia',   5 => 'Atlantic',   6 => 'Australia',   7 => 'Europe',   8 => 'Indian',   9 => 'Pacific', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "html",
                    "static": true,
                    "visibility": "public",
                    "signature": "html(string $selected, Closure $translate): string",
                    "doc": "The choices as option lines, the chosen zone marked.",
                    "shapes": [
                        "@param \\Closure(string, string): string $translate a text in a text domain, translated"
                    ],
                    "params": [
                        {
                            "name": "selected",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "translate",
                            "type": "Closure",
                            "shape": "\\Closure(string, string): string",
                            "default": null,
                            "doc": "a text in a text domain, translated"
                        }
                    ],
                    "line": 25,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "zones",
                    "static": true,
                    "visibility": "private",
                    "signature": "zones(Closure $translate): array",
                    "doc": "The continents' zones in order: continent, city, then sub-city, each\ncompared naturally and without case.",
                    "shapes": [
                        "@return list<array{value: string, continent: string, city: string, sub: string, label: string}>"
                    ],
                    "params": [
                        {
                            "name": "translate",
                            "type": "Closure",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "groups",
                    "static": true,
                    "visibility": "private",
                    "signature": "groups(array $zones): array",
                    "doc": "",
                    "shapes": [
                        "@param list<array{value: string, continent: string, city: string, sub: string, label: string}> $zones",
                        "@return array<string, list<array{value: string, continent: string, city: string, sub: string, label: string}>>"
                    ],
                    "params": [
                        {
                            "name": "zones",
                            "type": "array",
                            "shape": "list<array{value: string, continent: string, city: string, sub: string, label: string}>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "outsideList",
                    "static": true,
                    "visibility": "private",
                    "signature": "outsideList(string $selected, array $listed): bool",
                    "doc": "Whether a chosen zone is a real one the list leaves out (not UTC, not an offset). @param list<string> $listed",
                    "shapes": [
                        "@param list<string> $listed"
                    ],
                    "params": [
                        {
                            "name": "selected",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "listed",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 88,
                    "end": 92
                },
                {
                    "routes": [],
                    "name": "offset",
                    "static": true,
                    "visibility": "private",
                    "signature": "offset(int|float $offset): array",
                    "doc": "An offset's value (UTC+5.75) and label (UTC+5:45). @return array{0: string, 1: string}",
                    "shapes": [
                        "@return array{0: string, 1: string}"
                    ],
                    "params": [
                        {
                            "name": "offset",
                            "type": "int|float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "offsets",
                    "static": true,
                    "visibility": "private",
                    "signature": "offsets(): array",
                    "doc": "The offsets offered by hand, in hours, lowest first: every half hour from -12 to +12, the\nthree-quarter hours some zones keep, and the hours past +12 up to +14.",
                    "shapes": [
                        "@return list<float|int>"
                    ],
                    "params": [],
                    "line": 111,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "option",
                    "static": true,
                    "visibility": "private",
                    "signature": "option(string $value, string $label, string $chosen): string",
                    "doc": "One choice, marked when it is the chosen zone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "chosen",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 122
                }
            ]
        },
        {
            "name": "Minn\\Support\\Url",
            "short": "Url",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Url.php",
            "lines": 231,
            "doc": "URL shaping the escaping and query helpers share: the character cleanup\nesc_url applies, bracket encoding outside the authority, and query\nargument merging. Behaviour pinned by contracts/fixtures/api/functions.json.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Front\\FeedTags",
                "Minn\\Front\\PostEmbed",
                "Minn\\Runtime\\ArchiveLinks",
                "Minn\\Runtime\\CommentPages",
                "Minn\\Runtime\\MenuItemMarks",
                "Minn\\Runtime\\PostLinks",
                "Minn\\Runtime\\Upgrade"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "withTrailingSlash",
                    "static": true,
                    "visibility": "public",
                    "signature": "withTrailingSlash(string $value): string",
                    "doc": "The value with one trailing slash, whatever slashes or backslashes it ended in (trailingslashit).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 17,
                    "end": 20
                },
                {
                    "routes": [],
                    "name": "withoutTrailingSlash",
                    "static": true,
                    "visibility": "public",
                    "signature": "withoutTrailingSlash(string $value): string",
                    "doc": "The value with every trailing slash and backslash taken off (untrailingslashit).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 26
                },
                {
                    "routes": [],
                    "name": "clean",
                    "static": true,
                    "visibility": "public",
                    "signature": "clean(string $url, string $scheme = 'http'): string",
                    "doc": "Spaces encoded, stray characters dropped, \";//\" healed, a bare host given http; '' when nothing survives.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": "'http'",
                            "doc": ""
                        }
                    ],
                    "line": 29,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "encodeBrackets",
                    "static": true,
                    "visibility": "public",
                    "signature": "encodeBrackets(string $url, array $parsed): string",
                    "doc": "Square brackets after the authority are percent-encoded; the authority itself is left alone. @param array<string, mixed> $parsed",
                    "shapes": [
                        "@param array<string, mixed> $parsed"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parsed",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "withQuery",
                    "static": true,
                    "visibility": "public",
                    "signature": "withQuery(string $uri, array $new, Closure $encode, Closure $build): string",
                    "doc": "The URI with query arguments merged in (false removes one), the\nfragment kept, a bare query string treated as such; a URI that is\nonly a query (or nothing) keeps its leading question mark.",
                    "shapes": [
                        "@param array<string, mixed> $new",
                        "@param Closure(array): array $encode encodes the existing arguments the way the reference does",
                        "@param Closure(array): string $build builds the query string"
                    ],
                    "params": [
                        {
                            "name": "uri",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "new",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "encode",
                            "type": "Closure",
                            "shape": "Closure(array): array",
                            "default": null,
                            "doc": "encodes the existing arguments the way the reference does"
                        },
                        {
                            "name": "build",
                            "type": "Closure",
                            "shape": "Closure(array): string",
                            "default": null,
                            "doc": "builds the query string"
                        }
                    ],
                    "line": 74,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "validateForHttp",
                    "static": true,
                    "visibility": "public",
                    "signature": "validateForHttp(string $url, string $homeHost, int $homePort, Closure $externalAllowed, ?Closure $safePorts = NULL): ?string",
                    "doc": "The checks wp_http_validate_url makes on a URL whose protocol already\npassed: an http(s) scheme, a host without credentials or a colon, no\nprivate address unless it is this site or allowed, only the safe\nports (80, 443 and 8080 unless the caller's list says otherwise; the\nsite's own always). Returns the URL, or null when refused.",
                    "shapes": [
                        "@param Closure(string, string): bool $externalAllowed whether a private host may be fetched anyway",
                        "@param (Closure(list<int>, string, string): array)|null $safePorts the port list for a URL that names a port"
                    ],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "homeHost",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "homePort",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "externalAllowed",
                            "type": "Closure",
                            "shape": "Closure(string, string): bool",
                            "default": null,
                            "doc": "whether a private host may be fetched anyway"
                        },
                        {
                            "name": "safePorts",
                            "type": "?Closure",
                            "shape": "(Closure(list<int>, string, string): array)|null",
                            "default": "NULL",
                            "doc": "the port list for a URL that names a port"
                        }
                    ],
                    "line": 115,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "buildQuery",
                    "static": true,
                    "visibility": "public",
                    "signature": "buildQuery(array $data, string $prefix = ''): string",
                    "doc": "A query string in the reference's spelling (probe query-args): keys and values as given, nested keys as `a%5Bb%5D`, null left out, booleans as 0/1.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "data",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 177
                },
                {
                    "routes": [],
                    "name": "parse",
                    "static": true,
                    "visibility": "public",
                    "signature": "parse(string $url, int $component = -1): array|string|int|false|null",
                    "doc": "parse_url that also accepts scheme-relative and path-only URLs; a single component by its PHP_URL_* constant.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "component",
                            "type": "int",
                            "shape": "",
                            "default": "-1",
                            "doc": ""
                        }
                    ],
                    "line": 180,
                    "end": 204
                },
                {
                    "routes": [],
                    "name": "withScheme",
                    "static": true,
                    "visibility": "public",
                    "signature": "withScheme(string $url, string $scheme): string",
                    "doc": "The URL under a scheme, or scheme-and-host stripped for 'relative'; a protocol-relative URL is read as http first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "url",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scheme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 207,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "safeRedirect",
                    "static": true,
                    "visibility": "public",
                    "signature": "safeRedirect(string $location, Closure $allowedHosts): ?string",
                    "doc": "A redirect target the site may send a browser to: http(s) only and a\nhost the caller allows (local paths always pass). Credentials before\nthe host are kept, as the reference keeps them: the host decides.",
                    "shapes": [
                        "@param Closure(string): list<string> $allowedHosts the hosts allowed for the target's host"
                    ],
                    "params": [
                        {
                            "name": "location",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "allowedHosts",
                            "type": "Closure",
                            "shape": "Closure(string): list<string>",
                            "default": null,
                            "doc": "the hosts allowed for the target's host"
                        }
                    ],
                    "line": 227,
                    "end": 243
                },
                {
                    "routes": [],
                    "name": "isPrivate",
                    "static": true,
                    "visibility": "private",
                    "signature": "isPrivate(array $p): bool",
                    "doc": "Whether an IPv4 address is one a request must not reach: anything\noutside the global range (private, loopback, link-local, shared\nCGNAT space with the clouds' metadata hosts, benchmarking,\ndocumentation, reserved), the old 6to4 relays and multicast, as the\nreference refuses them.",
                    "shapes": [
                        "@param list<int> $p"
                    ],
                    "params": [
                        {
                            "name": "p",
                            "type": "array",
                            "shape": "list<int>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 162
                }
            ]
        },
        {
            "name": "Minn\\Support\\Utf8",
            "short": "Utf8",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/Utf8.php",
            "lines": 154,
            "doc": "UTF-8 as the reference reads it. Well-formed means no overlong forms,\nsurrogates, code points past U+10FFFF, stray continuation bytes or\ntruncated sequences; noncharacters, NUL and a byte order mark pass. Split\ninto characters (the multibyte fallbacks in compat.php), a malformed byte\nis one character and so is the longest start of a sequence that breaks\noff, so \"\\xE2\\x82\" counts once.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Support\\Kses"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CHARACTER",
                    "value": "'[\\\\x00-\\\\x7F]|[\\\\xC2-\\\\xDF][\\\\x80-\\\\xBF]|\\\\xE0[\\\\xA0-\\\\xBF][\\\\x80-\\\\xBF]|[\\\\xE1-\\\\xEC\\\\xEE\\\\xEF][\\\\x80-\\\\xBF]{2}|\\\\xED[\\\\x80-\\\\x9F][\\\\x80-\\\\xBF]|\\\\xF0[\\\\x90-\\\\xBF][\\\\x80-\\\\xBF]{2}|[\\\\xF1-\\\\xF3][\\\\x80-\\\\xBF]{3}|\\\\xF4[\\\\x80-\\\\x8F][\\\\x80-\\\\xBF]{2}'",
                    "doc": "One well-formed character.",
                    "visibility": "private"
                },
                {
                    "name": "BROKEN",
                    "value": "'\\\\xE0[\\\\xA0-\\\\xBF]|[\\\\xE1-\\\\xEC\\\\xEE\\\\xEF][\\\\x80-\\\\xBF]|\\\\xED[\\\\x80-\\\\x9F]|\\\\xF0[\\\\x90-\\\\xBF][\\\\x80-\\\\xBF]?|[\\\\xF1-\\\\xF3][\\\\x80-\\\\xBF]{1,2}|\\\\xF4[\\\\x80-\\\\x8F][\\\\x80-\\\\xBF]?'",
                    "doc": "The start of a sequence that breaks off.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "isValid",
                    "static": true,
                    "visibility": "public",
                    "signature": "isValid(string $bytes): bool",
                    "doc": "True for well-formed UTF-8, including the empty string.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 24,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "characters",
                    "static": true,
                    "visibility": "public",
                    "signature": "characters(string $bytes): array",
                    "doc": "The bytes cut into characters, a malformed byte or a broken-off\nsequence counting as one.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "scan",
                    "static": true,
                    "visibility": "public",
                    "signature": "scan(string $bytes, int $at, ?int $maxBytes = NULL, ?int $maxCodePoints = NULL): array",
                    "doc": "Reads well-formed characters from $at, as the reference's scanner does\n(probe utf8). It stops $maxBytes past $at (a character begun before\nthat is read whole), after $maxCodePoints, or at a malformed byte. The\nanswer: the characters read, where it stopped, the length of the\nmalformed run there (a broken-off start of a sequence, else one byte,\ncut at the byte limit; 0 when there is none), and whether a character\nthat could be a noncharacter was one (null when none could be: only\nEF and four-byte sequences hold them).",
                    "shapes": [
                        "@return array{int, int, int, ?bool}"
                    ],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxBytes",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        },
                        {
                            "name": "maxCodePoints",
                            "type": "?int",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "isNoncharacter",
                    "static": true,
                    "visibility": "public",
                    "signature": "isNoncharacter(int $code): bool",
                    "doc": "Whether a code point is a noncharacter: U+FDD0 to U+FDEF, or the last two of any plane.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "hasNoncharacters",
                    "static": true,
                    "visibility": "public",
                    "signature": "hasNoncharacters(string $bytes): bool",
                    "doc": "Whether any well-formed character is a noncharacter, malformed bytes stepped over.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "scrub",
                    "static": true,
                    "visibility": "public",
                    "signature": "scrub(string $bytes): string",
                    "doc": "The bytes with each malformed run (as characters() cuts them) replaced by U+FFFD.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "span",
                    "static": true,
                    "visibility": "public",
                    "signature": "span(string $bytes, int $offset, int $maxCodePoints): array",
                    "doc": "How many bytes from $offset the first $maxCodePoints characters take,\nand how many there were.",
                    "shapes": [
                        "@return array{int, int}"
                    ],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "offset",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxCodePoints",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "toLatin1",
                    "static": true,
                    "visibility": "public",
                    "signature": "toLatin1(string $bytes): string",
                    "doc": "UTF-8 as ISO-8859-1: a character past U+00FF, or a malformed run, becomes \"?\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "keptBy",
                    "static": true,
                    "visibility": "public",
                    "signature": "keptBy(string $bytes, string $charset): string",
                    "doc": "What a column in this charset keeps: utf8mb4 drops each malformed run, utf8 (utf8mb3) every four-byte character too; any other charset keeps the bytes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "charset",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 129,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "fromLatin1",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromLatin1(string $bytes): string",
                    "doc": "ISO-8859-1 as UTF-8: each byte the character of its value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 138,
                    "end": 141
                },
                {
                    "routes": [],
                    "name": "fromCodePoint",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromCodePoint(int $code): ?string",
                    "doc": "The UTF-8 bytes for a code point, or null for a negative one, a surrogate, or one past U+10FFFF.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "code",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 144,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "firstCodePoint",
                    "static": true,
                    "visibility": "public",
                    "signature": "firstCodePoint(string $bytes): ?int",
                    "doc": "The code point of the first character, or null when the bytes do not start with a whole, well-formed one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "bytes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 167
                }
            ]
        },
        {
            "name": "Minn\\Support\\WebServer",
            "short": "WebServer",
            "namespace": "Minn\\Support",
            "kind": "final class",
            "file": "public/minn/src/Minn/Support/WebServer.php",
            "lines": 8,
            "doc": "What the SERVER_SOFTWARE string says about the web server in front of the site.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "isApache",
                    "static": true,
                    "visibility": "public",
                    "signature": "isApache(string $software): bool",
                    "doc": "Whether the server speaks Apache's module and .htaccess conventions: Apache itself, or LiteSpeed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "software",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 11,
                    "end": 14
                }
            ]
        },
        {
            "name": "Minn\\Theme\\ArchiveTitle",
            "short": "ArchiveTitle",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/ArchiveTitle.php",
            "lines": 55,
            "doc": "The label and name an archive titles itself with: `Category:` around the\nterm, `Author:` around the display name, the date formatted for its\ngranularity. One source of truth for the block path's query-title and\nthe classic path's get_the_archive_title(), which used to compute the\nsame labels separately. Search and post-type archives stay with their\ncallers: their captured shapes differ between the two paths.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\Kind",
                "Minn\\Front\\Resolution",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\I18n\\LocalDates",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Blocks\\Dynamic\\Theme\\QueryBlocks"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parts",
                    "static": true,
                    "visibility": "public",
                    "signature": "parts(Minn\\Front\\Resolution $resolution, ?string $dateFormat): array",
                    "doc": "The archive title's prefix and title for a resolution.",
                    "shapes": [
                        "@return array{string, string} the prefix (its colon included, in the site's language) and the escaped bare name; both empty when the view has none"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dateFormat",
                            "type": "?string",
                            "shape": "string|null",
                            "default": null,
                            "doc": "the site's date_format option, for day archives"
                        }
                    ],
                    "line": 32,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "compose",
                    "static": true,
                    "visibility": "public",
                    "signature": "compose(string $prefix, string $name): string",
                    "doc": "The reference's prefixed shape, `Category: <span>Uncategorized</span>`, through the language's own order.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 46,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "dateParts",
                    "static": true,
                    "visibility": "private",
                    "signature": "dateParts(?array $date, ?string $dateFormat): array",
                    "doc": "",
                    "shapes": [
                        "@param array{0: int, 1: ?int, 2: ?int}|null $date",
                        "@return array{string, string}"
                    ],
                    "params": [
                        {
                            "name": "date",
                            "type": "?array",
                            "shape": "array{0: int, 1: ?int, 2: ?int}|null",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dateFormat",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "taxonomyLabel",
                    "static": true,
                    "visibility": "private",
                    "signature": "taxonomyLabel(string $taxonomy): string",
                    "doc": "The singular label a plugin registered for its taxonomy, for the archive title prefix.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 77
                }
            ]
        },
        {
            "name": "Minn\\Theme\\BodyClasses",
            "short": "BodyClasses",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/BodyClasses.php",
            "lines": 86,
            "doc": "The body-class list a classic theme's body_class() starts from, in the\nreference's order: the query tokens (with the singular and template\ntokens spliced in front of the type token), logged-in, the embed and\ntheme tokens, with the numbered paging tokens re-seated after the embed\ntoken. The body_class filter runs over this list in the facade.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\Kind",
                "Minn\\Front\\Resolution",
                "Minn\\Theme\\BodyFacts"
            ],
            "usedBy": [
                "Minn\\Theme\\ClassicRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "classic",
                    "static": true,
                    "visibility": "public",
                    "signature": "classic(Minn\\Front\\Resolution $resolution, array $coreClasses, ?string $customTemplate, string $themeSlug, ?string $parentSlug, Minn\\Theme\\BodyFacts $facts): array",
                    "doc": "The body classes a classic theme's page carries.",
                    "shapes": [
                        "@param list<string> $coreClasses",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "customTemplate",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themeSlug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parentSlug",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "facts",
                            "type": "Minn\\Theme\\BodyFacts",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "forView",
                    "static": true,
                    "visibility": "public",
                    "signature": "forView(?string $singular, array $coreClasses, ?string $customTemplate, string $themeSlug, ?string $parentSlug, Minn\\Theme\\BodyFacts $facts): array",
                    "doc": "The same list for a view named by the post type it shows alone (null\nwhen it shows no single post), as get_body_class needs off the front\n(probe post-template-remaining).",
                    "shapes": [
                        "@param list<string> $coreClasses",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "singular",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "customTemplate",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themeSlug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parentSlug",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "facts",
                            "type": "Minn\\Theme\\BodyFacts",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 79
                },
                {
                    "routes": [],
                    "name": "withSingularTokens",
                    "static": true,
                    "visibility": "private",
                    "signature": "withSingularTokens(?string $singular, array $classes, ?string $customTemplate): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $classes",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "singular",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "classes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "customTemplate",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 101
                }
            ]
        },
        {
            "name": "Minn\\Theme\\BodyFacts",
            "short": "BodyFacts",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/BodyFacts.php",
            "lines": 10,
            "doc": "The facts about a page that decide the body classes a classic theme's\npage carries beyond the view tokens: a signed-in reader, a custom\nlogo, responsive embeds, and the Minn bar.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Theme\\BodyClasses",
                "Minn\\Theme\\ClassicRenderer"
            ],
            "constructor": {
                "signature": "__construct(bool $loggedIn = false, bool $customLogo = false, bool $embedResponsive = true, bool $bar = false)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "loggedIn",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    },
                    {
                        "name": "customLogo",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    },
                    {
                        "name": "embedResponsive",
                        "type": "bool",
                        "shape": "",
                        "default": "true",
                        "doc": ""
                    },
                    {
                        "name": "bar",
                        "type": "bool",
                        "shape": "",
                        "default": "false",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 14,
                "end": 20
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "loggedIn",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "customLogo",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "embedResponsive",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "bar",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": []
        },
        {
            "name": "Minn\\Theme\\ClassicContent",
            "short": "ClassicContent",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/ClassicContent.php",
            "lines": 39,
            "doc": "What a classic theme's the_content() prints: the engine's block pipeline\n(render, password gate, the more-tag teaser in listings), the cached\nembeds, then the runtime's shortcodes and the_content filters so plugin\ncode sees the same hook order the reference runs.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Blocks",
                "Minn\\Content\\PasswordGate",
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\Texturize",
                "Minn\\Extension\\Extensions",
                "Minn\\Front\\Permalinks",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(Minn\\Content\\PostRecord $post, ?string $moreLinkText): string",
                    "doc": "A post's content as the classic loop prints it, with the more link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "post",
                            "type": "Minn\\Content\\PostRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "moreLinkText",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Theme\\ClassicRenderer",
            "short": "ClassicRenderer",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/ClassicRenderer.php",
            "lines": 125,
            "doc": "A whole page from the active classic theme: the reference's PHP template\nloader. The main query stands, template_redirect fires, the hierarchy\npicks a PHP file, template_include filters it, and load_template() runs\nit as the response body. The theme prints its own document; the engine\ncontributes the reference's wp_head defaults (title tag, robots, feed\nlinks, REST and oEmbed discovery, canonical, site icon) as hooks the\ntheme's wp_head() call fires.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution",
                "Minn\\Html",
                "Minn\\Runtime\\Plugins",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\BodyClasses",
                "Minn\\Theme\\BodyFacts",
                "Minn\\Theme\\ClassicTheme",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\TemplateBuffer",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\FrontController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Content\\Posts $posts, Minn\\Front\\Permalinks $permalinks, Minn\\Theme\\ClassicTheme $theme, ?Minn\\Theme\\Theme $styleTheme, Minn\\Theme\\MainQueryBridge $bridge, ?Minn\\Front\\AdminBar $bar = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "theme",
                        "type": "Minn\\Theme\\ClassicTheme",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "styleTheme",
                        "type": "?Minn\\Theme\\Theme",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bridge",
                        "type": "Minn\\Theme\\MainQueryBridge",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bar",
                        "type": "?Minn\\Front\\AdminBar",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 29,
                "end": 38
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "theme",
                    "type": "Minn\\Theme\\ClassicTheme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "styleTheme",
                    "type": "?Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "bridge",
                    "type": "Minn\\Theme\\MainQueryBridge",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "bar",
                    "type": "?Minn\\Front\\AdminBar",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "create",
                    "static": true,
                    "visibility": "public",
                    "signature": "create(Minn\\Db $db, Minn\\Theme\\ClassicTheme $theme, ?Minn\\Theme\\Theme $styleTheme, Minn\\Front\\Permalinks $permalinks, int $perPage, ?Minn\\Front\\AdminBar $bar = NULL): self",
                    "doc": "A classic renderer over the database door.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "theme",
                            "type": "Minn\\Theme\\ClassicTheme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "styleTheme",
                            "type": "?Minn\\Theme\\Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perPage",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bar",
                            "type": "?Minn\\Front\\AdminBar",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Front\\Resolution $resolution, array $coreClasses): ?string",
                    "doc": "The page for a resolution through the theme's PHP templates.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "themeClasses",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeClasses(Minn\\Front\\Resolution $resolution, array $coreClasses): array",
                    "doc": "The body-class tokens before plugins filter them (get_body_class filters them). @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 115
                },
                {
                    "routes": [],
                    "name": "template",
                    "static": false,
                    "visibility": "private",
                    "signature": "template(): string",
                    "doc": "The reference's loader order: the first true conditional whose template exists wins, index.php last.",
                    "shapes": [],
                    "params": [],
                    "line": 78,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "bodyClasses",
                    "static": false,
                    "visibility": "private",
                    "signature": "bodyClasses(Minn\\Front\\Resolution $resolution, array $coreClasses): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 117,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "registerHead",
                    "static": false,
                    "visibility": "private",
                    "signature": "registerHead(): void",
                    "doc": "The piece only the renderer holds: the engine stylesheets. The head defaults registered at setup_theme.",
                    "shapes": [],
                    "params": [],
                    "line": 134,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "registerStyles",
                    "static": false,
                    "visibility": "private",
                    "signature": "registerStyles(): void",
                    "doc": "The engine's block stylesheet, and the theme.json presets when the theme ships one, where the reference prints its block-library and global styles.",
                    "shapes": [],
                    "params": [],
                    "line": 140,
                    "end": 150
                }
            ]
        },
        {
            "name": "Minn\\Theme\\ClassicTheme",
            "short": "ClassicTheme",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/ClassicTheme.php",
            "lines": 31,
            "doc": "The active classic (PHP-template) theme on disk. A theme is classic when\nit ships no block template index; its templates are PHP files the engine\ndispatches through the reference's hierarchy and runs via load_template().\nThe theme's own functions.php loads through the runtime's symbol gate.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Theme\\ClassicRenderer"
            ],
            "constructor": {
                "signature": "__construct(string $stylesheet, string $template, string $stylesheetDir, string $templateDir)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "stylesheet",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "template",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "stylesheetDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "templateDir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 17,
                "end": 23
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "stylesheet",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "template",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "stylesheetDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "templateDir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "active",
                    "static": true,
                    "visibility": "public",
                    "signature": "active(Minn\\Content\\Site $site, string $themesDir): ?self",
                    "doc": "The active classic theme, or null under a block theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themesDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 44
                }
            ]
        },
        {
            "name": "Minn\\Theme\\CustomCss",
            "short": "CustomCss",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/CustomCss.php",
            "lines": 69,
            "doc": "Custom CSS as theme.json and blocks write it (a styles node's \"css\", a\nblock's style.css): nested rules under \"&\" unfolded beneath the selector\nthey belong to, each wrapped in :root :where() as the reference prints\nthem. Pure: CSS and selectors in, rules out.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Theme\\GlobalStyles"
            ],
            "usedBy": [
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\TreeStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "scoped",
                    "static": true,
                    "visibility": "public",
                    "signature": "scoped(string $css, string $selector): string",
                    "doc": "A block's own CSS under its selector (probe editor-styles; a block's\nstyle.css too, probe block-supports), split at each ampersand: a part\nwith no rule applies to the block itself; a nested selector that starts\nwith a space is scoped, every comma part after the block's selector;\nany other is appended to it; a pseudo element moves to the end, outside\n:where().",
                    "shapes": [],
                    "params": [
                        {
                            "name": "css",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 23,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "ofStyles",
                    "static": true,
                    "visibility": "public",
                    "signature": "ofStyles(array $styles): string",
                    "doc": "The styles' own CSS (WP_Theme_JSON::get_custom_css): the top-level\ncss, then each block's under its root selector.",
                    "shapes": [
                        "@param array<string, mixed> $styles"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 71,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "scope",
                    "static": true,
                    "visibility": "private",
                    "signature": "scope(string $scope, string $selector): string",
                    "doc": "Every comma part of a selector list after every part of the scope.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "scope",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "append",
                    "static": true,
                    "visibility": "private",
                    "signature": "append(string $selector, string $suffix): string",
                    "doc": "Text appended to every comma part of a selector list.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "suffix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 60,
                    "end": 63
                }
            ]
        },
        {
            "name": "Minn\\Theme\\EmbedRenderer",
            "short": "EmbedRenderer",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/EmbedRenderer.php",
            "lines": 33,
            "doc": "A post's embed page (its /embed/ address, or ?embed= on it), the card\nanother site's iframe shows, as the reference prints it: the main query\nstood with the embed asked for, then the embed template (the theme's\nown embed-{type}.php or embed.php, else the engine's theme-compat one)\nthrough template_include, with embed_head, embed_content,\nembed_content_meta and embed_footer. An address that embeds nothing\ngets the 404 card.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\Kind",
                "Minn\\Front\\PrintedResponse",
                "Minn\\Front\\Resolution",
                "Minn\\Http\\Request",
                "Minn\\Http\\Response",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\MainQueryBridge"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\FrontController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Theme\\MainQueryBridge $bridge)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "bridge",
                        "type": "Minn\\Theme\\MainQueryBridge",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 26,
                "end": 29
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "bridge",
                    "type": "Minn\\Theme\\MainQueryBridge",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "asked",
                    "static": true,
                    "visibility": "public",
                    "signature": "asked(Minn\\Http\\Request $request, Minn\\Front\\Resolution $resolution): bool",
                    "doc": "Whether a request for this resolution asks for its embed page.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "request",
                            "type": "Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Front\\Resolution $resolution, Closure $bodyClasses): Minn\\Http\\Response",
                    "doc": "The embed page, under the status the request's main query settled on;\nthe body classes the theme's page would carry (the Minn bar's aside),\nread once its main query stands.",
                    "shapes": [
                        "@param Closure(): list<string> $bodyClasses"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bodyClasses",
                            "type": "Closure",
                            "shape": "Closure(): list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 55
                }
            ]
        },
        {
            "name": "Minn\\Theme\\FeatureSelectors",
            "short": "FeatureSelectors",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/FeatureSelectors.php",
            "lines": 33,
            "doc": "A block's styles split between the selectors its metadata gives its\nfeatures (probe theme-json-css), in the metadata's order: a property with\na selector of its own first, then what is left of its feature under the\nfeature's selector. What is taken leaves the node.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "split",
                    "static": true,
                    "visibility": "public",
                    "signature": "split(array $selectors, array $node): array",
                    "doc": "The styles each feature selector takes, and the node left over.",
                    "shapes": [
                        "@param array<string, mixed> $selectors the block's metadata selectors",
                        "@param array<string, mixed> $node the block's styles",
                        "@return array{0: list<array{0: string, 1: array<string, mixed>}>, 1: array<string, mixed>} the styles each selector takes, in order, and what stays"
                    ],
                    "params": [
                        {
                            "name": "selectors",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block's metadata selectors"
                        },
                        {
                            "name": "node",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the block's styles"
                        }
                    ],
                    "line": 22,
                    "end": 44
                }
            ]
        },
        {
            "name": "Minn\\Theme\\FeedHeaders",
            "short": "FeedHeaders",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/FeedHeaders.php",
            "lines": 50,
            "doc": "The headers a feed is sent with, as the reference's send_headers sends\nthem (suite feed-hooks): the feed type's content type, and when the site\nlast changed (its posts, and its comments too for a comments feed) as\nLast-Modified with an ETag over it; a reader whose copy carries that\ndate or tag is told the copy is current.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Request",
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Theme\\FrontLifecycle"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FORMAT",
                    "value": "'D, d M Y H:i:s'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "for",
                    "static": true,
                    "visibility": "public",
                    "signature": "for(array $vars, ?Minn\\Http\\Request $request): array",
                    "doc": "The headers, and whether the reader's copy is current.",
                    "shapes": [
                        "@param array<string, mixed> $vars the request's query variables",
                        "@return array{0: array<string, string>, 1: bool}"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the request's query variables"
                        },
                        {
                            "name": "request",
                            "type": "?Minn\\Http\\Request",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "carriesComments",
                    "static": true,
                    "visibility": "private",
                    "signature": "carriesComments(array $vars, string $feed): bool",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $vars whether the feed's last change counts the comments: a comments feed, or a single post's"
                    ],
                    "params": [
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "whether the feed's last change counts the comments: a comments feed, or a single post's"
                        },
                        {
                            "name": "feed",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 65
                }
            ]
        },
        {
            "name": "Minn\\Theme\\Folder",
            "short": "Folder",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/Folder.php",
            "lines": 77,
            "doc": "A theme folder read from disk: its style.css headers, which folder its templates come from, its screenshot, whether it is a block theme.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\FileHeaders"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(string $root, string $slug, bool $exists, array $headers, string $template)",
                "doc": "",
                "shapes": [
                    "@param array<string, string> $headers keyed by the caller's labels"
                ],
                "params": [
                    {
                        "name": "root",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "slug",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "exists",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "headers",
                        "type": "array",
                        "shape": "array<string, string>",
                        "default": null,
                        "doc": "keyed by the caller's labels"
                    },
                    {
                        "name": "template",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 16,
                "end": 18
            },
            "cases": [],
            "constants": [
                {
                    "name": "SCREENSHOTS",
                    "value": "array (   0 => 'png',   1 => 'gif',   2 => 'jpg',   3 => 'jpeg',   4 => 'webp',   5 => 'avif', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "root",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "slug",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "exists",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "headers",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "template",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $root, string $slug, array $labels, ?Closure $reader = NULL): self",
                    "doc": "A theme folder with its style.css headers.",
                    "shapes": [
                        "@param array<string, string> $labels key => the style.css header label",
                        "@param Closure(string, array<string, string>): array<string, string>|null $reader the header reader (the facade's, so header filters apply); the engine's own by default"
                    ],
                    "params": [
                        {
                            "name": "root",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "labels",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": "key => the style.css header label"
                        },
                        {
                            "name": "reader",
                            "type": "?Closure",
                            "shape": "Closure(string, array<string, string>): array<string, string>|null",
                            "default": "NULL",
                            "doc": "the header reader (the facade's, so header filters apply); the engine's own by default"
                        }
                    ],
                    "line": 26,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "dir",
                    "static": false,
                    "visibility": "public",
                    "signature": "dir(): string",
                    "doc": "The folder's path.",
                    "shapes": [],
                    "params": [],
                    "line": 47,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "screenshot",
                    "static": false,
                    "visibility": "public",
                    "signature": "screenshot(): ?string",
                    "doc": "The screenshot file name, or null when the theme has none.",
                    "shapes": [],
                    "params": [],
                    "line": 53,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "isBlockTheme",
                    "static": true,
                    "visibility": "public",
                    "signature": "isBlockTheme(array $dirs): bool",
                    "doc": "Whether any of the folders ships a block template index.",
                    "shapes": [
                        "@param list<string> $dirs the stylesheet and template directories"
                    ],
                    "params": [
                        {
                            "name": "dirs",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the stylesheet and template directories"
                        }
                    ],
                    "line": 68,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "filePath",
                    "static": true,
                    "visibility": "public",
                    "signature": "filePath(string $stylesheetDir, string $templateDir, string $file): string",
                    "doc": "The first of the stylesheet and template directories that holds the file, or the template directory's path.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheetDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "templateDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 86
                }
            ]
        },
        {
            "name": "Minn\\Theme\\FontFaces",
            "short": "FontFaces",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/FontFaces.php",
            "lines": 119,
            "doc": "fonts a theme.json declares in the shape they are printed from.\n\nA face needs a family and at least one source it can name a format for.\nIts rule lists family (quoted unless it is one word or already carries\nquotes), style (normal), weight (400), display (fallback unless it is\none the reference knows), the sources, then any other face property in\nthe order given. Sources go data URIs first, then woff2, woff,\ntruetype, embedded-opentype and opentype; anything else is dropped.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Theme\\StylePresets"
            ],
            "usedBy": [
                "Minn\\Theme\\GlobalStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "DISPLAYS",
                    "value": "array (   0 => 'auto',   1 => 'block',   2 => 'fallback',   3 => 'swap',   4 => 'optional', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "PROPERTIES",
                    "value": "array (   0 => 'ascent-override',   1 => 'descent-override',   2 => 'font-display',   3 => 'font-family',   4 => 'font-stretch',   5 => 'font-style',   6 => 'font-weight',   7 => 'font-variant',   8 => 'font-feature-settings',   9 => 'font-variation-settings',   10 => 'line-gap-override',   11 => 'size-adjust',   12 => 'src',   13 => 'unicode-range', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "FORMATS",
                    "value": "array (   'woff2' => 'woff2',   'woff' => 'woff',   'ttf' => 'truetype',   'eot' => 'embedded-opentype',   'otf' => 'opentype', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "css",
                    "static": true,
                    "visibility": "public",
                    "signature": "css(array $fonts): string",
                    "doc": "The rules for fonts given as families of faces, one rule a line; ''\nwhen no face can be printed.",
                    "shapes": [
                        "@param array<array-key, mixed> $fonts"
                    ],
                    "params": [
                        {
                            "name": "fonts",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 32,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "fromSettings",
                    "static": true,
                    "visibility": "public",
                    "signature": "fromSettings(array $settings, Closure $fileUri): array",
                    "doc": "The fonts a theme.json's settings declare, one list of faces per\nfamily that has any: each face's sources first (file:./ ones through\n$fileUri), then its family (the first name of its own, or of the\nfamily's, unquoted), then its other properties in kebab case.",
                    "shapes": [
                        "@param Closure(string): string $fileUri a theme-relative path to its URL",
                        "@return list<list<array<string, mixed>>>"
                    ],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fileUri",
                            "type": "Closure",
                            "shape": "Closure(string): string",
                            "default": null,
                            "doc": "a theme-relative path to its URL"
                        }
                    ],
                    "line": 53,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "rule",
                    "static": true,
                    "visibility": "private",
                    "signature": "rule(array $face): string",
                    "doc": "One face's rule, or '' when it has no family or no source it can print.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "face",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "sources",
                    "static": true,
                    "visibility": "private",
                    "signature": "sources(mixed $src): string",
                    "doc": "The sources in the order the reference prints them: data URIs, then one each by format.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "src",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 102,
                    "end": 119
                },
                {
                    "routes": [],
                    "name": "family",
                    "static": true,
                    "visibility": "private",
                    "signature": "family(string $family): string",
                    "doc": "A family name as printed: as given when it carries quotes or is one word, quoted otherwise.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "family",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 122,
                    "end": 125
                },
                {
                    "routes": [],
                    "name": "variations",
                    "static": true,
                    "visibility": "private",
                    "signature": "variations(array $settings): string",
                    "doc": "font-variation-settings given as axis => value, run together as the reference prints them. @param array<string, mixed> $settings",
                    "shapes": [
                        "@param array<string, mixed> $settings"
                    ],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 128,
                    "end": 131
                },
                {
                    "routes": [],
                    "name": "firstName",
                    "static": true,
                    "visibility": "private",
                    "signature": "firstName(string $family): string",
                    "doc": "The first name in a comma-separated family list, without its quotes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "family",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 134,
                    "end": 137
                }
            ]
        },
        {
            "name": "Minn\\Theme\\FrontLifecycle",
            "short": "FrontLifecycle",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/FrontLifecycle.php",
            "lines": 110,
            "doc": "WordPress's front-end request steps around the main query, as WP::main\nruns them (front lifecycle trace): parse the request (do_parse_request\nmay take it over; query_vars names the public variables, a plugin's own\nread from the query string; request filters the result; parse_request\nfollows), the main query, the 404 decision (pre_handle_404 first), the\nglobals, and the headers (wp_headers, the status, send_headers). The\nengine has already resolved the URL; these steps tell plugins about it\nin the reference's order and let them change what the query asks.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Response",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\FeedHeaders",
                "Minn\\Theme\\NotModified"
            ],
            "usedBy": [
                "Minn\\Theme\\MainQueryBridge"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "parseRequest",
                    "static": true,
                    "visibility": "public",
                    "signature": "parseRequest(WP $wp, array $vars, array $given, ?Closure $parse = NULL): bool",
                    "doc": "Parses the request: false when a plugin's do_parse_request took the\nparse over (the main query then does not run). The query string is\nthe main query's to build, after.",
                    "shapes": [
                        "@param array<string, mixed> $vars the variables the engine resolved",
                        "@param array<string, mixed> $given the query string and form, where a plugin's own variables are read",
                        "@param (\\Closure(list<string>): array<string, mixed>)|null $parse the reference's parse vars for the public vars, when the request is known"
                    ],
                    "params": [
                        {
                            "name": "wp",
                            "type": "WP",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the variables the engine resolved"
                        },
                        {
                            "name": "given",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "the query string and form, where a plugin's own variables are read"
                        },
                        {
                            "name": "parse",
                            "type": "?Closure",
                            "shape": "(\\Closure(list<string>): array<string, mixed>)|null",
                            "default": "NULL",
                            "doc": "the reference's parse vars for the public vars, when the request is known"
                        }
                    ],
                    "line": 32,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "handle404",
                    "static": true,
                    "visibility": "public",
                    "signature": "handle404(WP_Query $query, bool $notFound): void",
                    "doc": "The 404 decision, the one place it is made: a plugin's\npre_handle_404 may make it; otherwise a request for something the\nsite does not have is a 404, as is an empty page past the first of\nany listing and an empty date archive that names nothing else (an\nexisting term, author or type with no posts, a date inside one of\nthose or inside a search, an empty search, the front: a 200); the\nstatus and no-cache headers follow. A feed is never a 404: one of\nnothing is an empty feed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "notFound",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "sendHeaders",
                    "static": true,
                    "visibility": "public",
                    "signature": "sendHeaders(WP $wp): void",
                    "doc": "The headers the reference sends for the request: no caching for a\nsigned-in reader or a 404, the content type, a pingback address for a\nsingle post that takes pings; then wp_headers, the status an error\nvariable names, and send_headers.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "wp",
                            "type": "WP",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 129
                }
            ]
        },
        {
            "name": "Minn\\Theme\\GlobalStyles",
            "short": "GlobalStyles",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/GlobalStyles.php",
            "lines": 547,
            "doc": "theme.json to CSS. Presets become custom properties on :root and their\nhas-* utility classes; settings.layout sizes, root styles, elements, and\nper-block styles become rules; the containers, galleries, and style\nvariations the page actually rendered get their own stylesheets. The\nlayout rules themselves (flow, constrained, flex, grid, alignments) are\nthe engine's own, written to the same class hooks.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\CoreBlocks",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Styles",
                "Minn\\Json",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\CustomCss",
                "Minn\\Theme\\FontFaces",
                "Minn\\Theme\\StyleLayers",
                "Minn\\Theme\\StylePresets",
                "Minn\\Theme\\StyleSettings",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeJsonData"
            ],
            "usedBy": [
                "Minn\\Admin\\RenderController",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\CustomCss",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\TreeStyles"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Theme\\Theme $theme, ?array $user = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "theme",
                        "type": "Minn\\Theme\\Theme",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "user",
                        "type": "?array",
                        "shape": "array|null",
                        "default": "NULL",
                        "doc": "the site editor's saved global styles, layered over the theme"
                    }
                ],
                "visibility": "public",
                "line": 63,
                "end": 65
            },
            "cases": [],
            "constants": [
                {
                    "name": "ELEMENT_SELECTORS",
                    "value": "array (   'link' => 'a:where(:not(.wp-element-button))',   'heading' => 'h1, h2, h3, h4, h5, h6',   'h1' => 'h1',   'h2' => 'h2',   'h3' => 'h3',   'h4' => 'h4',   'h5' => 'h5',   'h6' => 'h6',   'button' => '.wp-element-button, .wp-block-button__link',   'caption' => '.wp-element-caption, .wp-block-audio figcaption, .wp-block-embed figcaption, .wp-block-gallery figcaption, .wp-block-image figcaption, .wp-block-table figcaption, .wp-block-video figcaption',   'cite' => 'cite', )",
                    "doc": "Element selectors in the order the reference prints them, whatever\norder theme.json or the saved styles list them in: the heading group\nlands before the individual levels, so an h1 line-height beats the\ngroup's. Themes list h1..h6 before heading and would otherwise win.",
                    "visibility": "public"
                },
                {
                    "name": "BLOCK_SELECTORS",
                    "value": "array (   'core/paragraph' => 'p',   'core/list-item' => '.wp-block-list > li',   'core/button' => '.wp-block-button .wp-block-button__link',   'core/table' => '.wp-block-table > table',   'core/icon' => '.wp-block-icon svg', )",
                    "doc": "Blocks whose metadata names a root selector other than .wp-block-{slug}.",
                    "visibility": "private"
                },
                {
                    "name": "STYLESHEET_LESS",
                    "value": "array (   0 => 'core/block',   1 => 'core/column',   2 => 'core/comments-pagination-next',   3 => 'core/comments-pagination-numbers',   4 => 'core/comments-pagination-previous',   5 => 'core/comments-title',   6 => 'core/freeform',   7 => 'core/home-link',   8 => 'core/html',   9 => 'core/legacy-widget',   10 => 'core/list-item',   11 => 'core/missing',   12 => 'core/more',   13 => 'core/navigation-submenu',   14 => 'core/nextpage',   15 => 'core/page-list-item',   16 => 'core/pattern',   17 => 'core/query-no-results',   18 => 'core/query-pagination-next',   19 => 'core/query-pagination-numbers',   20 => 'core/query-pagination-previous',   21 => 'core/query',   22 => 'core/shortcode',   23 => 'core/social-link',   24 => 'core/tab-panels',   25 => 'core/template-part',   26 => 'core/terms-query',   27 => 'core/widget-group', )",
                    "doc": "The reference prints a core block's theme.json styles only when the\npage rendered the block with output (a generated excerpt counts), and\nattaches them to the block's own stylesheet; these core blocks have\nnone, so their styles never reach a page. A block from outside core\nhas no such stylesheet to wait for, so its styles always print.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "theme",
                    "type": "Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "user",
                    "type": "?array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "styles",
                    "static": false,
                    "visibility": "public",
                    "signature": "styles(): array",
                    "doc": "The theme.json (plus site-editor) styles node, under the engine's own defaults.",
                    "shapes": [],
                    "params": [],
                    "line": 90,
                    "end": 95
                },
                {
                    "routes": [],
                    "name": "resolvedStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "resolvedStyles(): array",
                    "doc": "The same node with every `var:preset|…` token resolved to the custom\nproperty it names, which is the shape a caller reading the styles as\ndata expects (the CSS writer resolves them on the way out instead).",
                    "shapes": [],
                    "params": [],
                    "line": 102,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "css",
                    "static": false,
                    "visibility": "public",
                    "signature": "css(): string",
                    "doc": "The global stylesheet from theme.json and the user's styles, as a page prints it: only the core blocks it rendered.",
                    "shapes": [],
                    "params": [],
                    "line": 108,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "stylesheet",
                    "static": false,
                    "visibility": "public",
                    "signature": "stylesheet(array $types): string",
                    "doc": "The stylesheet wp_get_global_stylesheet answers (probe editor-styles),\nby type: the custom properties, the styles (every block's, rendered or\nnot), the preset classes; in that order.",
                    "shapes": [
                        "@param list<string> $types"
                    ],
                    "params": [
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "fontFaces",
                    "static": false,
                    "visibility": "public",
                    "signature": "fontFaces(): string",
                    "doc": "The @font-face rules for every family that declares font files\n(Theme\\FontFaces), with file:./ resolved against the theme that\ncarries the file. The page prints them through wp_print_font_faces on\nwp_head; the editor's styles read them here.",
                    "shapes": [],
                    "params": [],
                    "line": 189,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "rootRules",
                    "static": true,
                    "visibility": "public",
                    "signature": "rootRules(bool $aware): string",
                    "doc": "The body's margin, the global padding rules under root-padding-aware alignments, and the site's alignments.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "aware",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 213,
                    "end": 223
                },
                {
                    "routes": [],
                    "name": "blockGapRules",
                    "static": true,
                    "visibility": "public",
                    "signature": "blockGapRules(string $gap): string",
                    "doc": "The block gap between the site's blocks and inside every layout.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "gap",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 226,
                    "end": 231
                },
                {
                    "routes": [],
                    "name": "layoutRules",
                    "static": true,
                    "visibility": "public",
                    "signature": "layoutRules(): string",
                    "doc": "The layouts' own rules: alignments inside flow and constrained layouts, the content and wide sizes, flex and grid.",
                    "shapes": [],
                    "params": [],
                    "line": 234,
                    "end": 240
                },
                {
                    "routes": [],
                    "name": "gapRules",
                    "static": true,
                    "visibility": "public",
                    "signature": "gapRules(string $prefix, string $gap): string",
                    "doc": "The block-gap rules for a layout scope: \"\" for the root, or a block's -is-layout- prefix.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "gap",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 243,
                    "end": 252
                },
                {
                    "routes": [],
                    "name": "elementStyles",
                    "static": true,
                    "visibility": "public",
                    "signature": "elementStyles(array $elements, string $scope): string",
                    "doc": "The element rules (links, headings, buttons, captions, citations), each state after it; under a block's selector when one is given.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "elements",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scope",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 274,
                    "end": 305
                },
                {
                    "routes": [],
                    "name": "blockStyles",
                    "static": true,
                    "visibility": "public",
                    "signature": "blockStyles(string $name, array $blockStyles, string $scope = ''): string",
                    "doc": "A block's rules: its root rule, its layout gap rules, then a rule for\neach feature its metadata gives a selector of its own (the avatar's\nborder on its image), its own CSS and its elements (probe\neditor-styles).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "blockStyles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scope",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 328,
                    "end": 353
                },
                {
                    "routes": [],
                    "name": "scoped",
                    "static": true,
                    "visibility": "public",
                    "signature": "scoped(string $selector, string $scope): string",
                    "doc": "Each selector in a list under the scope (\"\" for none).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scope",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 356,
                    "end": 359
                },
                {
                    "routes": [],
                    "name": "rootSelector",
                    "static": true,
                    "visibility": "public",
                    "signature": "rootSelector(string $name): string",
                    "doc": "A block's root selector: its metadata's, the reference's own for a few core blocks, else .wp-block-{slug}.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 362,
                    "end": 367
                },
                {
                    "routes": [],
                    "name": "selectorsOf",
                    "static": true,
                    "visibility": "public",
                    "signature": "selectorsOf(string $name): array",
                    "doc": "A core block's selectors from its metadata. @return array<string, mixed>",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 370,
                    "end": 373
                },
                {
                    "routes": [],
                    "name": "byFeature",
                    "static": true,
                    "visibility": "public",
                    "signature": "byFeature(array $styles, array $selectors): array",
                    "doc": "A block's styles split between its root selector and the features (or\na feature's single properties) its metadata selects elsewhere.",
                    "shapes": [
                        "@param array<string, mixed> $styles",
                        "@param array<string, mixed> $selectors",
                        "@return array{0: array<string, mixed>, 1: array<string, array<string, mixed>>}"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selectors",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 383,
                    "end": 408
                },
                {
                    "routes": [],
                    "name": "variationCss",
                    "static": true,
                    "visibility": "public",
                    "signature": "variationCss(string $name, string $style, int $instance, array $variation): string",
                    "doc": "A numbered style variation's CSS (probe block-supports): its element\nrules scoped by the numbered class alone, then the variation on the\nblock's root selector (the class riding on the block's own class:\n.wp-block-button.is-style-outline--3 .wp-block-button__link), its own\nCSS, and the blocks styled inside it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "style",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "variation",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 429,
                    "end": 451
                },
                {
                    "routes": [],
                    "name": "declarations",
                    "static": true,
                    "visibility": "public",
                    "signature": "declarations(array $styles, array $skip): array",
                    "doc": "theme.json style properties to declarations: color, typography, spacing,\nborder, shadow, dimensions, outline.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "skip",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 469,
                    "end": 539
                },
                {
                    "routes": [],
                    "name": "json",
                    "static": false,
                    "visibility": "private",
                    "signature": "json(): array",
                    "doc": "The theme's theme.json with the site editor's styles over it, those\nas wp_theme_json_data_user leaves them (a plugin may add a layer\nwhere the site editor saved none).",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [],
                    "line": 74,
                    "end": 87
                },
                {
                    "routes": [],
                    "name": "parts",
                    "static": false,
                    "visibility": "private",
                    "signature": "parts(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{variables: string, base: string, presets: string, blocks: array<string, mixed>}"
                    ],
                    "params": [],
                    "line": 153,
                    "end": 180
                },
                {
                    "routes": [],
                    "name": "fontUrl",
                    "static": false,
                    "visibility": "private",
                    "signature": "fontUrl(string $src): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "src",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 195,
                    "end": 210
                },
                {
                    "routes": [],
                    "name": "rootStyles",
                    "static": false,
                    "visibility": "private",
                    "signature": "rootStyles(array $styles): string",
                    "doc": "Root styles land on body. With root-padding-aware alignments the root\npadding is NOT applied to body; it becomes the custom properties the\nhas-global-padding rules read.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 259,
                    "end": 271
                },
                {
                    "routes": [],
                    "name": "blockCustomProperties",
                    "static": false,
                    "visibility": "private",
                    "signature": "blockCustomProperties(array $blocks): string",
                    "doc": "Each block's own settings.custom as custom properties on the block's root selector. @param array<string, mixed> $blocks",
                    "shapes": [
                        "@param array<string, mixed> $blocks"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 308,
                    "end": 320
                },
                {
                    "routes": [],
                    "name": "withoutEmpty",
                    "static": true,
                    "visibility": "private",
                    "signature": "withoutEmpty(array $styles): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 410,
                    "end": 420
                },
                {
                    "routes": [],
                    "name": "containerStyles",
                    "static": false,
                    "visibility": "private",
                    "signature": "containerStyles(): string",
                    "doc": "The page's block-support rules (layouts, element styles, and the rest), which the facade keeps in the style engine's block-supports store.",
                    "shapes": [],
                    "params": [],
                    "line": 454,
                    "end": 461
                },
                {
                    "routes": [],
                    "name": "ordered",
                    "static": true,
                    "visibility": "private",
                    "signature": "ordered(array $declarations): array",
                    "doc": "The reference prints declarations in its own fixed property order:\nalphabetical, except that the sides of a margin or padding run\ntop, right, bottom, left.",
                    "shapes": [
                        "@param list<string> $declarations",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "declarations",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 549,
                    "end": 566
                }
            ]
        },
        {
            "name": "Minn\\Theme\\HeadLinks",
            "short": "HeadLinks",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/HeadLinks.php",
            "lines": 51,
            "doc": "The engine's own pieces of a page's head: its block stylesheet link,\nand for rest_output_link_wp_head the REST discovery link and the JSON\nalternate for the queried object; the site's feed links as feed_links\nprints them. Every theme's head prints them from the reference's\nwp_head hooks.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\Support\\Escape",
                "Minn\\Support\\Lists"
            ],
            "usedBy": [
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Front\\Permalinks $permalinks)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "permalinks",
                        "type": "Minn\\Front\\Permalinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "permalinks",
                    "type": "Minn\\Front\\Permalinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "engineStylesheet",
                    "static": false,
                    "visibility": "public",
                    "signature": "engineStylesheet(): string",
                    "doc": "The link to the engine's own block stylesheet.",
                    "shapes": [],
                    "params": [],
                    "line": 29,
                    "end": 32
                },
                {
                    "routes": [],
                    "name": "siteFeeds",
                    "static": true,
                    "visibility": "public",
                    "signature": "siteFeeds(array $args): string",
                    "doc": "The site's two feed links as feed_links prints them: the posts feed\nand the comments feed (each unless its feed_links_show_* filter says\nno), titled with the caller's separator and words, through\nfeed_links_args.",
                    "shapes": [
                        "@param array<string, mixed> $args"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 42,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "restLink",
                    "static": false,
                    "visibility": "public",
                    "signature": "restLink(): string",
                    "doc": "No trailing newline: the reference prints the JSON alternate and the RSD link on the same physical line.",
                    "shapes": [],
                    "params": [],
                    "line": 52,
                    "end": 55
                },
                {
                    "routes": [],
                    "name": "jsonAlternate",
                    "static": false,
                    "visibility": "public",
                    "signature": "jsonAlternate(Minn\\Front\\Resolution $resolution): string",
                    "doc": "The wp/v2 alternate link for the resolution.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 71
                }
            ]
        },
        {
            "name": "Minn\\Theme\\Hierarchy",
            "short": "Hierarchy",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/Hierarchy.php",
            "lines": 148,
            "doc": "The classic template hierarchy: the candidate file names each template\ntype tries, most specific first, as the reference resolves them. The\nfacade's get_{type}_template() functions feed these to get_query_template(),\nwhich locates the first candidate the theme (child, then parent) ships.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "frontPage",
                    "static": true,
                    "visibility": "public",
                    "signature": "frontPage(): array",
                    "doc": "The front page templates.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 20,
                    "end": 23
                },
                {
                    "routes": [],
                    "name": "home",
                    "static": true,
                    "visibility": "public",
                    "signature": "home(): array",
                    "doc": "The home templates.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "privacyPolicy",
                    "static": true,
                    "visibility": "public",
                    "signature": "privacyPolicy(): array",
                    "doc": "The privacy policy templates.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 40,
                    "end": 43
                },
                {
                    "routes": [],
                    "name": "page",
                    "static": true,
                    "visibility": "public",
                    "signature": "page(string $custom, string $slug, int $id): array",
                    "doc": "The page templates, custom first.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "custom",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "single",
                    "static": true,
                    "visibility": "public",
                    "signature": "single(string $type, string $slug, string $custom): array",
                    "doc": "The single templates, custom first.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "custom",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "attachment",
                    "static": true,
                    "visibility": "public",
                    "signature": "attachment(string $mimeType): array",
                    "doc": "The attachment templates by mime type: type-subtype, subtype, type\n(probe template-getters).",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "mimeType",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 108
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": true,
                    "visibility": "public",
                    "signature": "term(string $taxonomy, string $slug, int $id): array",
                    "doc": "The term archive templates.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "taxonomy",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 126
                },
                {
                    "routes": [],
                    "name": "author",
                    "static": true,
                    "visibility": "public",
                    "signature": "author(string $nicename, int $id): array",
                    "doc": "The author archive templates.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "nicename",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 133,
                    "end": 144
                },
                {
                    "routes": [],
                    "name": "archive",
                    "static": true,
                    "visibility": "public",
                    "signature": "archive(array $postTypes): array",
                    "doc": "The post type archive templates.",
                    "shapes": [
                        "@param list<string> $postTypes @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "postTypes",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 151,
                    "end": 159
                }
            ]
        },
        {
            "name": "Minn\\Theme\\MainQueryBridge",
            "short": "MainQueryBridge",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/MainQueryBridge.php",
            "lines": 136,
            "doc": "Stands the main query for a themed page and runs the front-end steps\naround it as WP::main does (FrontLifecycle): the request parsed, the main\nquery through WP_Query (so pre_get_posts and every posts_* filter shape\nit), the 404 decision, the globals, the headers, then \"wp\" and\ntemplate_redirect. A listing's posts are the query's, and so is the 404\nfor an empty page past the first or an empty date; a single post the\nquery does not find (a preview, a draft its author reads) is the one the\nengine resolved. When a plugin takes the parse over no query runs, as\non the reference, and the page stands empty.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Page",
                "Minn\\Content\\PostRecord",
                "Minn\\Front\\Kind",
                "Minn\\Front\\RequestParse",
                "Minn\\Front\\Resolution",
                "Minn\\Http\\Method",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\FrontLifecycle",
                "Minn\\Theme\\Printed"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\FeedController",
                "Minn\\Front\\FrontController",
                "Minn\\Front\\PrintedResponse",
                "Minn\\Front\\ProbeController",
                "Minn\\Front\\SitemapController",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\EmbedRenderer",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(int $perPage)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "perPage",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 30,
                "end": 33
            },
            "cases": [],
            "constants": [
                {
                    "name": "LISTINGS",
                    "value": "array (   0 =>    \\Minn\\Front\\Kind::Home,   1 =>    \\Minn\\Front\\Kind::Category,   2 =>    \\Minn\\Front\\Kind::Tag,   3 =>    \\Minn\\Front\\Kind::Taxonomy,   4 =>    \\Minn\\Front\\Kind::PostTypeArchive,   5 =>    \\Minn\\Front\\Kind::Author,   6 =>    \\Minn\\Front\\Kind::Date,   7 =>    \\Minn\\Front\\Kind::Search, )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "perPage",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "stand",
                    "static": false,
                    "visibility": "public",
                    "signature": "stand(Minn\\Front\\Resolution $resolution, array $extra = array ( )): Minn\\Content\\Page",
                    "doc": "The page of posts a resolution shows, through the runtime's main\nquery; the variables a request adds of its own (a feed's) win.",
                    "shapes": [
                        "@param array<string, mixed> $extra"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "extra",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 85
                },
                {
                    "routes": [],
                    "name": "verdict",
                    "static": true,
                    "visibility": "public",
                    "signature": "verdict(Minn\\Front\\Resolution $resolution): Minn\\Front\\Resolution",
                    "doc": "The resolution as the main query left it: a 404 when the query\ndecided one (an empty page past the first, an empty date), with the\nvars it was asked under.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 92,
                    "end": 97
                },
                {
                    "routes": [],
                    "name": "perPage",
                    "static": false,
                    "visibility": "public",
                    "signature": "perPage(): int",
                    "doc": "Posts per page.",
                    "shapes": [],
                    "params": [],
                    "line": 100,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "vars",
                    "static": false,
                    "visibility": "private",
                    "signature": "vars(Minn\\Front\\Resolution $resolution): array",
                    "doc": "The variables the request stands on before the parse runs (and in\nits place, when a plugin takes the parse over): the matched rule's,\nthe posts page by its id.",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 112,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "postVars",
                    "static": false,
                    "visibility": "private",
                    "signature": "postVars(Minn\\Front\\Resolution $resolution): array",
                    "doc": "The variables that name the post the engine resolved, for a page the\nquery found nothing to stand on (a preview, a draft its author reads).",
                    "shapes": [
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 135
                },
                {
                    "routes": [],
                    "name": "queried",
                    "static": false,
                    "visibility": "private",
                    "signature": "queried(Minn\\Front\\Resolution $resolution, array $vars): Minn\\Content\\Page",
                    "doc": "The main query for these variables: a listing is its posts; any other\npage stands on the post the engine resolved when the query has none.",
                    "shapes": [
                        "@param array<string, mixed> $vars"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 153
                },
                {
                    "routes": [],
                    "name": "seeded",
                    "static": false,
                    "visibility": "private",
                    "signature": "seeded(Minn\\Front\\Resolution $resolution, array $vars): Minn\\Content\\Page",
                    "doc": "The query globals seeded with no posts of their own (a single the query did not find is looked up by its vars), when no query ran or it found nothing to stand on. @param array<string, mixed> $vars",
                    "shapes": [
                        "@param array<string, mixed> $vars"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "vars",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 156,
                    "end": 160
                }
            ]
        },
        {
            "name": "Minn\\Theme\\NotModified",
            "short": "NotModified",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/NotModified.php",
            "lines": 3,
            "doc": "Raised once a reader's copy of a feed has been found current and the\nheaders that say so are sent: the reference stops the request there, so\nthe engine answers with nothing more.",
            "implements": [
                "Throwable",
                "Stringable"
            ],
            "extends": "Exception",
            "uses": [],
            "usedBy": [
                "Minn\\Front\\FeedController",
                "Minn\\Theme\\FrontLifecycle"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": []
        },
        {
            "name": "Minn\\Theme\\PageRenderer",
            "short": "PageRenderer",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/PageRenderer.php",
            "lines": 185,
            "doc": "A whole page from the active block theme: the template the resolution\nmaps to, rendered against the main query, inside the document shell the\nreference emits (skip link, wp-site-blocks, the skip-link target on the\nfirst main element).",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Context",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Parser",
                "Minn\\Blocks\\RenderState",
                "Minn\\Blocks\\Renderer",
                "Minn\\Content\\Blocks",
                "Minn\\Content\\Page",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Reader",
                "Minn\\Content\\Site",
                "Minn\\Content\\Texturize",
                "Minn\\Db",
                "Minn\\Extension\\Extensions",
                "Minn\\Front\\AdminBar",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Permalinks",
                "Minn\\Front\\Resolution",
                "Minn\\Html",
                "Minn\\I18n\\Gettext",
                "Minn\\I18n\\SiteLanguage",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\HeadLinks",
                "Minn\\Theme\\MainQueryBridge",
                "Minn\\Theme\\TemplateBuffer",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Engine",
                "Minn\\Front\\FrontController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Content\\Site $site, Minn\\Theme\\Theme $theme, Minn\\Theme\\Templates $templates, Minn\\Blocks\\Renderer $renderer, Minn\\Theme\\MainQueryBridge $bridge, Minn\\Theme\\HeadLinks $headLinks, ?Minn\\Front\\AdminBar $bar = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "theme",
                        "type": "Minn\\Theme\\Theme",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "templates",
                        "type": "Minn\\Theme\\Templates",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "renderer",
                        "type": "Minn\\Blocks\\Renderer",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bridge",
                        "type": "Minn\\Theme\\MainQueryBridge",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "headLinks",
                        "type": "Minn\\Theme\\HeadLinks",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "bar",
                        "type": "?Minn\\Front\\AdminBar",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 36,
                "end": 45
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "theme",
                    "type": "Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "templates",
                    "type": "Minn\\Theme\\Templates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "renderer",
                    "type": "Minn\\Blocks\\Renderer",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "bridge",
                    "type": "Minn\\Theme\\MainQueryBridge",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "headLinks",
                    "type": "Minn\\Theme\\HeadLinks",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "bar",
                    "type": "?Minn\\Front\\AdminBar",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "create",
                    "static": true,
                    "visibility": "public",
                    "signature": "create(Minn\\Db $db, Minn\\Theme\\Theme $theme, Minn\\Front\\Permalinks $permalinks, int $perPage, ?Minn\\Front\\AdminBar $bar = NULL): self",
                    "doc": "A page renderer over the database door.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "db",
                            "type": "Minn\\Db",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "theme",
                            "type": "Minn\\Theme\\Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "perPage",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bar",
                            "type": "?Minn\\Front\\AdminBar",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 48,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "bodyClasses",
                    "static": false,
                    "visibility": "public",
                    "signature": "bodyClasses(Minn\\Front\\Resolution $resolution, array $coreClasses): array",
                    "doc": "The reference's body-class tokens: the singular and template tokens\nsit in front of the type token (\"page\", \"single\"), the custom-logo\nand embed tokens follow the core set, the paging tokens come after\nthose, and the theme (and child theme) tokens close the list; then\nthe body_class filter.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "themeClasses",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeClasses(Minn\\Front\\Resolution $resolution, array $coreClasses): array",
                    "doc": "The body-class tokens before plugins filter them (bodyClasses()). @return list<string>",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "render",
                    "static": false,
                    "visibility": "public",
                    "signature": "render(Minn\\Front\\Resolution $resolution, array $coreClasses): ?string",
                    "doc": "The page for a resolution, or null when the theme has no template for it.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "document",
                    "static": false,
                    "visibility": "private",
                    "signature": "document(Minn\\Front\\Resolution $resolution, array $coreClasses, array $template, Minn\\Content\\Page $query): string",
                    "doc": "The block template's document: the blocks rendered, the head, the body\nclasses, the footer.",
                    "shapes": [
                        "@param array<string, mixed> $template"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "coreClasses",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "template",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "Minn\\Content\\Page",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 141,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "skipLinkTarget",
                    "static": true,
                    "visibility": "private",
                    "signature": "skipLinkTarget(string $body): array",
                    "doc": "The skip link points at the first <main>: at its own id when the\ntemplate gave it one, otherwise at the id the reference injects.",
                    "shapes": [
                        "@return array{string, string} the body, the target id"
                    ],
                    "params": [
                        {
                            "name": "body",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "head",
                    "static": false,
                    "visibility": "private",
                    "signature": "head(Minn\\Front\\Resolution $resolution, Minn\\Theme\\GlobalStyles $styles, ?Minn\\Front\\AdminBar $bar): string",
                    "doc": "The head: the charset, then wp_head (the viewport, robots, title and\ndiscovery links from the reference's defaults, which a plugin may\nremove; the engine's stylesheets inside it, where the reference\nprints a theme's, after plugin styles), then the extension head (after\nthe stylesheets, as the seam contract says), the bar's own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "styles",
                            "type": "Minn\\Theme\\GlobalStyles",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "bar",
                            "type": "?Minn\\Front\\AdminBar",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 194,
                    "end": 217
                }
            ]
        },
        {
            "name": "Minn\\Theme\\PatternHeaders",
            "short": "PatternHeaders",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/PatternHeaders.php",
            "lines": 78,
            "doc": "A theme's pattern files read by their headers, as WP_Theme::get_block_patterns\nlists them (probe wp-theme). Each one gives title, slug and description\n(empty when the header has none), then whatever of viewportWidth (a\nnumber), inserter (false for \"no\"), and the lists categories,\nkeywords, blockTypes, postTypes and templateTypes it declares, split on\ncommas and whitespace. A file\nwithout a title and a slug is not a pattern.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "LISTS",
                    "value": "array (   'categories' => 'Categories',   'keywords' => 'Keywords',   'blockTypes' => 'Block Types',   'postTypes' => 'Post Types',   'templateTypes' => 'Template Types', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": true,
                    "visibility": "public",
                    "signature": "all(string $themeDir): array",
                    "doc": "The patterns directory's files by file name, in name order.",
                    "shapes": [
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "themeDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 28
                },
                {
                    "routes": [],
                    "name": "files",
                    "static": true,
                    "visibility": "public",
                    "signature": "files(string $themeDir): array",
                    "doc": "The pattern files a theme ships, file name => path, in name order.",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [
                        {
                            "name": "themeDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 42
                },
                {
                    "routes": [],
                    "name": "of",
                    "static": true,
                    "visibility": "public",
                    "signature": "of(array $files): array",
                    "doc": "The records of a list of pattern files, file name => path (a list a\nplugin may have changed); a file that is not a pattern is left out.",
                    "shapes": [
                        "@param array<string, string> $files",
                        "@return array<string, array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "files",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "read",
                    "static": true,
                    "visibility": "public",
                    "signature": "read(string $head): ?array",
                    "doc": "One file's record from the start of its text, or null when it names no title or slug.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "head",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 92
                }
            ]
        },
        {
            "name": "Minn\\Theme\\PatternText",
            "short": "PatternText",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/PatternText.php",
            "lines": 234,
            "doc": "Block-theme patterns are PHP files whose only code is a handful of\necho-and-escape calls around literal strings. The engine never executes\nthem: it interprets that small text grammar (string literals, \".\"\nconcatenation, the i18n and escaping wrappers, the theme URI helper, and\nprintf with %s) and leaves anything else out. A translated string is\nlooked up in its domain (the theme's own), with its context where it\ngives one, as the reference's patterns ask for theirs. The header comment block\nis dropped, and every byte outside the PHP tags is kept as-is.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\I18n\\Gettext",
                "Minn\\Support\\Kses"
            ],
            "usedBy": [
                "Minn\\Theme\\Theme"
            ],
            "constructor": {
                "signature": "__construct(string $source, string $themeUri)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "source",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "themeUri",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "private",
                "line": 46,
                "end": 50
            },
            "cases": [],
            "constants": [
                {
                    "name": "PASSTHROUGH",
                    "value": "array (   0 => 'wp_kses_post', )",
                    "doc": "Wrappers whose value is their first argument, unchanged.",
                    "visibility": "private"
                },
                {
                    "name": "URLS",
                    "value": "array (   0 => 'esc_url',   1 => 'esc_url_raw', )",
                    "doc": "Wrappers whose value is their first argument as a URL: empty when what stands before a colon is no allowed scheme.",
                    "visibility": "private"
                },
                {
                    "name": "ESCAPING",
                    "value": "array (   0 => 'esc_html',   1 => 'esc_attr', )",
                    "doc": "Wrappers whose value is their first argument with HTML special characters encoded.",
                    "visibility": "private"
                },
                {
                    "name": "TRANSLATING",
                    "value": "array (   '__' => 'text',   '_x' => 'context',   'esc_html__' => 'text escaped',   'esc_attr__' => 'text escaped',   'esc_html_x' => 'context escaped',   'esc_attr_x' => 'context escaped', )",
                    "doc": "The translating wrappers, by how they read: \"text\" (text, domain) or\n\"context\" (text, context, domain), escaped or not; those that echo are\nstatements, the rest values.",
                    "visibility": "private"
                },
                {
                    "name": "ECHOING",
                    "value": "array (   '_e' => 'text',   '_ex' => 'context',   'esc_html_e' => 'text escaped',   'esc_attr_e' => 'text escaped', )",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "themeUri",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "source",
                    "type": "string",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "position",
                    "type": "int",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "render",
                    "static": true,
                    "visibility": "public",
                    "signature": "render(string $file, string $themeUri): string",
                    "doc": "A pattern file's HTML with its PHP interpreted, never executed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "file",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themeUri",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 53,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "statements",
                    "static": false,
                    "visibility": "private",
                    "signature": "statements(): string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 65,
                    "end": 89
                },
                {
                    "routes": [],
                    "name": "printf",
                    "static": false,
                    "visibility": "private",
                    "signature": "printf(array $arguments): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "arguments",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 99
                },
                {
                    "routes": [],
                    "name": "expression",
                    "static": false,
                    "visibility": "private",
                    "signature": "expression(): ?string",
                    "doc": "A concatenation of terms.",
                    "shapes": [],
                    "params": [],
                    "line": 102,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "term",
                    "static": false,
                    "visibility": "private",
                    "signature": "term(): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 118,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "translated",
                    "static": true,
                    "visibility": "private",
                    "signature": "translated(string $layout, array $arguments): string",
                    "doc": "A message in the site's language, read as its wrapper reads it\n(TRANSLATING): (text, domain) or (text, context, domain), escaped for\nthe escaping wrappers.",
                    "shapes": [
                        "@param list<string|null> $arguments"
                    ],
                    "params": [
                        {
                            "name": "layout",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "arguments",
                            "type": "array",
                            "shape": "list<string|null>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 166
                },
                {
                    "routes": [],
                    "name": "escape",
                    "static": true,
                    "visibility": "private",
                    "signature": "escape(string $text): string",
                    "doc": "Special characters encoded once; entities already present are kept.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "text",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 169,
                    "end": 172
                },
                {
                    "routes": [],
                    "name": "arguments",
                    "static": false,
                    "visibility": "private",
                    "signature": "arguments(): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string|null>"
                    ],
                    "params": [],
                    "line": 175,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "stringLiteral",
                    "static": false,
                    "visibility": "private",
                    "signature": "stringLiteral(string $quote): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "quote",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 223
                },
                {
                    "routes": [],
                    "name": "identifier",
                    "static": false,
                    "visibility": "private",
                    "signature": "identifier(): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 225,
                    "end": 232
                },
                {
                    "routes": [],
                    "name": "skipSpace",
                    "static": false,
                    "visibility": "private",
                    "signature": "skipSpace(): void",
                    "doc": "Whitespace and comments, anywhere a token may follow.",
                    "shapes": [],
                    "params": [],
                    "line": 235,
                    "end": 252
                }
            ]
        },
        {
            "name": "Minn\\Theme\\Printed",
            "short": "Printed",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/Printed.php",
            "lines": 3,
            "doc": "Raised once a WordPress handler has printed a whole response (a sitemap,\na stylesheet) or sent a redirect, where the reference exits: the request\nends there and the engine answers with what was printed.",
            "implements": [
                "Throwable",
                "Stringable"
            ],
            "extends": "Exception",
            "uses": [],
            "usedBy": [
                "Minn\\Front\\FrontController",
                "Minn\\Front\\PrintedResponse",
                "Minn\\Front\\SitemapRequest",
                "Minn\\Theme\\MainQueryBridge"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": []
        },
        {
            "name": "Minn\\Theme\\QueryClasses",
            "short": "QueryClasses",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/QueryClasses.php",
            "lines": 128,
            "doc": "The body-class tokens the main query stands for, in the reference's\norder (captured from the oracles): the view tokens (home, blog,\nprivacy-policy, archive, date, search with its results token, paged,\nattachment, error404), then the singular's or the archive's own, then\nthe numbered paging tokens. Flags combine as the query's do: a search\ninside a category carries both sets. The bare paged token follows the\nlisting's page; the numbered ones follow a single's page too, and take\nthe view's prefix in one precedence (single, page, category, tag, date,\nauthor, search, post type; the front and a plain taxonomy have none).\nA 404 carries no paging tokens. The theme renderers seat the numbered\ntokens after the embed token and add the template and theme tokens.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostClasses",
                "Minn\\Content\\Posts",
                "Minn\\Db"
            ],
            "usedBy": [
                "Minn\\Front\\Renderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 25,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "of",
                    "static": false,
                    "visibility": "public",
                    "signature": "of(WP_Query $query): array",
                    "doc": "The tokens for a main query.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 35,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "format",
                    "static": false,
                    "visibility": "private",
                    "signature": "format(int $id): string",
                    "doc": "A post's format by its post_format term, standard without one (probe post-template-remaining).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 61,
                    "end": 65
                },
                {
                    "routes": [],
                    "name": "singular",
                    "static": false,
                    "visibility": "private",
                    "signature": "singular(WP_Post $post, WP_Query $query): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "post",
                            "type": "WP_Post",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 68,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "archive",
                    "static": true,
                    "visibility": "private",
                    "signature": "archive(WP_Query $query, mixed $object, int $id): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "object",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "paging",
                    "static": true,
                    "visibility": "private",
                    "signature": "paging(WP_Query $query): array",
                    "doc": "The numbered paging tokens: paged-N and the view's own.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "query",
                            "type": "WP_Query",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 124,
                    "end": 142
                },
                {
                    "routes": [],
                    "name": "named",
                    "static": true,
                    "visibility": "private",
                    "signature": "named(string $name, int $id): string",
                    "doc": "A name as a class token, its id when nothing of it survives.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 145,
                    "end": 149
                }
            ]
        },
        {
            "name": "Minn\\Theme\\SpacingScale",
            "short": "SpacingScale",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/SpacingScale.php",
            "lines": 48,
            "doc": "The spacing sizes a theme.json spacing scale makes (probe\ntheme-json-css): Medium (slug 50) at the medium step; below it, half the\nother steps rounded down, each divided by (or less) the increment, named\nSmall, X-Small, 2X-Small; above it the rest, multiplied by (or plus) it,\nnamed Large, X-Large, 2X-Large; slugs ten apart, values rounded to two\nplaces. An invalid scale makes none.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "sizes",
                    "static": true,
                    "visibility": "public",
                    "signature": "sizes(array $scale): array",
                    "doc": "The sizes the scale makes, smallest first.",
                    "shapes": [
                        "@param array<string, mixed> $scale operator, increment, steps, mediumStep, unit",
                        "@return list<array{name: string, slug: string, size: string}>"
                    ],
                    "params": [
                        {
                            "name": "scale",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "operator, increment, steps, mediumStep, unit"
                        }
                    ],
                    "line": 23,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "name",
                    "static": true,
                    "visibility": "private",
                    "signature": "name(int $distance, string $side): string",
                    "doc": "Small, X-Small, 2X-Small, and so on (Large likewise).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "distance",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "side",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 56
                },
                {
                    "routes": [],
                    "name": "format",
                    "static": true,
                    "visibility": "private",
                    "signature": "format(float $value, string $unit): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "unit",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 58,
                    "end": 61
                }
            ]
        },
        {
            "name": "Minn\\Theme\\StyleLayers",
            "short": "StyleLayers",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/StyleLayers.php",
            "lines": 67,
            "doc": "What plugins change about the global stylesheet's layers and nodes, for\nGlobalStyles: core's preset lists when wp_theme_json_data_default\nchanged core's layer, and the style nodes wp_theme_json_get_style_nodes\nkeeps (probe hook-inputs-2). Without those filters the stylesheet is the\nengine's own, byte for byte.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Json",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\ThemeJsonData"
            ],
            "usedBy": [
                "Minn\\Theme\\GlobalStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "corePresets",
                    "static": true,
                    "visibility": "public",
                    "signature": "corePresets(): array",
                    "doc": "Core's preset lists: as stored, unless a plugin changed core's layer\n(wp_theme_json_data_default), whose lists then stand in for them.",
                    "shapes": [
                        "@return array<string, list<array{slug: string, value: string}>>"
                    ],
                    "params": [],
                    "line": 25,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "keptBlocks",
                    "static": true,
                    "visibility": "public",
                    "signature": "keptBlocks(array $blocks, array $kept): array",
                    "doc": "The blocks' styles as far as the kept nodes reach: a block's own\ndeclarations with its node, each of its elements with that element's\nnode (the reference lists them apart); a block with neither goes.",
                    "shapes": [
                        "@param array<string, mixed> $blocks",
                        "@param list<string> $kept",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "blocks",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "kept",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 70
                },
                {
                    "routes": [],
                    "name": "keptNodes",
                    "static": true,
                    "visibility": "public",
                    "signature": "keptNodes(array $styles): ?array",
                    "doc": "The style nodes a plugin keeps (wp_theme_json_get_style_nodes) as\ntheir paths, the root, element and block nodes printed only when\nkept; null when no plugin filters them.",
                    "shapes": [
                        "@return list<string>|null"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 82
                }
            ]
        },
        {
            "name": "Minn\\Theme\\StylePresets",
            "short": "StylePresets",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/StylePresets.php",
            "lines": 148,
            "doc": "The preset side of theme.json: the colour, gradient, font-size,\nfont-family, spacing, and shadow lists a theme declares over core's\nown, as the custom properties on :root and the has-* utility classes\nthe reference prints for them. Pure: settings in, CSS fragments out.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\StyleEngine",
                "Minn\\Json",
                "Minn\\Theme\\Typography"
            ],
            "usedBy": [
                "Minn\\Theme\\FontFaces",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\TreeStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "presets",
                    "static": true,
                    "visibility": "public",
                    "signature": "presets(array $settings, ?array $core = NULL): array",
                    "doc": "Every preset list the theme declares, over core's own (as given, else data/presets.json), keyed by kind.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "core",
                            "type": "?array",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "presetList",
                    "static": true,
                    "visibility": "public",
                    "signature": "presetList(mixed $presets): array",
                    "doc": "A preset list as theme.json writes it is a plain list; as the site\neditor saves it, it is keyed by origin (default, theme, custom). The\nreference prints the origins in that order, so the two shapes flatten\nto one list here.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "presets",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "fontFamilies",
                    "static": true,
                    "visibility": "public",
                    "signature": "fontFamilies(array $settings): array",
                    "doc": "The font family presets in the settings.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 69,
                    "end": 72
                },
                {
                    "routes": [],
                    "name": "presetProperties",
                    "static": true,
                    "visibility": "public",
                    "signature": "presetProperties(array $presets): string",
                    "doc": "The presets as custom properties for :root.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "presets",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "customProperties",
                    "static": true,
                    "visibility": "public",
                    "signature": "customProperties(array $custom, string $prefix = '--wp--custom--'): string",
                    "doc": "A settings.custom tree as custom properties: --wp--custom-- and the path\nto each value, every key in kebab case, lists by index; empty values\nare left out.",
                    "shapes": [
                        "@param array<array-key, mixed> $custom"
                    ],
                    "params": [
                        {
                            "name": "custom",
                            "type": "array",
                            "shape": "array<array-key, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": "'--wp--custom--'",
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 105
                },
                {
                    "routes": [],
                    "name": "presetClasses",
                    "static": true,
                    "visibility": "public",
                    "signature": "presetClasses(array $presets, string $prefix = ''): string",
                    "doc": "The has-* utility classes the presets give every colour, gradient, font size, and font family; each under the prefix given (a block's :where(selector)).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "presets",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "defaultSlugsFirst",
                    "static": true,
                    "visibility": "public",
                    "signature": "defaultSlugsFirst(array $presets, array $defaults): array",
                    "doc": "A theme size that reuses one of core's slugs prints in core's position;\nthe theme's own slugs follow.",
                    "shapes": [
                        "@param list<array> $presets",
                        "@param list<string> $defaults",
                        "@return list<array>"
                    ],
                    "params": [
                        {
                            "name": "presets",
                            "type": "array",
                            "shape": "list<array>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "defaults",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 127,
                    "end": 137
                },
                {
                    "routes": [],
                    "name": "spacingPresets",
                    "static": true,
                    "visibility": "public",
                    "signature": "spacingPresets(array $defaults, array $own): array",
                    "doc": "The default spacing scale (20 to 80) is always present, whatever\ndefaultSpacingSizes says; a theme size with the same slug replaces the\ndefault in place, and the theme's other sizes follow the scale.",
                    "shapes": [
                        "@return list<array{slug: string, value: string}>"
                    ],
                    "params": [
                        {
                            "name": "defaults",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "own",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 146,
                    "end": 156
                },
                {
                    "routes": [],
                    "name": "fluidFontSize",
                    "static": true,
                    "visibility": "public",
                    "signature": "fluidFontSize(array $preset, array $settings): string",
                    "doc": "A font size preset as the global stylesheet writes it: fluid by the theme's settings (Typography::fontSize).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "preset",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 159,
                    "end": 162
                }
            ]
        },
        {
            "name": "Minn\\Theme\\StyleSettings",
            "short": "StyleSettings",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/StyleSettings.php",
            "lines": 88,
            "doc": "The settings and styles nodes as wp/v2/global-styles reports them:\npreset lists keyed by the origin that declared them, appearanceTools\nspelled out as the flags it stands for, and var:preset tokens resolved\nto the custom properties they name. Pure: a node in, a node out.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\ThemeStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "PRESET_PATHS",
                    "value": "array (   0 =>    array (     0 => 'color',     1 => 'palette',   ),   1 =>    array (     0 => 'color',     1 => 'gradients',   ),   2 =>    array (     0 => 'color',     1 => 'duotone',   ),   3 =>    array (     0 => 'typography',     1 => 'fontSizes',   ),   4 =>    array (     0 => 'typography',     1 => 'fontFamilies',   ),   5 =>    array (     0 => 'spacing',     1 => 'spacingSizes',   ),   6 =>    array (     0 => 'shadow',     1 => 'presets',   ),   7 =>    array (     0 => 'dimensions',     1 => 'aspectRatios',   ),   8 =>    array (     0 => 'dimensions',     1 => 'dimensionSizes',   ), )",
                    "doc": "Where a settings node keeps preset lists, at its root and under each block.",
                    "visibility": "private"
                },
                {
                    "name": "APPEARANCE_TOOLS",
                    "value": "array (   'background' =>    array (     0 => 'backgroundImage',     1 => 'backgroundSize',     2 => 'gradient',   ),   'border' =>    array (     0 => 'color',     1 => 'radius',     2 => 'style',     3 => 'width',   ),   'color' =>    array (     0 => 'link',     1 => 'heading',     2 => 'button',     3 => 'caption',   ),   'dimensions' =>    array (     0 => 'aspectRatio',     1 => 'height',     2 => 'minHeight',     3 => 'minWidth',     4 => 'width',   ),   'position' =>    array (     0 => 'sticky',   ),   'spacing' =>    array (     0 => 'blockGap',     1 => 'margin',     2 => 'padding',   ),   'typography' =>    array (     0 => 'lineHeight',     1 => 'textColumns',   ), )",
                    "doc": "What appearanceTools switches on, group by group in the order the\nreference appends the groups it has to add; a group already present\nkeeps its place and gains the flags at its end.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "normalize",
                    "static": true,
                    "visibility": "public",
                    "signature": "normalize(array $settings, string $origin): array",
                    "doc": "A settings node as written (theme.json, a variation, or the site\neditor's post) with its presets keyed by origin and appearanceTools\nexpanded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": "theme for a theme's file, custom for the site editor's"
                        }
                    ],
                    "line": 45,
                    "end": 48
                },
                {
                    "routes": [],
                    "name": "presetsByOrigin",
                    "static": true,
                    "visibility": "public",
                    "signature": "presetsByOrigin(array $settings, string $origin): array",
                    "doc": "The preset lists, at the root and under each block, keyed by the origin given; nothing else changed.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "resolved",
                    "static": true,
                    "visibility": "public",
                    "signature": "resolved(array $node): array",
                    "doc": "Every var:preset|kind|slug token replaced by the custom property it names.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 63,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "presetsUnder",
                    "static": true,
                    "visibility": "private",
                    "signature": "presetsUnder(array $node, string $origin): array",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "node",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 75,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "withAppearanceTools",
                    "static": true,
                    "visibility": "private",
                    "signature": "withAppearanceTools(array $settings): array",
                    "doc": "The flag itself goes; a flag the node already sets keeps its value.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 87,
                    "end": 99
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TemplateBuffer",
            "short": "TemplateBuffer",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/TemplateBuffer.php",
            "lines": 31,
            "doc": "The reference includes a front-end template inside the template-enhancement\nbuffer: wp_before_include_template fires with the template's file, its\ndefault callback opens the buffer when a plugin filters\nwp_template_enhancement_output_buffer, and that filter is handed the whole\npage. The engine builds the page as a string, so the string is passed\nthrough the same buffer: every buffer the action opened is closed in turn,\nits handler writing into the capture the page is read from.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Http\\Response"
            ],
            "usedBy": [
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "around",
                    "static": true,
                    "visibility": "public",
                    "signature": "around(string $template, callable $render): ?string",
                    "doc": "The page a render gives, as the buffers opened before it leave it; null\nwhen the render gives none. A render that fails leaves nothing behind.",
                    "shapes": [
                        "@param callable(): ?string $render"
                    ],
                    "params": [
                        {
                            "name": "template",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "render",
                            "type": "callable",
                            "shape": "callable(): ?string",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 26,
                    "end": 47
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TemplateHierarchy",
            "short": "TemplateHierarchy",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/TemplateHierarchy.php",
            "lines": 75,
            "doc": "The templates a block theme falls back through for a template slug, as\nget_template_hierarchy builds them (probe rest-templates-lookup): the\nslug itself, then its family's chain to index. A single entry's slug\nreaches single-{type} and single only when the type is registered (and\ngoes straight to singular when not); a taxonomy's reaches taxonomy-{tax}\nand taxonomy only when the taxonomy is; pages, categories, tags and\nauthors step through their bare name when the slug has more to it. A\nprefix names the next step outright. A custom template is a page's.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "for",
                    "static": true,
                    "visibility": "public",
                    "signature": "for(string $slug, bool $custom, string $prefix, array $types, array $taxonomies): array",
                    "doc": "A slug's fallback chain, most specific first, ending at index.",
                    "shapes": [
                        "@param list<string> $types the registered post types",
                        "@param list<string> $taxonomies the registered taxonomies",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "custom",
                            "type": "bool",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "prefix",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the registered post types"
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "the registered taxonomies"
                        }
                    ],
                    "line": 26,
                    "end": 36
                },
                {
                    "routes": [],
                    "name": "chain",
                    "static": true,
                    "visibility": "private",
                    "signature": "chain(string $slug, array $types, array $taxonomies): array",
                    "doc": "What follows a slug (or a prefix) down to index.",
                    "shapes": [
                        "@param list<string> $types",
                        "@param list<string> $taxonomies",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 45,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "single",
                    "static": true,
                    "visibility": "private",
                    "signature": "single(string $rest, array $types): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $types @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "rest",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 64,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "taxonomy",
                    "static": true,
                    "visibility": "private",
                    "signature": "taxonomy(string $rest, array $taxonomies): array",
                    "doc": "",
                    "shapes": [
                        "@param list<string> $taxonomies @return list<string>"
                    ],
                    "params": [
                        {
                            "name": "rest",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "taxonomies",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": "@return list<string>"
                        }
                    ],
                    "line": 74,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "registered",
                    "static": true,
                    "visibility": "private",
                    "signature": "registered(string $rest, array $names): ?string",
                    "doc": "The registered name a slug's remainder starts with (the whole of it, or before a hyphen), the longest first. @param list<string> $names",
                    "shapes": [
                        "@param list<string> $names"
                    ],
                    "params": [
                        {
                            "name": "rest",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "names",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 90
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TemplateIndex",
            "short": "TemplateIndex",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/TemplateIndex.php",
            "lines": 304,
            "doc": "Every block template and template part the site offers, in the order the\nreference lists them: the rows the site editor saved first (newest post\ndate first), then the theme's own files in the order the directory hands\nthem back, then whatever a plugin registered. A saved row shadows the\ntheme file of the same slug and reports has_theme_file so the file can\nbe restored by deleting the row.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Db",
                "Minn\\Json",
                "Minn\\Runtime\\BlockTemplates",
                "Minn\\Theme\\TemplatePartTheme",
                "Minn\\Theme\\TemplatePatterns",
                "Minn\\Theme\\TemplateRecord",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Rest\\Services",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Theme\\TemplateWriter"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Theme\\Theme $theme, Minn\\Content\\Site $site, ?Minn\\Runtime\\BlockTemplates $registered = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "theme",
                        "type": "Minn\\Theme\\Theme",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "registered",
                        "type": "?Minn\\Runtime\\BlockTemplates",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 34
            },
            "cases": [],
            "constants": [
                {
                    "name": "TEMPLATE",
                    "value": "'wp_template'",
                    "doc": "",
                    "visibility": "public"
                },
                {
                    "name": "PART",
                    "value": "'wp_template_part'",
                    "doc": "",
                    "visibility": "public"
                }
            ],
            "properties": [
                {
                    "name": "defaults",
                    "type": "?array",
                    "readonly": false,
                    "static": true,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "theme",
                    "type": "Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "registered",
                    "type": "?Minn\\Runtime\\BlockTemplates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "all",
                    "static": false,
                    "visibility": "public",
                    "signature": "all(string $type): array",
                    "doc": "Every template of a type: the theme's files with the saved rows over them.",
                    "shapes": [
                        "@return list<TemplateRecord>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(string $type, string $id): ?Minn\\Theme\\TemplateRecord",
                    "doc": "Null when the id names another theme, or a slug nothing provides.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 76
                },
                {
                    "routes": [],
                    "name": "postRecord",
                    "static": false,
                    "visibility": "public",
                    "signature": "postRecord(array $row): Minn\\Theme\\TemplateRecord",
                    "doc": "A saved wp_template or wp_template_part row as a template. @param array<string, mixed> $row",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 79,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "files",
                    "static": false,
                    "visibility": "public",
                    "signature": "files(string $type): array",
                    "doc": "The theme's files of a type, in the directory's order, each as\n_get_block_templates_files describes it (fileInfo).",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 90,
                    "end": 93
                },
                {
                    "routes": [],
                    "name": "fileInfo",
                    "static": false,
                    "visibility": "public",
                    "signature": "fileInfo(string $type, string $slug): ?array",
                    "doc": "One theme file: its slug, path, theme (the parent's for a file the\nchild does not have) and type; a part's title (when theme.json gives\none) and area; a custom template's title and post types. Null when\nthe theme has no such file.",
                    "shapes": [
                        "@return array<string, mixed>|null"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 123
                },
                {
                    "routes": [],
                    "name": "postTypes",
                    "static": false,
                    "visibility": "public",
                    "signature": "postTypes(string $slug): array",
                    "doc": "The post types a custom template declares; none for any other template.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 130,
                    "end": 133
                },
                {
                    "routes": [],
                    "name": "themeSlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "themeSlug(): string",
                    "doc": "The theme the index reads.",
                    "shapes": [],
                    "params": [],
                    "line": 136,
                    "end": 139
                },
                {
                    "routes": [],
                    "name": "hasFile",
                    "static": false,
                    "visibility": "public",
                    "signature": "hasFile(string $type, string $slug): bool",
                    "doc": "Whether the theme ships a file for a slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 142,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "authorText",
                    "static": false,
                    "visibility": "public",
                    "signature": "authorText(Minn\\Theme\\TemplateRecord $record): string",
                    "doc": "Who the caller is told made this: the theme's own name for anything\nthat has a file behind it, the plugin for a registered one, the\nauthor's display name for a row a person saved, and the site's name\nwhen nobody is recorded.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 153,
                    "end": 164
                },
                {
                    "routes": [],
                    "name": "originalSource",
                    "static": false,
                    "visibility": "public",
                    "signature": "originalSource(Minn\\Theme\\TemplateRecord $record): string",
                    "doc": "theme when a file backs it, plugin when one registered it, user when someone saved it, else site.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 167,
                    "end": 176
                },
                {
                    "routes": [],
                    "name": "isCustom",
                    "static": true,
                    "visibility": "public",
                    "signature": "isCustom(string $slug): bool",
                    "doc": "A slug the reference does not name in its default template types is a custom template.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 182
                },
                {
                    "routes": [],
                    "name": "defaults",
                    "static": true,
                    "visibility": "public",
                    "signature": "defaults(): array",
                    "doc": "The default template types.",
                    "shapes": [
                        "@return array<string, array{title: string, description: string}>"
                    ],
                    "params": [],
                    "line": 189,
                    "end": 192
                },
                {
                    "routes": [],
                    "name": "markup",
                    "static": false,
                    "visibility": "public",
                    "signature": "markup(string $content): string",
                    "doc": "Markup as a caller of the REST route sees it: patterns spliced in\nwhere the template only named them, then every template-part block\ntold which theme it belongs to. A record carries the markup as\nstored, because that is what get_block_templates() hands a plugin.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "content",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 200,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "savedRows",
                    "static": false,
                    "visibility": "private",
                    "signature": "savedRows(string $type): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 206,
                    "end": 218
                },
                {
                    "routes": [],
                    "name": "pluginRows",
                    "static": false,
                    "visibility": "private",
                    "signature": "pluginRows(string $type): array",
                    "doc": "",
                    "shapes": [
                        "@return list<array<string, mixed>>"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 221,
                    "end": 227
                },
                {
                    "routes": [],
                    "name": "fromRow",
                    "static": false,
                    "visibility": "private",
                    "signature": "fromRow(array $row, string $type): Minn\\Theme\\TemplateRecord",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 230,
                    "end": 254
                },
                {
                    "routes": [],
                    "name": "fromFile",
                    "static": false,
                    "visibility": "private",
                    "signature": "fromFile(string $slug, string $type): Minn\\Theme\\TemplateRecord",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 256,
                    "end": 275
                },
                {
                    "routes": [],
                    "name": "fromPlugin",
                    "static": false,
                    "visibility": "private",
                    "signature": "fromPlugin(array $row, string $type): Minn\\Theme\\TemplateRecord",
                    "doc": "",
                    "shapes": [
                        "@param array<string, mixed> $row"
                    ],
                    "params": [
                        {
                            "name": "row",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 278,
                    "end": 296
                },
                {
                    "routes": [],
                    "name": "fileTitle",
                    "static": false,
                    "visibility": "private",
                    "signature": "fileTitle(string $slug, string $type): string",
                    "doc": "A theme file's title: the default template types name the hierarchy\nslugs, theme.json names the rest, and a slug neither knows about is\nits own title, verbatim rather than prettified.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 303,
                    "end": 310
                },
                {
                    "routes": [],
                    "name": "savedArea",
                    "static": false,
                    "visibility": "private",
                    "signature": "savedArea(int $postId, string $slug): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 312,
                    "end": 322
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TemplatePartTheme",
            "short": "TemplatePartTheme",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/TemplatePartTheme.php",
            "lines": 45,
            "doc": "A template-part block inside a template says which theme's part it means.\nThe theme's own files usually leave that out, and the reference fills the\nactive theme in on the way out, for saved rows as much as for files. It\nappends the attribute and leaves every other byte of the markup alone.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Attributes",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Theme\\TemplateIndex"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TAG",
                    "value": "'<!-- wp:template-part'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "apply",
                    "static": true,
                    "visibility": "public",
                    "signature": "apply(string $markup, string $theme): string",
                    "doc": "Template part blocks with the theme attribute set.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "theme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 21,
                    "end": 39
                },
                {
                    "routes": [],
                    "name": "withTheme",
                    "static": true,
                    "visibility": "private",
                    "signature": "withTheme(string $attributes, string $theme): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "theme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "encode",
                    "static": true,
                    "visibility": "private",
                    "signature": "encode(string $theme): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "theme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 51,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "pair",
                    "static": true,
                    "visibility": "private",
                    "signature": "pair(string $theme): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "theme",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 59
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TemplatePatterns",
            "short": "TemplatePatterns",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/TemplatePatterns.php",
            "lines": 88,
            "doc": "A template can name a pattern instead of carrying its blocks, and the\nreference hands the caller the blocks: every \"wp:pattern\" delimiter is\nreplaced by the pattern's own markup before a template or part is\nserved. A slug the theme does not know stays exactly as it is, which is\nwhat tells an editor the pattern went missing rather than the block.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\Attributes",
                "Minn\\Blocks\\Block",
                "Minn\\Blocks\\Parser",
                "Minn\\Json",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Theme\\TemplateIndex"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "TAG",
                    "value": "'<!-- wp:pattern'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "DEPTH",
                    "value": "5",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "expand",
                    "static": true,
                    "visibility": "public",
                    "signature": "expand(string $markup, Minn\\Theme\\Theme $theme, int $depth = 0): string",
                    "doc": "Markup with its pattern blocks replaced by the patterns' content.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "theme",
                            "type": "Minn\\Theme\\Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "depth",
                            "type": "int",
                            "shape": "",
                            "default": "0",
                            "doc": ""
                        }
                    ],
                    "line": 25,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "closerAt",
                    "static": true,
                    "visibility": "private",
                    "signature": "closerAt(string $markup, int $at): ?int",
                    "doc": "The offset past a self-closing delimiter's \"/-->\", or null when it is not one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "at",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 50,
                    "end": 54
                },
                {
                    "routes": [],
                    "name": "pattern",
                    "static": true,
                    "visibility": "private",
                    "signature": "pattern(string $attributes, Minn\\Theme\\Theme $theme): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "attributes",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "theme",
                            "type": "Minn\\Theme\\Theme",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 67
                },
                {
                    "routes": [],
                    "name": "stamped",
                    "static": true,
                    "visibility": "private",
                    "signature": "stamped(string $markup, array $header): string",
                    "doc": "The pattern's own name rides on the block it opens, so an editor can\nstill see which pattern a stretch of blocks came from. Only a pattern\nthat IS one block gets the stamp: several blocks have no single\nwrapper to carry the name, and the reference leaves those anonymous.\nThe stamp goes on the pattern's raw markup, before any pattern nested\ninside it is spliced in, so when that one block is itself a pattern\nreference the stamp goes away with it.",
                    "shapes": [
                        "@param array<string, mixed> $header"
                    ],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "header",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 80,
                    "end": 96
                },
                {
                    "routes": [],
                    "name": "isOneBlock",
                    "static": true,
                    "visibility": "private",
                    "signature": "isOneBlock(string $markup): bool",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "markup",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 98,
                    "end": 105
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TemplateRecord",
            "short": "TemplateRecord",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/TemplateRecord.php",
            "lines": 34,
            "doc": "One block template or template part, whatever it came from: a theme\nfile, a row the site editor saved, or a template a plugin registered.\nThe id every caller uses is \"<theme>//<slug>\" in all three cases.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Rest\\Api",
                "Minn\\Rest\\TemplateObject",
                "Minn\\Rest\\TemplatesController",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplateWriter"
            ],
            "constructor": {
                "signature": "__construct(string $theme, string $slug, string $type, string $content, string $title, string $description, string $source, ?string $origin, bool $hasThemeFile, int $author, ?string $modified, ?string $date, int $wpId, string $status = 'publish', ?string $area = NULL, ?string $plugin = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "theme",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "slug",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "type",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "content",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "title",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "description",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "source",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "origin",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "hasThemeFile",
                        "type": "bool",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "author",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "modified",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "date",
                        "type": "?string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "wpId",
                        "type": "int",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "status",
                        "type": "string",
                        "shape": "",
                        "default": "'publish'",
                        "doc": ""
                    },
                    {
                        "name": "area",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    },
                    {
                        "name": "plugin",
                        "type": "?string",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 14,
                "end": 32
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "theme",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "slug",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "type",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "content",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "title",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "description",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "source",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "origin",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "hasThemeFile",
                    "type": "bool",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "author",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "modified",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "date",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "wpId",
                    "type": "int",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "status",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "area",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "plugin",
                    "type": "?string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "id",
                    "static": false,
                    "visibility": "public",
                    "signature": "id(): string",
                    "doc": "The reference's template id: theme//slug.",
                    "shapes": [],
                    "params": [],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "isPart",
                    "static": false,
                    "visibility": "public",
                    "signature": "isPart(): bool",
                    "doc": "Whether this is a template part.",
                    "shapes": [],
                    "params": [],
                    "line": 41,
                    "end": 44
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TemplateWriter",
            "short": "TemplateWriter",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/TemplateWriter.php",
            "lines": 116,
            "doc": "Saving and removing block templates. A template the theme ships is never\ntouched on disk: editing one writes a wp_template row that shadows the\nfile, and deleting that row is what \"reset to the theme version\" means.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Site",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplateRecord"
            ],
            "usedBy": [
                "Minn\\Rest\\Services",
                "Minn\\Rest\\TemplatesController"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\PostWriter $writer, Minn\\Content\\Terms $terms, Minn\\Content\\Site $site, Minn\\Theme\\TemplateIndex $index)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writer",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "index",
                        "type": "Minn\\Theme\\TemplateIndex",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 19,
                "end": 26
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writer",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "index",
                    "type": "Minn\\Theme\\TemplateIndex",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "save",
                    "static": false,
                    "visibility": "public",
                    "signature": "save(Minn\\Theme\\TemplateRecord $record, array $fields, int $authorId): int",
                    "doc": "Writes the site's own copy of a template, creating the row the first\ntime. Returns the post id.",
                    "shapes": [
                        "@param array{title?: string, content?: string, description?: string, area?: string} $fields"
                    ],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array{title?: string, content?: string, description?: string, area?: string}",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authorId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "create",
                    "static": false,
                    "visibility": "public",
                    "signature": "create(Minn\\Theme\\TemplateRecord $record, array $fields, int $authorId): int",
                    "doc": "A new site copy from the collection's create: as a save inserts one,\nbut recording no origin, even over a theme file (probe\nrest-template-create).",
                    "shapes": [
                        "@param array<string, string> $fields"
                    ],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authorId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "trash",
                    "static": false,
                    "visibility": "public",
                    "signature": "trash(Minn\\Theme\\TemplateRecord $record): void",
                    "doc": "Moves a site copy to the trash, which hands the theme's file back.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 103,
                    "end": 106
                },
                {
                    "routes": [],
                    "name": "destroy",
                    "static": false,
                    "visibility": "public",
                    "signature": "destroy(Minn\\Theme\\TemplateRecord $record): void",
                    "doc": "Deletes a saved template row.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 109,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "insert",
                    "static": false,
                    "visibility": "private",
                    "signature": "insert(Minn\\Theme\\TemplateRecord $record, array $fields, int $authorId): int",
                    "doc": "The site copy's row, its theme term and its area.",
                    "shapes": [
                        "@param array<string, string> $fields"
                    ],
                    "params": [
                        {
                            "name": "record",
                            "type": "Minn\\Theme\\TemplateRecord",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "fields",
                            "type": "array",
                            "shape": "array<string, string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "authorId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "setArea",
                    "static": false,
                    "visibility": "private",
                    "signature": "setArea(int $postId, ?string $area, string $type): void",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "postId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "area",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 114,
                    "end": 122
                },
                {
                    "routes": [],
                    "name": "themeTermId",
                    "static": false,
                    "visibility": "private",
                    "signature": "themeTermId(): int",
                    "doc": "",
                    "shapes": [],
                    "params": [],
                    "line": 124,
                    "end": 131
                }
            ]
        },
        {
            "name": "Minn\\Theme\\Templates",
            "short": "Templates",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/Templates.php",
            "lines": 204,
            "doc": "Which template renders a resolution, and where its markup comes from:\na wp_template post saved from the site editor (matched by slug and the\ntheme term) wins over the theme's file. Parts resolve the same way\nthrough wp_template_part.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Posts",
                "Minn\\Content\\RowCache",
                "Minn\\Db",
                "Minn\\Front\\Kind",
                "Minn\\Front\\Resolution",
                "Minn\\Json",
                "Minn\\Runtime\\BlockTemplates",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\Theme"
            ],
            "usedBy": [
                "Minn\\Admin\\RenderController",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Renderer",
                "Minn\\Theme\\PageRenderer"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Theme\\Theme $theme, ?Minn\\Runtime\\BlockTemplates $registered = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "theme",
                        "type": "Minn\\Theme\\Theme",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "registered",
                        "type": "?Minn\\Runtime\\BlockTemplates",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 30
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "theme",
                    "type": "Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "registered",
                    "type": "?Minn\\Runtime\\BlockTemplates",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "forResolution",
                    "static": false,
                    "visibility": "public",
                    "signature": "forResolution(Minn\\Front\\Resolution $resolution): ?array",
                    "doc": "The template that renders a resolution, or null.",
                    "shapes": [
                        "@return array{slug: string, markup: string}|null"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "template",
                    "static": false,
                    "visibility": "public",
                    "signature": "template(string $slug): ?string",
                    "doc": "A template's markup by slug, saved first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 52
                },
                {
                    "routes": [],
                    "name": "part",
                    "static": false,
                    "visibility": "public",
                    "signature": "part(string $slug): ?string",
                    "doc": "A template part's markup by slug, saved first.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 55,
                    "end": 58
                },
                {
                    "routes": [],
                    "name": "partSource",
                    "static": false,
                    "visibility": "public",
                    "signature": "partSource(string $slug): array",
                    "doc": "Where a template part comes from: a part saved for the theme (its\npost id), the theme's file (its path), or nowhere; with its markup.",
                    "shapes": [
                        "@return array{0: 'post'|'file'|'none', 1: int|string, 2: ?string}"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 66,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "candidates",
                    "static": false,
                    "visibility": "public",
                    "signature": "candidates(Minn\\Front\\Resolution $resolution): array",
                    "doc": "The block-theme template hierarchy for each kind of resolution.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 81,
                    "end": 84
                },
                {
                    "routes": [],
                    "name": "userStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "userStyles(): ?array",
                    "doc": "The site editor's saved global styles for the active theme, when any.\nAn emptied node is stored as [] and reads as nothing, the way the\nreference reads it; a list where a map belongs is dropped the same way.",
                    "shapes": [],
                    "params": [],
                    "line": 157,
                    "end": 165
                },
                {
                    "routes": [],
                    "name": "customTemplate",
                    "static": false,
                    "visibility": "public",
                    "signature": "customTemplate(int $pageId): ?string",
                    "doc": "A page's chosen custom template, from _wp_page_template meta.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "pageId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 193,
                    "end": 200
                },
                {
                    "routes": [],
                    "name": "filtered",
                    "static": false,
                    "visibility": "private",
                    "signature": "filtered(Minn\\Front\\Resolution $resolution, array $slugs): array",
                    "doc": "Plugins reshape the hierarchy through the reference's\n\"{type}_template_hierarchy\" filters (WooCommerce sends its taxonomies to\narchive-product that way); the filter sees PHP file names and hands\nback the same, which become slugs again.",
                    "shapes": [
                        "@param list<string> $slugs",
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slugs",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 95,
                    "end": 116
                },
                {
                    "routes": [],
                    "name": "hierarchy",
                    "static": false,
                    "visibility": "private",
                    "signature": "hierarchy(Minn\\Front\\Resolution $resolution): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "resolution",
                            "type": "Minn\\Front\\Resolution",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 119,
                    "end": 150
                },
                {
                    "routes": [],
                    "name": "savedOfTheme",
                    "static": false,
                    "visibility": "private",
                    "signature": "savedOfTheme(): array",
                    "doc": "Every published template, part and global styles post saved for the\ntheme, newest first by type: read in one query once a request.",
                    "shapes": [
                        "@return array<string, list<array<string, mixed>>>"
                    ],
                    "params": [],
                    "line": 173,
                    "end": 190
                },
                {
                    "routes": [],
                    "name": "saved",
                    "static": false,
                    "visibility": "private",
                    "signature": "saved(string $type, ?string $slug): ?string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 202,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "savedRow",
                    "static": false,
                    "visibility": "private",
                    "signature": "savedRow(string $type, ?string $slug): ?array",
                    "doc": "The newest published template of a type (and slug) saved for the\ntheme. Every saved one of the type is read once a request, newest\nfirst, so a template's candidates and its parts cost one query.",
                    "shapes": [
                        "@return array{ID: int|string, post_content: string}|null"
                    ],
                    "params": [
                        {
                            "name": "type",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "slug",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 215,
                    "end": 224
                }
            ]
        },
        {
            "name": "Minn\\Theme\\Theme",
            "short": "Theme",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/Theme.php",
            "lines": 347,
            "doc": "The active block theme on disk, read as data: theme.json, the templates\nand parts directories, and the patterns index. A child theme's files\nwin and its parent fills in what the child does not define; theme.json\nmerges the same way, with the child's preset lists replacing the\nparent's whole. The engine reads the site's installed theme the way it\nreads the site's database; it never runs the theme's PHP.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Front\\Permalinks",
                "Minn\\Json",
                "Minn\\Runtime\\Runtime",
                "Minn\\Theme\\PatternText",
                "Minn\\Theme\\ThemeJsonData"
            ],
            "usedBy": [
                "Minn\\Admin\\RenderController",
                "Minn\\Admin\\SiteController",
                "Minn\\Blocks\\Dynamic\\Theme\\Structure",
                "Minn\\Blocks\\Renderer",
                "Minn\\Cli\\Runtime",
                "Minn\\Engine",
                "Minn\\Rest\\Services",
                "Minn\\Theme\\ClassicRenderer",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\PageRenderer",
                "Minn\\Theme\\TemplateIndex",
                "Minn\\Theme\\TemplatePatterns",
                "Minn\\Theme\\Templates",
                "Minn\\Theme\\ThemeStyles"
            ],
            "constructor": {
                "signature": "__construct(string $slug, string $dir, string $uri, ?Minn\\Theme\\Theme $parent = NULL)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "slug",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "dir",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "uri",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "parent",
                        "type": "?Minn\\Theme\\Theme",
                        "shape": "",
                        "default": "NULL",
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 28,
                "end": 34
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "json",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "patterns",
                    "type": "?array",
                    "readonly": false,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": false
                },
                {
                    "name": "slug",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "dir",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "uri",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "parent",
                    "type": "?Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "active",
                    "static": true,
                    "visibility": "public",
                    "signature": "active(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, string $themesDir): ?self",
                    "doc": "The active block theme, or null under a classic one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themesDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 37,
                    "end": 47
                },
                {
                    "routes": [],
                    "name": "forStyles",
                    "static": true,
                    "visibility": "public",
                    "signature": "forStyles(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, string $themesDir): ?self",
                    "doc": "The active theme as styling data (theme.json present), whether or not\nit is a block theme; the classic renderer prints its presets where the\nreference prints a classic theme's global styles.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themesDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 54,
                    "end": 60
                },
                {
                    "routes": [],
                    "name": "parentSlug",
                    "static": false,
                    "visibility": "public",
                    "signature": "parentSlug(): ?string",
                    "doc": "The theme's own name, and the parent's, for body classes.",
                    "shapes": [],
                    "params": [],
                    "line": 71,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "json",
                    "static": false,
                    "visibility": "public",
                    "signature": "json(): array",
                    "doc": "The theme.json with the parent's merged in; with plugins loaded, through wp_theme_json_data_theme.",
                    "shapes": [],
                    "params": [],
                    "line": 77,
                    "end": 80
                },
                {
                    "routes": [],
                    "name": "styleFiles",
                    "static": false,
                    "visibility": "public",
                    "signature": "styleFiles(): array",
                    "doc": "Every JSON file under styles/, the parent theme's first and each\ntheme's in path order: block style partials and style variations alike.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [],
                    "line": 125,
                    "end": 132
                },
                {
                    "routes": [],
                    "name": "merge",
                    "static": true,
                    "visibility": "public",
                    "signature": "merge(array $base, array $over): array",
                    "doc": "Layered theme.json: maps merge key by key, lists (palettes, font\nsizes, template parts) replace as a whole.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "base",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "over",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 154,
                    "end": 163
                },
                {
                    "routes": [],
                    "name": "templateFile",
                    "static": false,
                    "visibility": "public",
                    "signature": "templateFile(string $slug): ?string",
                    "doc": "A template file's markup, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 172,
                    "end": 176
                },
                {
                    "routes": [],
                    "name": "templatePath",
                    "static": false,
                    "visibility": "public",
                    "signature": "templatePath(string $slug): ?string",
                    "doc": "The file a template is read from: this theme's, else its parent's; null when neither has one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 179,
                    "end": 186
                },
                {
                    "routes": [],
                    "name": "partFile",
                    "static": false,
                    "visibility": "public",
                    "signature": "partFile(string $slug): ?string",
                    "doc": "A template part file's markup, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 189,
                    "end": 193
                },
                {
                    "routes": [],
                    "name": "partPath",
                    "static": false,
                    "visibility": "public",
                    "signature": "partPath(string $slug): ?string",
                    "doc": "The file a template part is read from: this theme's, else its parent's; null when neither has one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 196,
                    "end": 203
                },
                {
                    "routes": [],
                    "name": "name",
                    "static": false,
                    "visibility": "public",
                    "signature": "name(): string",
                    "doc": "The theme's display name, as the stylesheet header states it; a child\ntheme answers with its own. Falls back to theme.json's title, then the\nfolder name.",
                    "shapes": [],
                    "params": [],
                    "line": 210,
                    "end": 219
                },
                {
                    "routes": [],
                    "name": "fileSlugs",
                    "static": false,
                    "visibility": "public",
                    "signature": "fileSlugs(string $folder): array",
                    "doc": "Every template (or part) slug the theme offers, the child's files\nfirst and the parent's after, each in the order the directory hands\nthem back: the reference walks these directories unsorted and its\ntemplate list carries that order through.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "folder",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 229,
                    "end": 240
                },
                {
                    "routes": [],
                    "name": "customTemplate",
                    "static": false,
                    "visibility": "public",
                    "signature": "customTemplate(string $slug): ?array",
                    "doc": "A template title and description the theme declares for a custom template slug.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 255,
                    "end": 263
                },
                {
                    "routes": [],
                    "name": "partTitle",
                    "static": false,
                    "visibility": "public",
                    "signature": "partTitle(string $slug): ?string",
                    "doc": "The title theme.json gives a template part, when it names one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 266,
                    "end": 274
                },
                {
                    "routes": [],
                    "name": "partArea",
                    "static": false,
                    "visibility": "public",
                    "signature": "partArea(string $slug): string",
                    "doc": "The template-part area declared in theme.json (header, footer, or uncategorized).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 277,
                    "end": 285
                },
                {
                    "routes": [],
                    "name": "pattern",
                    "static": false,
                    "visibility": "public",
                    "signature": "pattern(string $slug): ?string",
                    "doc": "A pattern's markup, with its PHP text subset interpreted; null when unknown.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 288,
                    "end": 295
                },
                {
                    "routes": [],
                    "name": "patternMeta",
                    "static": false,
                    "visibility": "public",
                    "signature": "patternMeta(string $slug): array",
                    "doc": "A pattern's declared Block Types and Categories, the header fields a\nplugin reads to tell (say) a header pattern from any other.",
                    "shapes": [
                        "@return array{blockTypes: list<string>, categories: list<string>}"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 303,
                    "end": 317
                },
                {
                    "routes": [],
                    "name": "patternHeader",
                    "static": false,
                    "visibility": "public",
                    "signature": "patternHeader(string $slug): ?array",
                    "doc": "The header fields a pattern declares, as the metadata attribute the\nreference writes onto the pattern's first block when it splices the\npattern into a template. A field the header omits is omitted here.",
                    "shapes": [
                        "@return array{patternName: string, name: string, description?: string, categories?: list<string>}|null"
                    ],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 326,
                    "end": 346
                },
                {
                    "routes": [],
                    "name": "styleUri",
                    "static": false,
                    "visibility": "public",
                    "signature": "styleUri(): ?string",
                    "doc": "The theme's stylesheet URL when it ships one; a child's own, else nothing (the parent's is not enqueued for it).",
                    "shapes": [],
                    "params": [],
                    "line": 349,
                    "end": 352
                },
                {
                    "routes": [],
                    "name": "at",
                    "static": true,
                    "visibility": "private",
                    "signature": "at(string $slug, string $themesDir, Minn\\Front\\Permalinks $permalinks, ?Minn\\Theme\\Theme $parent = NULL): ?self",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themesDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "parent",
                            "type": "?Minn\\Theme\\Theme",
                            "shape": "",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 62,
                    "end": 68
                },
                {
                    "routes": [],
                    "name": "rawJson",
                    "static": false,
                    "visibility": "private",
                    "signature": "rawJson(): array",
                    "doc": "The theme.json as written, the parent's merged in.",
                    "shapes": [],
                    "params": [],
                    "line": 83,
                    "end": 91
                },
                {
                    "routes": [],
                    "name": "withStylePartials",
                    "static": false,
                    "visibility": "private",
                    "signature": "withStylePartials(array $json): array",
                    "doc": "A theme's styles/ folder can hold block style variations: a JSON file\nwith blockTypes and a slug (else the file name) whose styles become\nstyles.blocks.{type}.variations.{slug} for each named block type. The\nparent's partials load first, the child's over them.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "json",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 99,
                    "end": 117
                },
                {
                    "routes": [],
                    "name": "partialFiles",
                    "static": true,
                    "visibility": "private",
                    "signature": "partialFiles(string $dir): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 135,
                    "end": 148
                },
                {
                    "routes": [],
                    "name": "safe",
                    "static": true,
                    "visibility": "private",
                    "signature": "safe(string $slug): bool",
                    "doc": "A template or part name is a file name, never a path.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "slug",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 166,
                    "end": 169
                },
                {
                    "routes": [],
                    "name": "htmlFiles",
                    "static": true,
                    "visibility": "private",
                    "signature": "htmlFiles(string $dir): array",
                    "doc": "",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 243,
                    "end": 252
                },
                {
                    "routes": [],
                    "name": "patternIndex",
                    "static": false,
                    "visibility": "private",
                    "signature": "patternIndex(): array",
                    "doc": "",
                    "shapes": [
                        "@return array<string, string>"
                    ],
                    "params": [],
                    "line": 355,
                    "end": 367
                }
            ]
        },
        {
            "name": "Minn\\Theme\\ThemeJsonData",
            "short": "ThemeJsonData",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/ThemeJsonData.php",
            "lines": 82,
            "doc": "The theme's theme.json as plugins and the theme's own functions may\nchange it (wp_theme_json_data_theme, a WP_Theme_JSON_Data they update\nwith presets and settings of their own), as the reference's resolver\nhands it to them, and the core and site editor layers likewise\n(wp_theme_json_data_default, wp_theme_json_data_user). Worked out once\na request for each set of callbacks, so a filter added late still counts.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Runtime\\Runtime"
            ],
            "usedBy": [
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\StyleLayers",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "theme",
                    "static": true,
                    "visibility": "public",
                    "signature": "theme(array $json, string $dir): array",
                    "doc": "The theme layer through wp_theme_json_data_theme; as written when nothing filters it. @param array<string, mixed> $json",
                    "shapes": [
                        "@param array<string, mixed> $json"
                    ],
                    "params": [
                        {
                            "name": "json",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "dir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 20,
                    "end": 35
                },
                {
                    "routes": [],
                    "name": "layer",
                    "static": true,
                    "visibility": "public",
                    "signature": "layer(string $origin, array $json): array",
                    "doc": "The core layer (wp_theme_json_data_default, origin default) or the\nsite editor's (wp_theme_json_data_user, origin custom) as plugins\nleave it, each a WP_Theme_JSON_Data they update; as given when\nnothing filters it. Worked out once a request for each set of\ncallbacks and layer.",
                    "shapes": [
                        "@param array<string, mixed> $json",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "origin",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "json",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 47,
                    "end": 63
                },
                {
                    "routes": [],
                    "name": "asWritten",
                    "static": true,
                    "visibility": "private",
                    "signature": "asWritten(array $raw): array",
                    "doc": "The filtered layer back in theme.json's own shape: each preset (and\nthe spacing scale) the theme's list again, everything else in the\norder it came, as the reference's resolver keeps the layer's object.",
                    "shapes": [
                        "@param array<string, mixed> $raw",
                        "@return array<string, mixed>"
                    ],
                    "params": [
                        {
                            "name": "raw",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 73,
                    "end": 97
                }
            ]
        },
        {
            "name": "Minn\\Theme\\ThemeStyles",
            "short": "ThemeStyles",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/ThemeStyles.php",
            "lines": 142,
            "doc": "The active theme's global styles as wp/v2/global-styles/themes/{stylesheet}\nreports them: the engine's defaults (captured from the reference under a\ntheme with no theme.json) with the theme's own settings and styles over\nthem, and the style variations the theme ships.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\Site",
                "Minn\\Front\\Permalinks",
                "Minn\\Json",
                "Minn\\Theme\\StyleSettings",
                "Minn\\Theme\\Theme",
                "Minn\\Theme\\ThemeJsonData"
            ],
            "usedBy": [
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(?Minn\\Theme\\Theme $theme, string $stylesheet, ?array $core = NULL)",
                "doc": "",
                "shapes": [
                    "@param array{settings?: array, styles?: array}|null $core core's layer when not the stored one (a plugin changed it)"
                ],
                "params": [
                    {
                        "name": "theme",
                        "type": "?Minn\\Theme\\Theme",
                        "shape": "Theme|null",
                        "default": null,
                        "doc": "null under a theme without theme.json: the defaults alone"
                    },
                    {
                        "name": "stylesheet",
                        "type": "string",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "core",
                        "type": "?array",
                        "shape": "array{settings?: array, styles?: array}|null",
                        "default": "NULL",
                        "doc": "core's layer when not the stored one (a plugin changed it)"
                    }
                ],
                "visibility": "public",
                "line": 23,
                "end": 28
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "theme",
                    "type": "?Minn\\Theme\\Theme",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "stylesheet",
                    "type": "string",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "public",
                    "promoted": true
                },
                {
                    "name": "core",
                    "type": "?array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "withFilteredCore",
                    "static": false,
                    "visibility": "public",
                    "signature": "withFilteredCore(): self",
                    "doc": "The same styling data over core's layer as wp_theme_json_data_default\nleaves it, for the places the reference reads core's layer through\nthat filter (its resolver's core and merged data).",
                    "shapes": [],
                    "params": [],
                    "line": 35,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "forSite",
                    "static": true,
                    "visibility": "public",
                    "signature": "forSite(Minn\\Content\\Site $site, Minn\\Front\\Permalinks $permalinks, string $themesDir): self",
                    "doc": "The site's active theme as styling data, whether or not it is a block theme.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "site",
                            "type": "Minn\\Content\\Site",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "permalinks",
                            "type": "Minn\\Front\\Permalinks",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "themesDir",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "settings",
                    "static": false,
                    "visibility": "public",
                    "signature": "settings(): array",
                    "doc": "Settings: presets by origin, appearanceTools expanded, the defaults underneath.",
                    "shapes": [],
                    "params": [],
                    "line": 47,
                    "end": 57
                },
                {
                    "routes": [],
                    "name": "patterns",
                    "static": false,
                    "visibility": "public",
                    "signature": "patterns(): array",
                    "doc": "The pattern directory slugs the theme.json lists (its patterns), as given; [] when it lists none. @return array<mixed>",
                    "shapes": [
                        "@return array<mixed>"
                    ],
                    "params": [],
                    "line": 60,
                    "end": 64
                },
                {
                    "routes": [],
                    "name": "styles",
                    "static": false,
                    "visibility": "public",
                    "signature": "styles(): array",
                    "doc": "Styles: the theme's over the defaults, block style partials and section styles in, every var:preset token resolved.",
                    "shapes": [],
                    "params": [],
                    "line": 67,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "variations",
                    "static": false,
                    "visibility": "public",
                    "signature": "variations(): array",
                    "doc": "The style variations under styles/: every JSON file there that names\nno blockTypes (those are block style partials), the parent theme's\nfirst, in path order, $schema dropped and the nodes normalized the\nway the theme's own are.",
                    "shapes": [
                        "@return list<array>"
                    ],
                    "params": [],
                    "line": 84,
                    "end": 103
                },
                {
                    "routes": [],
                    "name": "withSectionStyles",
                    "static": false,
                    "visibility": "private",
                    "signature": "withSectionStyles(array $styles, array $partials): array",
                    "doc": "A root styles.variations node names section styles by the slug of\nthe block style partial that declares them; each lands under every\nblock type that partial names, the blocks it has to add in name\norder, and the root node goes.",
                    "shapes": [
                        "@param array<string, list<string>> $partials slug => block types"
                    ],
                    "params": [
                        {
                            "name": "styles",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "partials",
                            "type": "array",
                            "shape": "array<string, list<string>>",
                            "default": null,
                            "doc": "slug => block types"
                        }
                    ],
                    "line": 113,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "partials",
                    "static": false,
                    "visibility": "private",
                    "signature": "partials(): array",
                    "doc": "The block style partials under styles/: slug => the block types each names.",
                    "shapes": [
                        "@return array<string, list<string>>"
                    ],
                    "params": [],
                    "line": 135,
                    "end": 145
                },
                {
                    "routes": [],
                    "name": "defaults",
                    "static": false,
                    "visibility": "private",
                    "signature": "defaults(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{settings?: array, styles?: array} core's layer: the one given, else the stored one"
                    ],
                    "params": [],
                    "line": 148,
                    "end": 151
                },
                {
                    "routes": [],
                    "name": "storedCore",
                    "static": true,
                    "visibility": "private",
                    "signature": "storedCore(): array",
                    "doc": "",
                    "shapes": [
                        "@return array{settings: array, styles: array} core's own layer as stored"
                    ],
                    "params": [],
                    "line": 154,
                    "end": 157
                }
            ]
        },
        {
            "name": "Minn\\Theme\\TreeStyles",
            "short": "TreeStyles",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/TreeStyles.php",
            "lines": 259,
            "doc": "The CSS one theme.json tree writes, as WP_Theme_JSON keeps the tree\n(presets keyed by origin): its custom properties, its preset classes, its\nstyles (the root layout, the root, elements, blocks) and its own CSS, by\ntype, origin and option (probe theme-json-css). The rules are\nGlobalStyles'; what the page's writer takes for granted is read from the\ntree instead: block gaps only when the tree turns them on, the root padding\nonly on the sides it gives, and none of the engine's own defaults.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Blocks\\CoreBlocks",
                "Minn\\Blocks\\Styles",
                "Minn\\Theme\\CustomCss",
                "Minn\\Theme\\GlobalStyles",
                "Minn\\Theme\\StylePresets",
                "Minn\\Theme\\Typography"
            ],
            "usedBy": [],
            "constructor": {
                "signature": "__construct(array $tree)",
                "doc": "",
                "shapes": [
                    "@param array<string, mixed> $tree"
                ],
                "params": [
                    {
                        "name": "tree",
                        "type": "array",
                        "shape": "array<string, mixed>",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 36,
                "end": 38
            },
            "cases": [],
            "constants": [
                {
                    "name": "ORIGINS",
                    "value": "array (   0 => 'default',   1 => 'blocks',   2 => 'theme',   3 => 'custom', )",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "KINDS",
                    "value": "array (   'aspect-ratio' =>    array (     0 =>      array (       0 => 'dimensions',       1 => 'aspectRatios',     ),     1 => 'ratio',   ),   'color' =>    array (     0 =>      array (       0 => 'color',       1 => 'palette',     ),     1 => 'color',   ),   'gradient' =>    array (     0 =>      array (       0 => 'color',       1 => 'gradients',     ),     1 => 'gradient',   ),   'font-size' =>    array (     0 =>      array (       0 => 'typography',       1 => 'fontSizes',     ),     1 => 'size',   ),   'font-family' =>    array (     0 =>      array (       0 => 'typography',       1 => 'fontFamilies',     ),     1 => 'fontFamily',   ),   'spacing' =>    array (     0 =>      array (       0 => 'spacing',       1 => 'spacingSizes',     ),     1 => 'size',   ),   'shadow' =>    array (     0 =>      array (       0 => 'shadow',       1 => 'presets',     ),     1 => 'shadow',   ),   'border-radius' =>    array (     0 =>      array (       0 => 'border',       1 => 'radiusSizes',     ),     1 => 'size',   ),   'dimension' =>    array (     0 =>      array (       0 => 'dimensions',       1 => 'dimensionSizes',     ),     1 => 'size',   ), )",
                    "doc": "Preset kinds in the order they print: where each sits under settings, and the key holding its value.",
                    "visibility": "private"
                }
            ],
            "properties": [
                {
                    "name": "tree",
                    "type": "array",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "stylesheet",
                    "static": false,
                    "visibility": "public",
                    "signature": "stylesheet(array $types, array $origins, array $options): string",
                    "doc": "The stylesheet for the types asked for, in the order variables,\nstyles, presets, the tree's own CSS; origins narrow the presets.",
                    "shapes": [
                        "@param list<string> $types",
                        "@param list<string> $origins",
                        "@param array<string, mixed> $options root_selector, scope, skip_root_layout_styles"
                    ],
                    "params": [
                        {
                            "name": "types",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origins",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "root_selector, scope, skip_root_layout_styles"
                        }
                    ],
                    "line": 48,
                    "end": 59
                },
                {
                    "routes": [],
                    "name": "variables",
                    "static": false,
                    "visibility": "public",
                    "signature": "variables(array $origins, string $scope): string",
                    "doc": "The presets and settings.custom as custom properties: on :root, then\non each block's settings selector that has its own.",
                    "shapes": [
                        "@param list<string> $origins"
                    ],
                    "params": [
                        {
                            "name": "origins",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scope",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 67,
                    "end": 74
                },
                {
                    "routes": [],
                    "name": "variablesOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "variablesOf(array $settings, array $origins, string $selector): string",
                    "doc": "One settings node's custom properties under its selector; nothing when it has none.",
                    "shapes": [
                        "@param array<string, mixed> $settings",
                        "@param list<string> $origins"
                    ],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origins",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 82,
                    "end": 86
                },
                {
                    "routes": [],
                    "name": "presetClasses",
                    "static": false,
                    "visibility": "public",
                    "signature": "presetClasses(array $origins, string $scope): string",
                    "doc": "The has-* classes: the root's bare, each block's under :where(its settings selector).",
                    "shapes": [
                        "@param list<string> $origins"
                    ],
                    "params": [
                        {
                            "name": "origins",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scope",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 93,
                    "end": 100
                },
                {
                    "routes": [],
                    "name": "classesOf",
                    "static": false,
                    "visibility": "public",
                    "signature": "classesOf(array $settings, array $origins, string $selector): string",
                    "doc": "One settings node's has-* classes, under :where(selector) unless it is the bare :root.",
                    "shapes": [
                        "@param array<string, mixed> $settings",
                        "@param list<string> $origins"
                    ],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origins",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 108,
                    "end": 111
                },
                {
                    "routes": [],
                    "name": "styles",
                    "static": false,
                    "visibility": "public",
                    "signature": "styles(array $options): string",
                    "doc": "The styles: the root layout (unless skip_root_layout_styles), the\nroot's own rule, its CSS when the root is not body, the elements, then\neach block; under the root_selector and scope options.",
                    "shapes": [
                        "@param array<string, mixed> $options"
                    ],
                    "params": [
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 120,
                    "end": 136
                },
                {
                    "routes": [],
                    "name": "rootLayoutRules",
                    "static": false,
                    "visibility": "public",
                    "signature": "rootLayoutRules(string $selector): string",
                    "doc": "The root layout: the content and wide sizes, the body's margin, the\nglobal padding rules, the alignments; for body, the block gap (or the\nfallback gap of flex and grid) and the layouts' own rules.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 143,
                    "end": 155
                },
                {
                    "routes": [],
                    "name": "layoutStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "layoutStyles(): string",
                    "doc": "The block gap and the layouts' own rules; flex and grid fall back to a 0.5em gap when the tree has no block gap.",
                    "shapes": [],
                    "params": [],
                    "line": 158,
                    "end": 162
                },
                {
                    "routes": [],
                    "name": "rootStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "rootStyles(string $selector): string",
                    "doc": "The root's own rule: body as it is, any other root under :root :where().",
                    "shapes": [],
                    "params": [
                        {
                            "name": "selector",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 165,
                    "end": 185
                },
                {
                    "routes": [],
                    "name": "blockStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "blockStyles(string $name, string $scope = ''): string",
                    "doc": "One block's rules; its own block gap only when the tree turns block gaps on.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scope",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 188,
                    "end": 195
                },
                {
                    "routes": [],
                    "name": "blockOwnStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "blockOwnStyles(string $name): string",
                    "doc": "One block's own rules, its elements left out: each element is a style node of its own.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 198,
                    "end": 206
                },
                {
                    "routes": [],
                    "name": "blockElements",
                    "static": false,
                    "visibility": "public",
                    "signature": "blockElements(string $name): array",
                    "doc": "The elements a block styles, in the order they print.",
                    "shapes": [
                        "@return list<string>"
                    ],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 213,
                    "end": 216
                },
                {
                    "routes": [],
                    "name": "elementStyles",
                    "static": false,
                    "visibility": "public",
                    "signature": "elementStyles(string $element, string $block = ''): string",
                    "doc": "One element's rules, under a block's selector when it belongs to one.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "element",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "block",
                            "type": "string",
                            "shape": "",
                            "default": "''",
                            "doc": ""
                        }
                    ],
                    "line": 219,
                    "end": 223
                },
                {
                    "routes": [],
                    "name": "customCss",
                    "static": false,
                    "visibility": "public",
                    "signature": "customCss(): string",
                    "doc": "The tree's own top-level CSS, as written.",
                    "shapes": [],
                    "params": [],
                    "line": 226,
                    "end": 229
                },
                {
                    "routes": [],
                    "name": "settingsSelector",
                    "static": true,
                    "visibility": "public",
                    "signature": "settingsSelector(string $name): string",
                    "doc": "A block's settings selector: its experimental selector when it has one, else .wp-block-{slug}.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "name",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 271,
                    "end": 276
                },
                {
                    "routes": [],
                    "name": "blockGap",
                    "static": false,
                    "visibility": "private",
                    "signature": "blockGap(): ?string",
                    "doc": "The block gap: the styles' value when the tree's settings turn block gaps on, else null.",
                    "shapes": [],
                    "params": [],
                    "line": 232,
                    "end": 236
                },
                {
                    "routes": [],
                    "name": "presets",
                    "static": false,
                    "visibility": "private",
                    "signature": "presets(array $settings, array $origins): array",
                    "doc": "A settings node's presets by kind, the origins asked for in order, one\nper slug; a font size is written fluid by the root's typography\nsettings.",
                    "shapes": [
                        "@param array<string, mixed> $settings",
                        "@param list<string> $origins",
                        "@return array<string, list<array{slug: string, value: string}>>"
                    ],
                    "params": [
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "origins",
                            "type": "array",
                            "shape": "list<string>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 247,
                    "end": 268
                }
            ]
        },
        {
            "name": "Minn\\Theme\\Typography",
            "short": "Typography",
            "namespace": "Minn\\Theme",
            "kind": "final class",
            "file": "public/minn/src/Minn/Theme/Typography.php",
            "lines": 105,
            "doc": "Font sizes as the reference writes them (probe plugin-queue3): a size in\npx, rem or em, and, with fluid typography on, a clamp() that grows\nlinearly from a minimum at a small viewport to the size (or the preset's\nown maximum) at the wide one.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [
                "Minn\\Theme\\StylePresets",
                "Minn\\Theme\\TreeStyles"
            ],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "FLOOR",
                    "value": "'14px'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "SMALL_VIEWPORT",
                    "value": "'320px'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "WIDE_VIEWPORT",
                    "value": "'1600px'",
                    "doc": "",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "valueAndUnit",
                    "static": true,
                    "visibility": "public",
                    "signature": "valueAndUnit(mixed $raw, array $options = array ( )): ?array",
                    "doc": "A CSS length split into its number and unit (px, rem or em, or the\nunits given), converted to another unit on request at a 16px root\n(or the one given); a bare number is px. Null for anything else.",
                    "shapes": [
                        "@param array{coerce_to?: string, root_size_value?: int|float, acceptable_units?: list<string>} $options",
                        "@return array{value: float, unit: string}|null"
                    ],
                    "params": [
                        {
                            "name": "raw",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "options",
                            "type": "array",
                            "shape": "array{coerce_to?: string, root_size_value?: int|float, acceptable_units?: list<string>}",
                            "default": "array ( )",
                            "doc": ""
                        }
                    ],
                    "line": 27,
                    "end": 49
                },
                {
                    "routes": [],
                    "name": "fontSize",
                    "static": true,
                    "visibility": "public",
                    "signature": "fontSize(array $preset, array $settings): mixed",
                    "doc": "A font size preset as CSS (wp_get_typography_font_size_value). It\nstays as written unless fluid typography is on and the size is in a\nknown unit and above the floor (14px, or the settings' minFontSize);\nthen it grows from a minimum (the preset's own, else the size scaled\nby 1 - 0.075 log2 of its px, held between 0.25 and 0.75, never under\nthe floor) to a maximum (the preset's own, else the size).",
                    "shapes": [
                        "@param array<string, mixed> $preset",
                        "@param array<string, mixed> $settings typography and layout, merged over the global settings"
                    ],
                    "params": [
                        {
                            "name": "preset",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "settings",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": "typography and layout, merged over the global settings"
                        }
                    ],
                    "line": 62,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "clamp",
                    "static": true,
                    "visibility": "public",
                    "signature": "clamp(?string $minViewport, ?string $maxViewport, ?string $minSize, ?string $maxSize, int|float|null $scale): ?string",
                    "doc": "The clamp() between two sizes over two viewport widths\n(wp_get_computed_fluid_typography_value): the slope in the minimum's\nunit, the base in rem. Null when a size or a width is missing or in an\nunknown unit, or the widths are equal.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "minViewport",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxViewport",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "minSize",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "maxSize",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "scale",
                            "type": "int|float|null",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 96,
                    "end": 110
                },
                {
                    "routes": [],
                    "name": "number",
                    "static": true,
                    "visibility": "private",
                    "signature": "number(int|float $value): string",
                    "doc": "A number as PHP writes a float: no trailing \".0\".",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "int|float",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 113,
                    "end": 116
                }
            ]
        },
        {
            "name": "Minn\\Theme\\UserStyles",
            "short": "UserStyles",
            "namespace": "Minn\\Theme",
            "kind": "final readonly class",
            "file": "public/minn/src/Minn/Theme/UserStyles.php",
            "lines": 111,
            "doc": "The site editor's saved global styles: one wp_global_styles post per\ntheme, tied to it by the wp_theme term, holding a versioned JSON body\nof the settings and styles the editor wrote. Every changed save leaves\na revision behind, as a post's does.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Content\\PostRecord",
                "Minn\\Content\\PostWriter",
                "Minn\\Content\\Posts",
                "Minn\\Content\\Site",
                "Minn\\Content\\Terms",
                "Minn\\Db",
                "Minn\\Json"
            ],
            "usedBy": [
                "Minn\\Rest\\GlobalStylesController",
                "Minn\\Rest\\GlobalStylesObject",
                "Minn\\Rest\\Services"
            ],
            "constructor": {
                "signature": "__construct(Minn\\Db $db, Minn\\Content\\Posts $posts, Minn\\Content\\PostWriter $writer, Minn\\Content\\Terms $terms, Minn\\Content\\Site $site)",
                "doc": "",
                "shapes": [],
                "params": [
                    {
                        "name": "db",
                        "type": "Minn\\Db",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "posts",
                        "type": "Minn\\Content\\Posts",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "writer",
                        "type": "Minn\\Content\\PostWriter",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "terms",
                        "type": "Minn\\Content\\Terms",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    },
                    {
                        "name": "site",
                        "type": "Minn\\Content\\Site",
                        "shape": "",
                        "default": null,
                        "doc": ""
                    }
                ],
                "visibility": "public",
                "line": 24,
                "end": 31
            },
            "cases": [],
            "constants": [],
            "properties": [
                {
                    "name": "db",
                    "type": "Minn\\Db",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "posts",
                    "type": "Minn\\Content\\Posts",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "writer",
                    "type": "Minn\\Content\\PostWriter",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "terms",
                    "type": "Minn\\Content\\Terms",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                },
                {
                    "name": "site",
                    "type": "Minn\\Content\\Site",
                    "readonly": true,
                    "static": false,
                    "doc": "",
                    "visibility": "private",
                    "promoted": true
                }
            ],
            "methods": [
                {
                    "routes": [],
                    "name": "idFor",
                    "static": false,
                    "visibility": "public",
                    "signature": "idFor(string $stylesheet): ?int",
                    "doc": "The newest published global-styles post carrying the theme's term, or null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 34,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "ensure",
                    "static": false,
                    "visibility": "public",
                    "signature": "ensure(string $stylesheet, int $userId): int",
                    "doc": "The theme's post, made the way the reference makes it when there is none yet.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "stylesheet",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 71
                },
                {
                    "routes": [],
                    "name": "find",
                    "static": false,
                    "visibility": "public",
                    "signature": "find(int $id): ?Minn\\Content\\PostRecord",
                    "doc": "The post when it is a global-styles post, else null.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 74,
                    "end": 78
                },
                {
                    "routes": [],
                    "name": "decode",
                    "static": true,
                    "visibility": "public",
                    "signature": "decode(string $json): array",
                    "doc": "What a global-styles body holds; a missing, malformed, or list-shaped\nnode is empty, as the reference reads it.",
                    "shapes": [
                        "@return array{settings: array, styles: array}"
                    ],
                    "params": [
                        {
                            "name": "json",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 86,
                    "end": 94
                },
                {
                    "routes": [],
                    "name": "isBlank",
                    "static": true,
                    "visibility": "public",
                    "signature": "isBlank(string $json): bool",
                    "doc": "True when the body carries nothing at all under settings or styles, malformed or not.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "json",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 97,
                    "end": 101
                },
                {
                    "routes": [],
                    "name": "save",
                    "static": false,
                    "visibility": "public",
                    "signature": "save(int $id, int $userId, ?string $title, ?array $settings, ?array $styles, ?Closure $filter = NULL): void",
                    "doc": "Replaces what the caller names (null keeps the stored value), stamps\nthe modified time, and snapshots a revision when anything changed. A\nfilter, when given, has the last word on the content and title written\n(the save filters a REST save runs them through).",
                    "shapes": [
                        "@param null|Closure(array<string, string>): array<string, string> $filter"
                    ],
                    "params": [
                        {
                            "name": "id",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "userId",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "title",
                            "type": "?string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "settings",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "styles",
                            "type": "?array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "filter",
                            "type": "?Closure",
                            "shape": "null|Closure(array<string, string>): array<string, string>",
                            "default": "NULL",
                            "doc": ""
                        }
                    ],
                    "line": 111,
                    "end": 131
                }
            ]
        },
        {
            "name": "Minn\\Widgets\\WidgetForms",
            "short": "WidgetForms",
            "namespace": "Minn\\Widgets",
            "kind": "final class",
            "file": "public/minn/src/Minn/Widgets/WidgetForms.php",
            "lines": 203,
            "doc": "The core widgets' settings forms, the markup a widget's form() prints and\nwp/v2/widgets returns as rendered_form, character for character as the\nreference prints it (probe rest-widgets): field ids and names from the\nwidget's number, values escaped, defaults filled in. The whitespace is\nthe reference's own and is part of the answer.",
            "implements": [],
            "extends": null,
            "uses": [
                "Minn\\Support\\Escape"
            ],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "title",
                    "static": true,
                    "visibility": "public",
                    "signature": "title(WP_Widget $widget, array $instance): string",
                    "doc": "The title field most widgets open with.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 19,
                    "end": 27
                },
                {
                    "routes": [],
                    "name": "titleOnly",
                    "static": true,
                    "visibility": "public",
                    "signature": "titleOnly(WP_Widget $widget, array $instance): string",
                    "doc": "search, meta, calendar: the title alone.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 30,
                    "end": 33
                },
                {
                    "routes": [],
                    "name": "pages",
                    "static": true,
                    "visibility": "public",
                    "signature": "pages(WP_Widget $widget, array $instance): string",
                    "doc": "The pages widget: title, sort order, pages to leave out.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 36,
                    "end": 46
                },
                {
                    "routes": [],
                    "name": "archives",
                    "static": true,
                    "visibility": "public",
                    "signature": "archives(WP_Widget $widget, array $instance): string",
                    "doc": "The archives widget: title, dropdown and counts boxes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 49,
                    "end": 53
                },
                {
                    "routes": [],
                    "name": "categories",
                    "static": true,
                    "visibility": "public",
                    "signature": "categories(WP_Widget $widget, array $instance): string",
                    "doc": "The categories widget: title, dropdown, counts and hierarchy boxes.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 56,
                    "end": 61
                },
                {
                    "routes": [],
                    "name": "recentPosts",
                    "static": true,
                    "visibility": "public",
                    "signature": "recentPosts(WP_Widget $widget, array $instance): string",
                    "doc": "The recent posts widget: title, how many, whether to show dates.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 64,
                    "end": 69
                },
                {
                    "routes": [],
                    "name": "recentComments",
                    "static": true,
                    "visibility": "public",
                    "signature": "recentComments(WP_Widget $widget, array $instance): string",
                    "doc": "The recent comments widget: title and how many.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 72,
                    "end": 75
                },
                {
                    "routes": [],
                    "name": "customHtml",
                    "static": true,
                    "visibility": "public",
                    "signature": "customHtml(WP_Widget $widget, array $instance): string",
                    "doc": "The custom HTML widget: hidden title and content fields its editor syncs.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 78,
                    "end": 82
                },
                {
                    "routes": [],
                    "name": "block",
                    "static": true,
                    "visibility": "public",
                    "signature": "block(WP_Widget $widget, array $instance): string",
                    "doc": "The block widget: its block markup in a textarea.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 85,
                    "end": 88
                },
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "public",
                    "signature": "text(WP_Widget $widget, array $instance): string",
                    "doc": "The text widget in its visual mode: hidden fields the editor syncs (after the indent WP_Widget_Text::form prints first).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 91,
                    "end": 98
                },
                {
                    "routes": [],
                    "name": "tagCloud",
                    "static": true,
                    "visibility": "public",
                    "signature": "tagCloud(WP_Widget $widget, array $instance): string",
                    "doc": "The tag cloud: its title, the taxonomies that show a cloud (tags unless one is chosen), and the counts box.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 101,
                    "end": 112
                },
                {
                    "routes": [],
                    "name": "navMenu",
                    "static": true,
                    "visibility": "public",
                    "signature": "navMenu(WP_Widget $widget, array $instance): string",
                    "doc": "The navigation menu widget: a note when there are no menus, else the title and the menu to show.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 115,
                    "end": 128
                },
                {
                    "routes": [],
                    "name": "rss",
                    "static": true,
                    "visibility": "public",
                    "signature": "rss(array $args, array $inputs): string",
                    "doc": "wp_widget_rss_form: the feed's address, title, item count (1 to 20,\n10 by default) and the three display boxes, each shown unless the\ncaller hides it, and ticked when the settings say so (or, saying\nnothing, when it is shown).",
                    "shapes": [
                        "@param array<string, mixed> $args",
                        "@param array<string, bool> $inputs"
                    ],
                    "params": [
                        {
                            "name": "args",
                            "type": "array",
                            "shape": "array<string, mixed>",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "inputs",
                            "type": "array",
                            "shape": "array<string, bool>",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 139,
                    "end": 171
                },
                {
                    "routes": [],
                    "name": "links",
                    "static": true,
                    "visibility": "public",
                    "signature": "links(WP_Widget $widget, array $instance, array $categories, string $limit): string",
                    "doc": "The Links widget: the link category (the categories given as [id, name]),\nthe sort order, what each link shows, and how many (the limit as the\ncaller shows it).",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "instance",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "categories",
                            "type": "array",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "limit",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 178,
                    "end": 196
                },
                {
                    "routes": [],
                    "name": "marked",
                    "static": true,
                    "visibility": "private",
                    "signature": "marked(mixed $value, mixed $current, string $attribute): string",
                    "doc": "The attribute selected() or checked() prints, with its leading space, when the two values match as text.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "value",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "current",
                            "type": "mixed",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "attribute",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 199,
                    "end": 202
                },
                {
                    "routes": [],
                    "name": "number",
                    "static": true,
                    "visibility": "private",
                    "signature": "number(WP_Widget $widget, int $number, string $label): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "number",
                            "type": "int",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "label",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 204,
                    "end": 207
                },
                {
                    "routes": [],
                    "name": "id",
                    "static": true,
                    "visibility": "private",
                    "signature": "id(WP_Widget $widget, string $field): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 209,
                    "end": 212
                },
                {
                    "routes": [],
                    "name": "name",
                    "static": true,
                    "visibility": "private",
                    "signature": "name(WP_Widget $widget, string $field): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "WP_Widget",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "field",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 214,
                    "end": 217
                }
            ]
        },
        {
            "name": "Minn\\Widgets\\WidgetTemplates",
            "short": "WidgetTemplates",
            "namespace": "Minn\\Widgets",
            "kind": "final class",
            "file": "public/minn/src/Minn/Widgets/WidgetTemplates.php",
            "lines": 77,
            "doc": "The Underscore templates the Text and Custom HTML widgets print for their\ncontrols (render_control_template_scripts), as the reference prints them\n(probe widget-methods): a title field and the content area, the Text\nwidget's two hidden pointers, and, for a user who may not post unfiltered\nHTML, the note on the tags the code editor refuses. The whitespace is the\nreference's own and is part of the answer.",
            "implements": [],
            "extends": null,
            "uses": [],
            "usedBy": [],
            "constructor": null,
            "cases": [],
            "constants": [
                {
                    "name": "CLOSE",
                    "value": "'\t\t</script> \t\t'",
                    "doc": "",
                    "visibility": "private"
                },
                {
                    "name": "REFUSED_TAGS",
                    "value": "'\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<# if ( data.codeEditorDisabled ) { #> \t\t\t\t\t\t<p> \t\t\t\t\t\t\tSome HTML tags are not permitted, including:\t\t\t\t\t\t\t<code>script</code>, <code>iframe</code>, <code>form</code>, <code>input</code>, <code>style</code> \t\t\t\t\t\t</p> \t\t\t\t\t<# } #> \t\t\t\t\t\t\t '",
                    "doc": "The note a user who may not post unfiltered HTML sees, when the code editor is off.",
                    "visibility": "private"
                }
            ],
            "properties": [],
            "methods": [
                {
                    "routes": [],
                    "name": "text",
                    "static": true,
                    "visibility": "public",
                    "signature": "text(): string",
                    "doc": "The Text widget's template: title, the two pointers, the content area.",
                    "shapes": [],
                    "params": [],
                    "line": 28,
                    "end": 38
                },
                {
                    "routes": [],
                    "name": "customHtml",
                    "static": true,
                    "visibility": "public",
                    "signature": "customHtml(): string",
                    "doc": "The Custom HTML widget's template for a user who may post unfiltered HTML.",
                    "shapes": [],
                    "params": [],
                    "line": 41,
                    "end": 44
                },
                {
                    "routes": [],
                    "name": "customHtmlRestricted",
                    "static": true,
                    "visibility": "public",
                    "signature": "customHtmlRestricted(): string",
                    "doc": "The Custom HTML widget's template for a user who may not, with the note on refused tags.",
                    "shapes": [],
                    "params": [],
                    "line": 47,
                    "end": 50
                },
                {
                    "routes": [],
                    "name": "customHtmlWith",
                    "static": true,
                    "visibility": "private",
                    "signature": "customHtmlWith(string $note): string",
                    "doc": "",
                    "shapes": [],
                    "params": [
                        {
                            "name": "note",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 52,
                    "end": 62
                },
                {
                    "routes": [],
                    "name": "open",
                    "static": true,
                    "visibility": "private",
                    "signature": "open(string $widget): string",
                    "doc": "The script tag, the element id prefix both templates make, and the title field.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "widget",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 65,
                    "end": 73
                },
                {
                    "routes": [],
                    "name": "pointer",
                    "static": true,
                    "visibility": "private",
                    "signature": "pointer(string $class, string $heading, string $paragraph): string",
                    "doc": "A hidden pointer: its heading, its paragraph (with the reference's indents around it), a dismiss link.",
                    "shapes": [],
                    "params": [
                        {
                            "name": "class",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "heading",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        },
                        {
                            "name": "paragraph",
                            "type": "string",
                            "shape": "",
                            "default": null,
                            "doc": ""
                        }
                    ],
                    "line": 76,
                    "end": 90
                }
            ]
        }
    ]
}
