ObjectStackObjectStack

Solution Blueprint

Solution Blueprint protocol schemas

Solution Blueprint Schema (ADR-0033 §4 — plan-first authoring)

The structured-output target an AI agent emits for a high-level goal

("build me a project-management system") instead of transcribing a field

list. It is a simplified proposal shape — deliberately lighter than the

full ObjectSchema / ViewSchema / DashboardSchema.

The apply_blueprint tool expands each entry into a proper metadata body

and stages it as a draft (so the per-type Zod schema still validates the

real artifact at write time).

The blueprint is never persisted on its own: the agent presents it for

conversational confirmation/edit (cheap), and only on human approval does it

batch-draft. This is the safety valve for low-specificity input.

Source: packages/spec/src/ai/solution-blueprint.zod.ts

TypeScript Usage

import { BlueprintApp, BlueprintDashboard, BlueprintField, BlueprintNavItem, BlueprintObject, BlueprintSeed, BlueprintView, SolutionBlueprint, SolutionBlueprintStrict } from '@objectstack/spec/ai';
import type { BlueprintApp, BlueprintDashboard, BlueprintField, BlueprintNavItem, BlueprintObject, BlueprintSeed, BlueprintView, SolutionBlueprint, SolutionBlueprintStrict } from '@objectstack/spec/ai';

// Validate data
const result = BlueprintApp.parse(data);

BlueprintApp

Properties

PropertyTypeRequiredDescription
namestringApp machine name (snake_case)
labelstringoptionalApp display label
iconstringoptionalLucide icon for the App Launcher
navObject[]optionalNavigation entries; omit to auto-surface every created object and dashboard

BlueprintDashboard

Properties

PropertyTypeRequiredDescription
namestringDashboard machine name (snake_case)
labelstringoptionalHuman-readable dashboard label
widgetsObject[]optionalWidgets to place on the dashboard

BlueprintField

Properties

PropertyTypeRequiredDescription
namestringField machine name (snake_case)
labelstringoptionalHuman-readable field label
typeEnum<'text' | 'textarea' | 'email' | 'url' | 'phone' | 'password' | 'secret' | 'markdown' | 'html' | 'richtext' | 'number' | 'currency' | 'percent' | 'date' | 'datetime' | 'time' | 'boolean' | 'toggle' | 'select' | 'multiselect' | 'radio' | 'checkboxes' | 'lookup' | 'master_detail' | 'tree' | 'image' | 'file' | 'avatar' | 'video' | 'audio' | 'formula' | 'summary' | 'autonumber' | 'composite' | 'repeater' | 'record' | 'location' | 'address' | 'code' | 'json' | 'color' | 'rating' | 'slider' | 'signature' | 'qrcode' | 'progress' | 'tags' | 'vector'>Field data type
requiredbooleanoptionalWhether the field is required
referencestringoptionalTarget object name for lookup / master_detail relationship fields
optionsObject[]optionalChoices for select / multiselect / radio fields

BlueprintNavItem

Properties

PropertyTypeRequiredDescription
typeEnum<'object' | 'dashboard'>What this nav entry opens
targetstringObject or dashboard machine name to surface (snake_case)
labelstringoptionalNav entry label (defaults to the target label/name)
iconstringoptionalLucide icon name for the nav entry

BlueprintObject

Properties

PropertyTypeRequiredDescription
namestringObject machine name (snake_case)
labelstringoptionalHuman-readable singular label
descriptionstringoptionalWhat this object represents
fieldsObject[]Fields to create on the object

BlueprintSeed

Properties

PropertyTypeRequiredDescription
objectstringTarget object name (snake_case)
recordsRecord<string, any>[]Rows to seed

BlueprintView

Properties

PropertyTypeRequiredDescription
objectstringObject this view displays (snake_case)
namestringView machine name (snake_case)
labelstringoptionalHuman-readable view label
typeEnum<'list' | 'form' | 'kanban' | 'calendar'>View kind
columnsstring[]optionalField names shown as columns (in order)
groupBystringoptionalREQUIRED for kanban views: the select/status field whose options become the board columns (e.g. "stage", "status"). Without it a kanban renders as a plain list.

SolutionBlueprint

Properties

PropertyTypeRequiredDescription
summarystringOne-line description of the proposed solution
assumptionsstring[]Design assumptions made from the underspecified goal
questionsstring[]optionalAt most 1-2 structure-deciding questions to confirm before building
objectsObject[]Objects (tables) to create
viewsObject[]optionalViews to create
dashboardsObject[]optionalDashboards to create
appObjectoptionalThe navigation shell (app) that surfaces the created objects/dashboards to end users
seedDataObject[]optionalSuggested seed data (reported, not auto-applied in Phase C)

SolutionBlueprintStrict

Properties

PropertyTypeRequiredDescription
summarystringOne-line description of the proposed solution
assumptionsstring[]Design assumptions made from the underspecified goal
questionsstring[] | nullAt most 1-2 structure-deciding questions to confirm before building, or null
objectsObject[]Objects (tables) to create
viewsObject[] | nullViews to create, or null
dashboardsObject[] | nullDashboards to create, or null
appObject | nullThe navigation shell (app) that surfaces the created objects/dashboards, or null

On this page