# Stash PDF metadata client

This slice generates a read-only Stash client for the response contract in
`vernonkeenan/stash` draft PR #16 at provider commit
`b2f5b4a6ae5ff507dfdc86bb7b9ee5a9bb924131`.

The generated surface contains only:

- `GET /v1/pdfs`, with bounded `limit` and `offset`;
- `GET /v1/pdfs/{pdfId}`; and
- response metadata fields `ID`, `Filename`, `Title`, and `URI`.

The provider spec retains a deprecated `POST /v1/pdfs` compatibility route
that always fails closed. Lib deliberately does not generate that operation.
It also narrows the provider's legacy `Document` definition to the four fields
the PR #16 handlers populate, so document bytes, render inputs, tenant IDs, and
legacy ownership fields cannot enter the consumer contract.

Both reads require one caller-supplied `runtime.ClientAuthInfoWriter` that
writes the native service credential to `X-API-Key` and forwards only the
`kvSession` cookie. The generated operations retain that single compound
writer. Callers must not forward the browser's complete cookie header.

`swagger/client/stash-pdf-metadata.yaml` is the reproducible consumer
projection. `scripts/release.sh regen` uses it only for Stash while continuing
to copy the complete provider spec into the normal internal and external
documentation locations.

## Dependency and release gate

This Lib PR may be reviewed while Stash PR #16 is open, but it must not be
released for production consumption before the provider PR is merged and its
deployment gates are satisfied. In particular, Stash deployment remains
blocked on:

1. the governed PDF tenancy migration from `go/db` commit
   `5e3c03d5d52c8328708897032fcc213f548bc667`;
2. the exact `stash:pdf:read` scope grant;
3. canonical Keenan Vision tenant configuration; and
4. the provider's production no-write smoke test.

This client slice applies no database change, grants no scope, changes no
credential, creates no release, and performs no deployment.
