/** * GUCDI — `greenfield status` core (pure). Computes where a greenfield project * is in the PRD → stories → brand → LCR → trace pipeline, and the next action. * It is also the **scope-completeness signal**: a scope is "complete" when every * addressable question is answered, the trace is green, the whole-app LCR is * built, and the brand is set — only then does the backend phase begin. * * The LCR is a WHOLE-APP mock (not per-story): one clickable app over a shared * SQLite data adaptor. So LCR progress is staged — data model → schema → data * adaptor → app shell → surfaces — and coverage is "declared surfaces reachable * in the app", not "stories with an @story marker". * * Pure + unit-tested; the IO (reading PRD/specs/brand/LCR) is in ./index.ts. * See docs/plans/vibe-whole-mock-lcr.md. */ export interface GreenfieldSpecFact { storyId: string; /** Has requirement provenance (prd_ref anchor or source_issue). */ anchored: boolean; /** Count of unresolved *addressable* open questions (block scope-complete). */ addressableQuestions: number; } /** Whole-app LCR build facts (from the plan + the mock filesystem). */ export interface GreenfieldLcr { /** Total UI surfaces (routes) declared across specs. 0 = no UI declared. */ surfacesDeclared: number; /** Plan entities (the unified data model). */ entities: number; /** Cross-story data-model conflicts (block schema-gen). */ conflicts: number; /** The LCR Drizzle schema exists (`vibe schema`). */ schemaPresent: boolean; /** The SQLite data adaptor exists (`vibe seed` → db.ts + seed + queries). */ dataAdaptorPresent: boolean; /** The clickable app exists (`vibe app` → router/shell). */ appPresent: boolean; /** Declared surfaces whose route resolves to a real route in the app router. */ surfacesBuilt: number; } export interface GreenfieldInput { prdInitiatives: number; specs: GreenfieldSpecFact[]; brandPresent: boolean; traceViolations: number; lcr: GreenfieldLcr; } export interface GreenfieldStage { name: string; done: boolean; detail: string; } export interface GreenfieldStatus { stages: GreenfieldStage[]; scopeComplete: boolean; /** The single next action to advance the pipeline (or the backend handoff). */ nextAction: string; } export declare function computeGreenfieldStatus(input: GreenfieldInput): GreenfieldStatus; //# sourceMappingURL=status.d.ts.map