changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$defs": {
+ "ActionCapability": {
+ "description": "One entry in a resource's `_actions` block: may the caller perform it, and if not, why.",
+ "properties": {
+ "allowed": {
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "reason": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "PublicFlagListItem": {
+ "description": "Public list-item representation of a feature flag, returned by\n`GET .../flags`. Narrower than PublicFlagResponse — drops\nVariations (a summary-only shape upstream) and\nStaleness, matching the \"list is narrower than detail\"\nsplit already present on the Application-layer DTOs.\nEffectiveExpiresAtUtc is when the flag counts as past expiry, from its own ExpiresAtUtc\nor its project's default lifetime; ExpirySource says which (`explicit` / `project-default`),\nboth null when neither applies.",
+ "properties": {
+ "clientSideVisible": {
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "createdAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "effectiveExpiresAtUtc": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "expiresAtUtc": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "expirySource": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "id": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "isArchived": {
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "isPermanent": {
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "key": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "name": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "owner": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/PublicFlagOwner"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "removalPrUrl": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "tags": {
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "type": {
+ "description": "Allowed values: Boolean, String, Number, Json.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "updatedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "PublicFlagOwner": {
+ "description": "A flag's owner as returned on flag reads. Null means the flag is unowned.",
+ "properties": {
+ "email": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "id": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "name": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ }
+ },
+ "description": "A page of results plus an opaque cursor for the next page, or null when this is the last\npage. Wire keys are frozen: `items` (already lowercase under the camelCase policy) and\n`next_cursor` (pinned explicitly — the policy alone would emit `nextCursor`).",
+ "properties": {
+ "_actions": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/ActionCapability"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "description": "Capability hints: which operations the authenticated caller may perform on this resource, each with allowed + optional reason. Computed from the caller's role and the resource's state. Injected at runtime; safe to ignore. Present only on top-level resource responses — nested occurrences (e.g. a rule inside a targeting-config response) do not carry it.",
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "items": {
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/PublicFlagListItem"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "next_cursor": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": "object"
+}