{
  "openapi": "3.2.1",
  "info": {
    "title": "SlopFizzBuzz Numerical Affairs API",
    "version": "1.0.0",
    "description": "The public proclamation and institutional assurance desks of The Serious Business Company, Inc. FizzBuzz output remains plain text. Operational verdicts are process-local unless stated otherwise. A passing internal control does not imply external certification. Every response carries X-SlopBuzz-Trace-Id and X-SlopBuzz-Span-Id receipts; a valid W3C traceparent request preserves its trace ID while the server issues a new span. The static showcase executes these business operations locally through the RuntimeClient interface; paths describe logical requests and are not HTTP listeners in browser mode. cURL examples apply to the optional Java server. Browser audit and cache use IndexedDB; server deployments use their configured H2/Redis adapters. See /operations/runtime for capabilities."
  },
  "servers": [
    {
      "url": "/",
      "description": "Optional Java HTTP deployment; browser mode uses local RuntimeClient dispatch"
    }
  ],
  "tags": [
    {
      "name": "Numerical affairs",
      "description": "Issue or forecast a number mandate."
    },
    {
      "name": "Operational confidence",
      "description": "Inspect health, release custody, performance, and rehearsals."
    },
    {
      "name": "Institutional memory",
      "description": "Inspect cache and audit evidence."
    },
    {
      "name": "Glyph procurement",
      "description": "Individually governed character acquisition and receiving evidence."
    },
    {
      "name": "Personnel proceedings",
      "description": "The literal one must complete recruitment, induction and probation before counting can begin."
    },
    {
      "name": "Execution proceedings",
      "description": "Observe the actual work behind a numerical mandate without executing it twice."
    },
    {
      "name": "Developer relations",
      "description": "Read the charter that describes these desks."
    },
    {
      "name": "Prior work ratification",
      "description": "Five real offices must license the reuse of a cached answer."
    }
  ],
  "paths": {
    "/fizzbuzz": {
      "get": {
        "tags": [
          "Numerical affairs"
        ],
        "operationId": "issueMandate",
        "summary": "Issue a numerical mandate",
        "description": "Runs the real Spring service for integers 1 through limit. A cache miss produces audit certificates; a Redis hit returns the same approved text without producing new certificates. A production start at 1 obtains a commencement certificate from seven personnel offices. X-SlopBuzz-Onboarding-Trace carries request-bound completed decisions without changing the plain-text body. Cache hits and later extended windows create no new HR proceedings. A current cache hit requires five-office prior-work ratification. Rejected prior text becomes a cache miss before at most one fresh production invocation. Reuse itself performs independent validation but creates no fresh numerical transactions. Existing raw cache entries and expiry policies remain compatible.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Limit"
          }
        ],
        "responses": {
          "200": {
            "description": "One line per integer, or an empty body for zero.",
            "headers": {
              "X-SlopBuzz-Cache": {
                "$ref": "#/components/headers/CacheDisposition"
              },
              "Cache-Control": {
                "description": "The HTTP response is never stored by the browser.",
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              },
              "X-SlopBuzz-Onboarding-State": {
                "$ref": "#/components/headers/PersonnelState"
              },
              "X-SlopBuzz-Onboarding-Trace": {
                "$ref": "#/components/headers/PersonnelTrace"
              },
              "X-SlopBuzz-Precedent-Trace": {
                "$ref": "#/components/headers/PrecedentTrace"
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidLimit"
          },
          "500": {
            "$ref": "#/components/responses/GenerationFailed"
          }
        }
      }
    },
    "/capacity/forecast": {
      "get": {
        "tags": [
          "Numerical affairs"
        ],
        "operationId": "forecastMandate",
        "summary": "Forecast proclamation inventory",
        "description": "Counts each category and assigns fictional internal workload units without running the game or writing audit entries.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Limit"
          }
        ],
        "responses": {
          "200": {
            "description": "Board-ready inventory forecast.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CapacityForecast"
                },
                "example": {
                  "schema": "slopbuzz-capacity/v1",
                  "limit": 15,
                  "numeralLines": 8,
                  "fizzLines": 4,
                  "buzzLines": 2,
                  "fizzBuzzLines": 1,
                  "totalLines": 15,
                  "workloadUnits": 23
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidLimit"
          }
        }
      }
    },
    "/healthz": {
      "get": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "readLiveness",
        "summary": "Check process liveness",
        "description": "Answers when the HTTP desk itself is reachable; it does not convene readiness electors.",
        "responses": {
          "200": {
            "description": "The process answered.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "const": "ok\n"
                },
                "example": "ok\n"
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/readyz": {
      "get": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "readReadiness",
        "summary": "Convene the readiness quorum",
        "description": "Reports integrity, capacity, and delivery votes as newline-separated key=value pairs.",
        "responses": {
          "200": {
            "description": "All electors approved.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "ready=true\nintegrityVote=APPROVE\ncapacityVote=APPROVE\ndeliveryVote=APPROVE\npending=0\ncapacity=10000\ndeadLetters=0\n"
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          },
          "503": {
            "description": "At least one elector vetoed.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/operations/scorecard": {
      "get": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "readScorecard",
        "summary": "Read the service scorecard",
        "description": "Counts proclamation requests served by the current process. Duration fields are microseconds.",
        "responses": {
          "200": {
            "description": "Current-process request counters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Scorecard"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/operations/release": {
      "get": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "readReleaseCustody",
        "summary": "Identify the deployed revision",
        "description": "Reports the declared full Git SHA and process start time. The preview deployment script compares this SHA with its merged checkout.",
        "responses": {
          "200": {
            "description": "Release custody statement.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Release"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/operations/canary": {
      "get": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "readCanary",
        "summary": "Read the latest numerical rehearsal",
        "description": "Returns process-local minutes without starting a new rehearsal.",
        "responses": {
          "200": {
            "description": "No rehearsal or the latest passing verdict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CanaryVerdict"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          },
          "503": {
            "description": "The latest rehearsal failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CanaryVerdict"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "rehearseCanary",
        "summary": "Rehearse the fifteen-number charter",
        "description": "Runs the real Spring path against an approved specimen. A newly admitted run creates fifteen audit entries; another POST within fifteen seconds reuses the same verdict.",
        "responses": {
          "200": {
            "description": "Passing verdict or an admitted prior verdict.",
            "headers": {
              "X-SlopBuzz-Rehearsal": {
                "description": "Whether work was done now or a lease was reused.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "EXECUTED",
                    "REUSED"
                  ]
                }
              },
              "X-SlopBuzz-Rehearsal-Lease-Seconds": {
                "description": "Seconds remaining on the admission lease.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CanaryVerdict"
                }
              }
            }
          },
          "503": {
            "description": "The rehearsal failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CanaryVerdict"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/operations/recovery": {
      "get": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "readRecovery",
        "summary": "Read the latest recovery verdict",
        "description": "Returns process-local minutes without reopening the repository.",
        "responses": {
          "200": {
            "description": "No drill or the latest passing verdict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecoveryVerdict"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          },
          "503": {
            "description": "The latest drill failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecoveryVerdict"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Operational confidence"
        ],
        "operationId": "rehearseRecovery",
        "summary": "Reopen and compare institutional memory",
        "description": "Read-only integrity drill. It verifies a fresh stored copy and compares it with the live ledger under the append lock. It does not restore a backup or create audit entries.",
        "responses": {
          "200": {
            "description": "Stored and live copies matched at one instant.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecoveryVerdict"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          },
          "503": {
            "description": "The stored copy was unavailable, invalid, or divergent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecoveryVerdict"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/cache/status": {
      "get": {
        "tags": [
          "Institutional memory"
        ],
        "operationId": "readCacheStatus",
        "summary": "Read Redis memory counters",
        "description": "Reports whether Redis is configured and how many lookups hit, missed, or bypassed it in this process.",
        "responses": {
          "200": {
            "description": "Current-process cache counters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CacheStatus"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/audit/status": {
      "get": {
        "tags": [
          "Institutional memory"
        ],
        "operationId": "readAuditStatus",
        "summary": "Read the audit queue projection",
        "description": "Dispatches pending process-local audit messages, then reports counts and hash-chain validity as newline-separated key=value pairs.",
        "responses": {
          "200": {
            "description": "Current audit and queue state.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "committed=15\naborted=0\npending=0\ndeadLetters=0\nchainValid=true\n"
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/audit/evidence": {
      "get": {
        "tags": [
          "Institutional memory"
        ],
        "operationId": "readEvidenceDossier",
        "summary": "Issue an internal evidence dossier",
        "description": "Reports internal controls and evidence digest. ISO 9000 and SOC 2 remain OPEN; this is not an external certificate.",
        "responses": {
          "200": {
            "description": "Point-in-time internal evidence.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvidenceDossier"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "tags": [
          "Developer relations"
        ],
        "operationId": "readApiCharter",
        "summary": "Read this machine-readable API charter",
        "description": "Serves the same OpenAPI document from which the human-readable API guide is rendered.",
        "responses": {
          "200": {
            "description": "An OpenAPI 3.2.1 document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            }
          }
        }
      }
    },
    "/operations/runtime": {
      "get": {
        "tags": [
          "Operational confidence"
        ],
        "summary": "Inspect the configured execution environment",
        "operationId": "runtimeCapabilities",
        "description": "Identifies the engine, audit repository and cache provider. No automatic browser-to-server failover occurs. The optional narrative integer capability is1 when explained mandate endpoints are supported. Its absence means clients must choose the established plain-text operation once and use clearly labeled explanatory context for missing details.",
        "responses": {
          "200": {
            "description": "Current runtime capabilities",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "mode": {
                      "type": "string",
                      "enum": [
                        "browser",
                        "server"
                      ]
                    },
                    "engine": {
                      "type": "string"
                    },
                    "storage": {
                      "type": "string"
                    },
                    "cache": {
                      "type": "string"
                    },
                    "protocol": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method not authorized"
          }
        }
      }
    },
    "/procurement/dossier": {
      "get": {
        "tags": [
          "Glyph procurement"
        ],
        "operationId": "inspectGlyphProcurement",
        "summary": "Inspect the certified glyph supply chain",
        "description": "Assembles Fizz, Buzz or FizzBuzz through the same procurement implementation used by production string returners. Each repeated character has its own position and certificate. This is an inspection demonstration, not a historical receipt: it creates no audit transactions and consumes no inventory. In browser mode the request executes locally and works offline.",
        "parameters": [
          {
            "name": "product",
            "in": "query",
            "required": false,
            "description": "Approved product, with exact case. Omit for FizzBuzz. Unknown, repeated or extra query parameters are rejected.",
            "schema": {
              "type": "string",
              "enum": [
                "Fizz",
                "Buzz",
                "FizzBuzz"
              ],
              "default": "FizzBuzz"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Certified assembly and individual receiving records.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProcurementDossier"
                }
              }
            }
          },
          "400": {
            "description": "Product is not authorized or query is malformed."
          },
          "405": {
            "description": "Only GET is authorized; Allow: GET."
          }
        }
      }
    },
    "/fizzbuzz/window": {
      "get": {
        "tags": [
          "Numerical affairs"
        ],
        "operationId": "discloseMagnitudeWindow",
        "summary": "Disclose a finite window of arbitrary-magnitude ordinals",
        "description": "The extended web demo advances through finite windows starting at 1. Ordinal magnitude has no application cap. Output is generated by shared Java BigInteger and glyph procurement, with independent lexical inspection. These proceedings are transient: no retained audit entries or cache records are created. Each response contains 1–100 LF-terminated lines; this is a transport window limit, not an upper limit on the mandate. A production start at 1 obtains a commencement certificate from seven personnel offices. X-SlopBuzz-Onboarding-Trace carries request-bound completed decisions without changing the plain-text body. Cache hits and later extended windows create no new HR proceedings.",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": true,
            "description": "Positive decimal ordinal, transmitted as text to preserve precision.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+$",
              "default": "9007199254740990"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": true,
            "description": "Number of lines in this finite response window.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 15
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Exact plain-text lines; X-SlopBuzz-Proceedings: TRANSIENT; X-SlopBuzz-Cache: BYPASS.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "headers": {
              "X-SlopBuzz-Onboarding-State": {
                "$ref": "#/components/headers/PersonnelState"
              },
              "X-SlopBuzz-Onboarding-Trace": {
                "$ref": "#/components/headers/PersonnelTrace"
              }
            }
          },
          "400": {
            "description": "Malformed query, non-positive start or invalid window count."
          },
          "405": {
            "description": "Only GET is authorized."
          }
        }
      }
    },
    "/capacity/forecast/extended": {
      "get": {
        "tags": [
          "Numerical affairs"
        ],
        "operationId": "forecastExtendedMagnitude",
        "summary": "Forecast an arbitrary-magnitude mandate exactly",
        "description": "Forecasts the same proclamation mix as the standard capacity bureau, without an upper magnitude cap. Every numeric result is a decimal string so JSON parsing cannot round it. No proclamations or audit transactions are produced.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "description": "Non-negative decimal upper limit, supplied as text.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+$",
              "default": "9007199254740993"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Exact decimal-string forecast.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtendedForecast"
                }
              }
            }
          },
          "400": {
            "description": "Malformed non-negative decimal limit."
          },
          "405": {
            "description": "Only GET is authorized."
          }
        }
      }
    },
    "/onboarding/rehearsal": {
      "get": {
        "tags": [
          "Personnel proceedings"
        ],
        "operationId": "rehearseOrdinalOnboarding",
        "summary": "Rehearse first ordinal onboarding",
        "description": "Executes the same seven Java authorities that govern the production loop origin. Approved hires candidate 1; zero and two fail identity review; missing-induction fails probation. A rejected application is a successful read-only rehearsal and returns HTTP 200 with status REJECTED. No output mandate, cache operation, audit transaction or external HR approval is created. The UI discloses these completed decisions at the selected reading speed; the business decisions have already run.",
        "parameters": [
          {
            "name": "scenario",
            "in": "query",
            "description": "One exact, unencoded scenario. Omission defaults to approved; repeated or extra parameters are rejected.",
            "schema": {
              "type": "string",
              "enum": [
                "approved",
                "zero",
                "two",
                "missing-induction"
              ],
              "default": "approved"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Actual immutable rehearsal decisions, including offices not reached after rejection.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-SlopBuzz-Proceedings": {
                "schema": {
                  "type": "string",
                  "const": "READ_ONLY_REHEARSAL"
                }
              },
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonnelDossier"
                }
              }
            }
          },
          "400": {
            "description": "Unsupported or ambiguous scenario query."
          },
          "405": {
            "description": "Only GET is authorized.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            }
          }
        }
      }
    },
    "/fizzbuzz/explained": {
      "get": {
        "tags": [
          "Execution proceedings"
        ],
        "operationId": "explainNumericalMandate",
        "summary": "Issue a mandate with actual execution proceedings",
        "description": "Opt-in structured envelope around one execution of /fizzbuzz. Returns the identical numerical text with bounded, request-local Java observations and optional actual personnel evidence. It does not rerun the operation for its story. Cache hits report only the cache action; extended windows do not invent retained transactions. The observer never grants business authorization. At most 50000 observations are retained; omitted counts are explicit. Older runtimes may lack this operation: clients must probe operations/runtime narrative capability before choosing an execution path, rather than retrying a possibly completed mandate. A current cache hit requires five-office prior-work ratification. Rejected prior text becomes a cache miss before at most one fresh production invocation. Reuse itself performs independent validation but creates no fresh numerical transactions. Existing raw cache entries and expiry policies remain compatible.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Limit"
          }
        ],
        "responses": {
          "200": {
            "description": "Numerical result and the actual observed proceedings.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-SlopBuzz-Precedent-Trace": {
                "$ref": "#/components/headers/PrecedentTrace"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutionEnvelope"
                }
              }
            }
          },
          "400": {
            "description": "The original failure status is preserved with its text and observed failure record.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutionEnvelope"
                }
              }
            }
          },
          "500": {
            "description": "The original failure status is preserved with its text and observed failure record.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutionEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/fizzbuzz/window/explained": {
      "get": {
        "tags": [
          "Execution proceedings"
        ],
        "operationId": "explainMagnitudeWindow",
        "summary": "Disclose a transient window with execution proceedings",
        "description": "Opt-in structured envelope around one execution of /fizzbuzz/window. Returns the identical numerical text with bounded, request-local Java observations and optional actual personnel evidence. It does not rerun the operation for its story. Cache hits report only the cache action; extended windows do not invent retained transactions. The observer never grants business authorization. At most 50000 observations are retained; omitted counts are explicit. Older runtimes may lack this operation: clients must probe operations/runtime narrative capability before choosing an execution path, rather than retrying a possibly completed mandate.",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": true,
            "description": "Positive decimal ordinal, transmitted as text to preserve precision.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+$",
              "default": "9007199254740990"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": true,
            "description": "Number of lines in this finite response window.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 15
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Numerical result and the actual observed proceedings.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutionEnvelope"
                }
              }
            }
          },
          "400": {
            "description": "The original failure status is preserved with its text and observed failure record.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutionEnvelope"
                }
              }
            }
          },
          "405": {
            "description": "Only GET is authorized."
          },
          "500": {
            "description": "The original failure status is preserved with its text and observed failure record.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutionEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/precedent/rehearsal": {
      "get": {
        "tags": [
          "Prior work ratification"
        ],
        "operationId": "rehearsePriorWork",
        "summary": "Convene a read-only institutional memory court",
        "description": "Exercises the same five Java offices that ratify real cached responses. Approved adopts fifteen lines; zero licenses empty prior work; wrong-mandate fails jurisdiction, missing-line fails completeness, and lowercase-fizz fails independent lexical inspection. A substantive rejection returns HTTP 200 with status REJECTED and later offices NOT_REACHED. Specimens are fixed and isolated: no real cache reads/writes, numerical output, numerical audit entries or message delivery occurs. Executes locally and offline in browser mode, including alongside an older journal owner.",
        "parameters": [
          {
            "name": "scenario",
            "in": "query",
            "description": "One exact unencoded scenario; omission defaults to approved. Repeated and extra parameters are rejected.",
            "schema": {
              "type": "string",
              "enum": [
                "approved",
                "zero",
                "wrong-mandate",
                "missing-line",
                "lowercase-fizz"
              ],
              "default": "approved"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Actual completed court decisions and, only on approval, a Certificate of Authorized Non-Performance.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-SlopBuzz-Proceedings": {
                "schema": {
                  "type": "string",
                  "const": "READ_ONLY_REHEARSAL"
                }
              },
              "X-SlopBuzz-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              },
              "X-SlopBuzz-Span-Id": {
                "$ref": "#/components/headers/SpanId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrecedentDossier"
                }
              }
            }
          },
          "400": {
            "description": "Unsupported or ambiguous scenario query."
          },
          "405": {
            "description": "Only GET is authorized.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "Limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Inclusive upper bound; defaults to 100. The query must be exactly limit followed by 1–4 decimal digits.",
        "schema": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000,
          "default": 100
        },
        "example": 15
      }
    },
    "headers": {
      "CacheDisposition": {
        "description": "The Redis lookup decision for this request.",
        "schema": {
          "type": "string",
          "enum": [
            "HIT",
            "MISS",
            "BYPASS"
          ]
        }
      },
      "TraceId": {
        "description": "A 16-byte lowercase hexadecimal trace receipt. A valid incoming W3C traceparent retains its trace ID.",
        "schema": {
          "type": "string",
          "pattern": "^[0-9a-f]{32}$"
        }
      },
      "SpanId": {
        "description": "A new 8-byte lowercase hexadecimal span for this HTTP request.",
        "schema": {
          "type": "string",
          "pattern": "^[0-9a-f]{16}$"
        }
      },
      "PersonnelState": {
        "description": "APPROVED or REJECTED describes an observed initializer call. CACHE_REUSED means no new onboarding. CONTINUATION means an extended window starts after 1. UNAVAILABLE means this implementation emitted no dossier; older runtimes may omit both headers.",
        "schema": {
          "type": "string",
          "enum": [
            "APPROVED",
            "REJECTED",
            "CACHE_REUSED",
            "CONTINUATION",
            "UNAVAILABLE"
          ]
        }
      },
      "PersonnelTrace": {
        "description": "ASCII-escaped JSON PersonnelDossier, at most 8192 characters, captured from this request’s actual Java initializer. Only supplied when onboarding ran. Never copied into the output cache or persisted in the numerical journal. Missing on cache hits and extended continuation windows. See PersonnelDossier schema.",
        "schema": {
          "type": "string"
        }
      },
      "PrecedentTrace": {
        "description": "Optional ASCII JSON PrecedentDossier, at most 8192 characters. Current Java cache reuse decisions, including rejection before fresh production. Absent when no prior text was offered, the repository was bypassed, or an older owner has no court. Never stored in the numerical cache or journal.",
        "schema": {
          "type": "string",
          "maxLength": 8192
        }
      }
    },
    "responses": {
      "InvalidLimit": {
        "description": "Limit syntax or range was rejected.",
        "content": {
          "text/plain": {
            "schema": {
              "type": "string"
            },
            "example": "Invalid limit; use an integer from 0 through 1000\n"
          }
        },
        "headers": {
          "X-SlopBuzz-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          },
          "X-SlopBuzz-Span-Id": {
            "$ref": "#/components/headers/SpanId"
          }
        }
      },
      "GenerationFailed": {
        "description": "The numerical ceremony failed.",
        "content": {
          "text/plain": {
            "schema": {
              "type": "string"
            },
            "example": "Generation failed\n"
          }
        },
        "headers": {
          "X-SlopBuzz-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          },
          "X-SlopBuzz-Span-Id": {
            "$ref": "#/components/headers/SpanId"
          }
        }
      }
    },
    "schemas": {
      "CapacityForecast": {
        "type": "object",
        "required": [
          "schema",
          "limit",
          "numeralLines",
          "fizzLines",
          "buzzLines",
          "fizzBuzzLines",
          "totalLines",
          "workloadUnits"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-capacity/v1"
          },
          "limit": {
            "type": "integer"
          },
          "numeralLines": {
            "type": "integer"
          },
          "fizzLines": {
            "type": "integer"
          },
          "buzzLines": {
            "type": "integer"
          },
          "fizzBuzzLines": {
            "type": "integer"
          },
          "totalLines": {
            "type": "integer"
          },
          "workloadUnits": {
            "type": "integer",
            "description": "Fictional internal planning units."
          }
        }
      },
      "Scorecard": {
        "type": "object",
        "required": [
          "schema",
          "scope",
          "successful",
          "rejected",
          "failed",
          "total",
          "totalDurationMicros",
          "maximumDurationMicros"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-scorecard/v1"
          },
          "scope": {
            "type": "string",
            "const": "current-process"
          },
          "successful": {
            "type": "integer"
          },
          "rejected": {
            "type": "integer"
          },
          "failed": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "totalDurationMicros": {
            "type": "integer"
          },
          "maximumDurationMicros": {
            "type": "integer"
          }
        }
      },
      "Release": {
        "type": "object",
        "required": [
          "schema",
          "scope",
          "revision",
          "startedAtEpochMillis"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-release/v1"
          },
          "scope": {
            "type": "string",
            "const": "deployed-process"
          },
          "revision": {
            "type": "string",
            "description": "Declared full Git SHA, or unknown outside a stamped deployment."
          },
          "startedAtEpochMillis": {
            "type": "integer"
          }
        }
      },
      "CanaryVerdict": {
        "type": "object",
        "required": [
          "schema",
          "scope",
          "sequence",
          "state",
          "finding",
          "issuedAtEpochMillis",
          "durationMicros",
          "expectedLines",
          "observedLines",
          "auditChainValid"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-canary/v1"
          },
          "scope": {
            "type": "string",
            "const": "current-process"
          },
          "sequence": {
            "type": "integer"
          },
          "state": {
            "type": "string",
            "enum": [
              "NOT_RUN",
              "PASSED",
              "FAILED"
            ]
          },
          "finding": {
            "type": "string"
          },
          "issuedAtEpochMillis": {
            "type": "integer"
          },
          "durationMicros": {
            "type": "integer"
          },
          "expectedLines": {
            "type": "integer",
            "const": 15
          },
          "observedLines": {
            "type": "integer"
          },
          "auditChainValid": {
            "type": "boolean"
          }
        }
      },
      "RecoveryVerdict": {
        "type": "object",
        "required": [
          "schema",
          "scope",
          "sequence",
          "state",
          "finding",
          "issuedAtEpochMillis",
          "durationMicros",
          "durable",
          "storedEntries",
          "headDigest"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-recovery/v1"
          },
          "scope": {
            "type": "string",
            "const": "current-process"
          },
          "sequence": {
            "type": "integer"
          },
          "state": {
            "type": "string",
            "enum": [
              "NOT_RUN",
              "PASSED",
              "FAILED"
            ]
          },
          "finding": {
            "type": "string",
            "enum": [
              "NOT_REQUESTED",
              "MATCHED",
              "LIVE_INVALID",
              "STORED_INVALID",
              "DIVERGED",
              "STORAGE_UNAVAILABLE"
            ]
          },
          "issuedAtEpochMillis": {
            "type": "integer"
          },
          "durationMicros": {
            "type": "integer"
          },
          "durable": {
            "type": "boolean",
            "description": "True only for a file-backed H2 URL."
          },
          "storedEntries": {
            "type": "integer",
            "description": "-1 means the store could not be read."
          },
          "headDigest": {
            "type": "string"
          }
        }
      },
      "CacheStatus": {
        "type": "object",
        "required": [
          "schema",
          "enabled",
          "hits",
          "misses",
          "bypasses",
          "errors",
          "ttlSeconds"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-cache/v1"
          },
          "enabled": {
            "type": "boolean"
          },
          "hits": {
            "type": "integer"
          },
          "misses": {
            "type": "integer"
          },
          "bypasses": {
            "type": "integer"
          },
          "errors": {
            "type": "integer"
          },
          "ttlSeconds": {
            "type": "integer"
          },
          "rejectedPrecedents": {
            "type": "integer",
            "minimum": 0,
            "description": "Substantively rejected cached candidates. Each also counts as a miss; infrastructure failures remain bypasses/errors."
          }
        }
      },
      "EvidenceDossier": {
        "type": "object",
        "required": [
          "schema",
          "issuedAtEpochMillis",
          "scope",
          "certification",
          "journalEntries",
          "committed",
          "aborted",
          "pending",
          "deadLetters",
          "headDigest",
          "controls",
          "evidenceDigest"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-evidence/v1"
          },
          "issuedAtEpochMillis": {
            "type": "integer"
          },
          "scope": {
            "type": "string",
            "const": "internal-controls-only"
          },
          "certification": {
            "type": "string",
            "const": "none"
          },
          "journalEntries": {
            "type": "integer"
          },
          "committed": {
            "type": "integer"
          },
          "aborted": {
            "type": "integer"
          },
          "pending": {
            "type": "integer"
          },
          "deadLetters": {
            "type": "integer"
          },
          "headDigest": {
            "type": "string"
          },
          "controls": {
            "type": "object",
            "required": [
              "AUD-001",
              "MSG-001",
              "ISO-9000",
              "SOC-2"
            ],
            "properties": {
              "AUD-001": {
                "type": "string"
              },
              "MSG-001": {
                "type": "string"
              },
              "ISO-9000": {
                "type": "string",
                "const": "OPEN"
              },
              "SOC-2": {
                "type": "string",
                "const": "OPEN"
              }
            }
          },
          "evidenceDigest": {
            "type": "string"
          }
        }
      },
      "ProcurementDossier": {
        "type": "object",
        "required": [
          "schema",
          "demonstration",
          "auditTransactions",
          "product",
          "text",
          "assembly",
          "lineItems"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-glyph-procurement/v1"
          },
          "demonstration": {
            "type": "boolean",
            "const": true
          },
          "auditTransactions": {
            "type": "integer",
            "const": 0
          },
          "product": {
            "type": "string",
            "enum": [
              "Fizz",
              "Buzz",
              "FizzBuzz"
            ]
          },
          "text": {
            "type": "string",
            "description": "Certified characters in purchasing order; excludes the proclamation line ending."
          },
          "assembly": {
            "type": "string",
            "const": "CERTIFIED"
          },
          "lineItems": {
            "type": "array",
            "minItems": 4,
            "maxItems": 8,
            "items": {
              "type": "object",
              "required": [
                "position",
                "sku",
                "character",
                "quantity",
                "inspection"
              ],
              "properties": {
                "position": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 8
                },
                "sku": {
                  "type": "string",
                  "enum": [
                    "GLY-0046",
                    "GLY-0069",
                    "GLY-007A",
                    "GLY-0042",
                    "GLY-0075"
                  ]
                },
                "character": {
                  "type": "string",
                  "enum": [
                    "F",
                    "i",
                    "z",
                    "B",
                    "u"
                  ]
                },
                "quantity": {
                  "type": "integer",
                  "const": 1
                },
                "inspection": {
                  "type": "string",
                  "const": "ACCEPTED"
                }
              }
            }
          }
        }
      },
      "ExtendedForecast": {
        "type": "object",
        "required": [
          "schema",
          "limit",
          "numeralLines",
          "fizzLines",
          "buzzLines",
          "fizzBuzzLines",
          "totalLines",
          "workloadUnits"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-capacity/extended-v1"
          },
          "limit": {
            "type": "string",
            "pattern": "^[0-9]+$"
          },
          "numeralLines": {
            "type": "string",
            "pattern": "^[0-9]+$"
          },
          "fizzLines": {
            "type": "string",
            "pattern": "^[0-9]+$"
          },
          "buzzLines": {
            "type": "string",
            "pattern": "^[0-9]+$"
          },
          "fizzBuzzLines": {
            "type": "string",
            "pattern": "^[0-9]+$"
          },
          "totalLines": {
            "type": "string",
            "pattern": "^[0-9]+$"
          },
          "workloadUnits": {
            "type": "string",
            "pattern": "^[0-9]+$"
          }
        }
      },
      "PersonnelDossier": {
        "type": "object",
        "required": [
          "schema",
          "caseId",
          "purpose",
          "candidate",
          "status",
          "startingOrdinal",
          "steps"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-onboarding/v1"
          },
          "caseId": {
            "type": "string",
            "description": "HR- followed by the request trace ID. Display reference; object custody, rather than this label, binds the Java documents."
          },
          "purpose": {
            "type": "string",
            "enum": [
              "MANDATE",
              "REHEARSAL"
            ],
            "description": "Mandate evidence is captured from the actual initializer call. Rehearsals are separate read-only exercises."
          },
          "candidate": {
            "type": "integer",
            "description": "The nominated ordinal; only 1 qualifies."
          },
          "status": {
            "type": "string",
            "enum": [
              "APPROVED",
              "REJECTED"
            ]
          },
          "startingOrdinal": {
            "type": [
              "integer",
              "null"
            ],
            "enum": [
              1,
              null
            ],
            "description": "The independently audited ordinal, or null when no clearance was granted."
          },
          "steps": {
            "type": "array",
            "minItems": 7,
            "maxItems": 7,
            "description": "Headcount Planning, Recruitment, Identity Office, Offer Authority, Induction, Probation Review, Independent Audit, in execution order.",
            "items": {
              "$ref": "#/components/schemas/PersonnelDecision"
            }
          }
        }
      },
      "PersonnelDecision": {
        "type": "object",
        "required": [
          "office",
          "state",
          "rule",
          "received",
          "finding",
          "document"
        ],
        "properties": {
          "office": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "enum": [
              "APPROVED",
              "REJECTED",
              "NOT_REACHED"
            ],
            "description": "An actual completed office decision. After rejection later offices have no decision and no issued document."
          },
          "rule": {
            "type": "string",
            "description": "The published prerequisite applied by this office."
          },
          "received": {
            "type": "string",
            "description": "The preceding evidence presented for review."
          },
          "finding": {
            "type": "string",
            "description": "The authority’s reason for approval, rejection, or not being reached."
          },
          "document": {
            "type": "string",
            "description": "Human-readable summary of the immutable Java document or rejection notice."
          }
        }
      },
      "ExecutionEnvelope": {
        "type": "object",
        "required": [
          "schema",
          "text",
          "personnel",
          "trace"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-execution/v1"
          },
          "text": {
            "type": "string",
            "description": "Exactly the original proclamation body, including line endings, or the original error text."
          },
          "personnel": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PersonnelDossier"
              },
              {
                "type": "null"
              }
            ],
            "description": "Observed personnel decisions from this execution, or null when no such record was produced."
          },
          "trace": {
            "type": "object",
            "required": [
              "events",
              "omitted"
            ],
            "properties": {
              "events": {
                "type": "array",
                "maxItems": 50000,
                "items": {
                  "$ref": "#/components/schemas/ExecutionEvent"
                }
              },
              "omitted": {
                "type": "integer",
                "minimum": 0,
                "description": "Number of observations beyond the finite collector allowance."
              }
            }
          },
          "precedent": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PrecedentDossier"
              },
              {
                "type": "null"
              }
            ],
            "description": "Optional current reuse case; absent or null when the court did not convene."
          }
        }
      },
      "ExecutionEvent": {
        "type": "object",
        "required": [
          "ordinal",
          "kind",
          "office",
          "finding",
          "document"
        ],
        "properties": {
          "ordinal": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[0-9]+$",
            "description": "Exact decimal ordinal, or null for a request-wide action. Strings preserve arbitrary precision."
          },
          "kind": {
            "type": "string",
            "description": "Semantic action actually observed: for example CACHE_MISS, HR_APPROVED, CLASSIFICATION, GLYPH_ACCEPTED, NOTARY, AUDIT_APPEND or EXTENDED_NOTARY."
          },
          "office": {
            "type": "string",
            "description": "The authority or component that performed the action."
          },
          "finding": {
            "type": "string",
            "description": "Observed inputs, outcome and reason. Observations describe completed acts; they are not authorizations."
          },
          "document": {
            "type": [
              "string",
              "null"
            ],
            "description": "Actual payload or document summary when one was emitted."
          }
        }
      },
      "PrecedentDecision": {
        "type": "object",
        "required": [
          "office",
          "state",
          "rule",
          "received",
          "finding",
          "document"
        ],
        "properties": {
          "office": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "enum": [
              "APPROVED",
              "REJECTED",
              "NOT_REACHED"
            ]
          },
          "rule": {
            "type": "string"
          },
          "received": {
            "type": "string"
          },
          "finding": {
            "type": "string"
          },
          "document": {
            "type": "string"
          }
        }
      },
      "PrecedentDossier": {
        "type": "object",
        "description": "Current reuse decisions bound to one immutable petition. These are not the historic records of producing the cached result. Case labels may repeat across invocations; in-memory document identity enforces custody.",
        "required": [
          "schema",
          "caseId",
          "purpose",
          "limit",
          "repositoryLimit",
          "bodyCharacters",
          "certifiedLines",
          "status",
          "steps"
        ],
        "properties": {
          "schema": {
            "type": "string",
            "const": "slopbuzz-precedent/v1"
          },
          "caseId": {
            "type": "string"
          },
          "purpose": {
            "type": "string",
            "enum": [
              "MANDATE",
              "REHEARSAL"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000
          },
          "repositoryLimit": {
            "type": "integer"
          },
          "bodyCharacters": {
            "type": "integer",
            "minimum": 0
          },
          "certifiedLines": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000,
            "description": "Equals limit only on approval; null after rejection."
          },
          "status": {
            "type": "string",
            "enum": [
              "APPROVED",
              "REJECTED"
            ]
          },
          "steps": {
            "type": "array",
            "minItems": 5,
            "maxItems": 5,
            "items": {
              "$ref": "#/components/schemas/PrecedentDecision"
            }
          }
        }
      }
    }
  }
}
