exposure-cross-surface
| Field | Value |
|---|---|
| ID | exposure-cross-surface |
| Version | 1.0.0 |
| Mode | drift |
| Layer | Stripe |
| Category | contract |
| Severity | 🔴 blocking |
| SLA | 60,000 ms |
| Depends on | none |
| Source | apps/api/__gates__/exposure-cross-surface.gate.ts |
What it asserts
No static surface (MCP catalog, docs spec, MDX, search index, full.json, action catalog) advertises an op absent from the exposure manifest's live channel.
Run it locally
bun run gates --gate=exposure-cross-surfaceSee also
driftmode- Stripe layer
- Allowlists — how to bound a known finding with an expiration
- Contributing — how to evolve this gate or write a new one
Generated by apps/design/scripts/generate-gate-pages.ts from the gate's source-of-truth metadata. Edit this page by editing the gate file's description / version / etc.
e2e-entity-lifecycle
Full Create → Manage → Exit lifecycle of an entity passes via Playwright against a running apps/app + test DB.
exposure-manifest-drift
apps/api/__generated__/exposure-manifest.json matches the compiler output; every listed op exists in the spec, all 347 ops are exposed-or-denied per mode, and specHash matches.