Service: job event stream, async in-memory backend, preview routes
Ported from PR #15 (packages-side surface only; the fork's dev UI page is intentionally dropped - the API surface is the product): - job_events table + repository, worker emits stage transitions, additive GET /v1/clones/:id/events polling route. The fork's hand-written migration was never registered in Drizzle's journal (it silently never applied); regenerated properly via drizzle-kit from schema.ts with the (job_id, seq) index declared, and verified against a live Postgres - In-memory backend moves to the documented enqueue-202 + poll contract with single-flight BUSY guard; POST honors backend httpStatus - app-preview static serving routes; the preview BUILD half is deferred until the compiler exports buildApp/DEFAULT_HARNESS_DIR - routes 404 cleanly until then - preview option threaded through core types; cache key intentionally unchanged while the flag is inert All workspaces typecheck; api 18/18, core 13/13, worker 1/1 pass; migration verified applying (table + index + FK) on postgres:16. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
f991f469cf
commit
bbe4a5643b
@@ -9,6 +9,7 @@ export type ResolvedCloneOptions = CloneOptions & {
|
||||
interactions: boolean;
|
||||
components: boolean;
|
||||
motion: boolean;
|
||||
preview: boolean;
|
||||
};
|
||||
|
||||
export function resolveCloneMode(options: CloneOptions = {}): CloneMode {
|
||||
@@ -53,5 +54,8 @@ export function resolveCloneOptions(options: CloneOptions = {}): ResolvedCloneOp
|
||||
interactions: options.interactions ?? true,
|
||||
components: options.components ?? true,
|
||||
motion: options.motion ?? true,
|
||||
// Preview builds are the single-page product surface; multi-page exports can be
|
||||
// large, so previewing a site clone stays an explicit opt-in.
|
||||
preview: options.preview ?? mode === "single",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@ export type CloneOptions = {
|
||||
mode?: CloneMode;
|
||||
styling?: CloneStyling;
|
||||
framework?: CloneFramework;
|
||||
/** Build a browsable static export of the clone into `public/app-preview/`
|
||||
* (served by the API's app-preview route). Defaults ON for single-page clones. */
|
||||
preview?: boolean;
|
||||
verify?: boolean;
|
||||
/** DB/worker mode: persist the clone first, then attach verify in the background. */
|
||||
asyncVerify?: boolean;
|
||||
@@ -75,7 +78,7 @@ export type CaptureSanity = {
|
||||
blocked: boolean; // bot/egress wall text detected
|
||||
};
|
||||
|
||||
export type CloneTimings = { captureMs: number; generateMs: number; verifyMs?: number };
|
||||
export type CloneTimings = { captureMs: number; generateMs: number; verifyMs?: number; previewMs?: number };
|
||||
|
||||
export type RouteInfo = { route: string; representativeOf?: string };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user