/** * `validateAppDocument` — the app-document VALIDATOR (01-core §9). * * Split from the document's shapes, which stay in `@vendoai/core`: core's own * store conformance kit parses a stored app row with `appDocumentSchema` * (`core/src/conformance/memory-store.ts`), so the shape has to be readable * from below. The validator does not — it reaches the component map, which is * app-generation format and lives here. One definition either way; the door * re-exports both halves. */ import { type AppDocument } from "@vendoai/core"; export type AppDocumentValidation = { ok: true; app: AppDocument; } | { ok: false; error: { code: string; message: string; }; }; /** * FINAL SPEC v1 — a BUILT app never leaves its owner, refused at each of the * four doors a copy travels through (share, fork, export, placement). * * The bundle is arbitrary code whose one door is the guarded tool bridge, so a * copy would run its author's code with the recipient's own permissions. That * seam ships with its own egress/consent story; screens are untouched. * * EITHER signal refuses. The two are written by one CAS, but a seal that dies * between them — or the `ui: "bundle"` a build sets before its first seal — * leaves a row carrying one and not the other, and both of those are still a * built app. */ export declare function refuseBundleArtifact(doc: AppDocument, operation: string): void; /** 01-core §9 */ export declare function validateAppDocument(input: unknown): AppDocumentValidation; //# sourceMappingURL=app-validation.d.ts.map