shopflow-suite

Builder Read Models

This page describes the smallest truthful builder-facing substrate that Shopflow exposes today.

In plain language:

builders can already read Shopflow’s typed workflow truth. they still cannot call a public API or public HTTP MCP endpoint.

If you are entering this area for the first time, start with Builder Start Here before diving into schemas or commands. If you want the checked-in JSON first, use Builder Examples Index.

Today-Ready Surface

Today Shopflow exposes a read-only builder snapshot built from existing runtime truth:

Code entrypoint:

import { createBuilderAppSnapshot } from '@shopflow/runtime';

Snapshot schema:

import { builderAppSnapshotSchema } from '@shopflow/runtime';

Shopflow also exposes a workflow decision brief that turns the same runtime truth into one concise operator-facing explanation:

import { operatorDecisionBriefSchema } from '@shopflow/contracts';
import { createOperatorDecisionBrief } from '@shopflow/core';

Shopflow also exposes a workflow-copilot brief contract for the same main-flow explanation layer:

import { workflowCopilotBriefSchema } from '@shopflow/contracts';

Example payloads:

API Substrate First

Shopflow already ships a machine-readable contract that keeps today’s builder-facing substrate separate from later API / MCP / CLI ambitions:

import {
  builderIntegrationSurface,
  builderIntegrationSurfaceSchema,
} from '@shopflow/contracts';

This is useful when a builder needs one honest answer to:

Shopflow also ships one read-only provider-runtime seam contract:

import {
  providerRuntimeSeam,
  providerRuntimeSeamSchema,
} from '@shopflow/contracts';

What this means in plain language:

this is the “power-strip boundary” for external runtime acquisition. it tells you where Switchyard-style provider/runtime work may plug in, while making it explicit that merchant live proof still belongs to Shopflow’s own evidence discipline.

Use ADR-004 when you need the longer explanation of that ownership split.

Repo-Local Outcome Tooling

Shopflow now also ships one repo-local, read-only outcome bundle command:

pnpm builder:write-outcome-bundle

And one repo-local runtime payload writer for supported current-scope apps:

pnpm builder:write-runtime-payloads -- --app <appId>

And one checked-in example rack refresh command:

pnpm builder:refresh-example-rack

And one repo-local read-only CLI prototype:

pnpm cli:read-only -- agent-integration-bundle
pnpm cli:read-only -- agent-target-packet --target codex
pnpm cli:read-only -- agent-target-packet --target claude-code
pnpm cli:read-only -- agent-target-packet --target openclaw
pnpm cli:read-only -- integration-surface
pnpm cli:read-only -- runtime-seam
pnpm cli:read-only -- runtime-consumer --base-url http://127.0.0.1:4317
pnpm cli:read-only -- public-distribution-bundle
pnpm cli:read-only -- outcome-bundle --app ext-kroger
pnpm cli:read-only -- submission-readiness

What it does in plain language:

It emits one joined JSON bundle that combines the integration-surface contract, checked-in builder read-model examples, and generated artifact summaries plus source pointers when release artifacts already exist.

On the pnpm cli:read-only -- outcome-bundle path, Shopflow now reuses existing generated payload files or the checked-in example rack. It does not silently regenerate .runtime-cache/builder/* behind a read-only command.

This is useful when a builder wants:

Output artifact:

Checked-in examples:

That bundle now also includes:

Use Integration Recipes when you want the shortest command or file path for a concrete read-only consumption flow.

What This Is Good For

This surface is useful when a builder wants to:

What This Is Not

This is not:

Those remain later-stage surfaces.

Example Payload

Today / Current-Scope Now / Later / No-Go / Owner-Decision

Today:

Current-scope now:

Later:

No-go for current stage:

Owner-decision: