# Surface Leak Check

Run this before shipping any app, report, or deliverable built with the CASE skill pack.

## Pass Conditions

The work passes the leak check only if all of these are true:

- CASE facts came from the live API or hosted customer/data-dictionary docs.
- The app/report did not carry a local CASE schema parser.
- The app/report did not carry copied allowed-value tables.
- The app/report did not infer framework membership from publisher URL hostnames or code families.
- The app/report did not repair, dedup, or rewrite CFItem or CFAssociation graph data.
- External IDs were stored through Alignment only.
- CFPackage export was treated as spec-pure and did not include Alignment.
- Writes used Idempotency-Key and, for updates/deletes, If-Match.
- Follow-up writes used X-Case-ETag or a fresh detail GET.
- Pagination followed links.next on the canonical base URL.

## Stop Conditions

Stop and report a surface leak if the user's job requires any of these:

- A local CASE graph traversal engine to make basic browsing work.
- A local import validator to decide whether a CFPackage should be accepted.
- A hard-coded map of CASE association types or target types.
- A local standards catalog for framework rows that should come from `CFDocuments`.
- A publisher-specific rule such as "if URI host is X, this belongs to framework Y."
- A local dedup rule for CFItems, CFAssociations, or Alignments.
- A way to store external resource IDs inside `CFAssociation`, `CFItem.extensions`, or CFPackage export.
- A tenant routing primitive outside the JWT `tenantId`.
- A retry or concurrency primitive other than Idempotency-Key, ETag, If-Match, and X-Case-ETag.

## Routing The Finding

Use this routing when writing feedback:

- Architecture: the surface never committed the primitive the job needs.
- Data dictionary: the field exists but its meaning, constraints, range, nullability, or allowed values are not clear enough to build safely.
- Customer website: the public docs omit the steps a cold integrator needs.
- Implementation: the live API contradicts the approved architecture, data dictionary, or customer website.

Include the exact endpoint, request, response status, response body, and the customer job that was blocked.
