Tools / design_preview
design_preview
Open a versioned composition as a running React/Vue app with recorded measurements.
Generated from @oods/foundry 0.10.1
One of the 20 tools your assistant sees by default.
Use it when reviewing generated behavior or edits; use fidelity_preview instead for static diagrams, wireframes or mockups. Returns preview URLs, composition lineage, editable fields and measured/notMeasured evidence. Supply compositionId/version or object/context; action selects render, edit, compare or versions. Edits create a new version. framework and preferences select rendering; contextItems attach fetched evidence. runPath selects captured-run records, analysisPath selects derived comparisons, and recordId chooses an exact record. Writes version artifacts and measurements; domain actions still require consumer integration. Reference: TOOL-REFERENCE.md#design_preview; full schema: oods://schemas/design_preview.input.json.
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
action | "render" | "compare" | "edit" | "versions" | "accept" | no | render (default): open the version as the running app. See full schema for details. |
compositionId | string | no | An existing composition from design.compose; with no version, its latest version opens. |
version | integer | no | The version of compositionId to open. |
object | string | no | Object name from the OODS registry (e.g., 'Subscription', 'User'); with context, composes a new composition (version 1) and opens it. |
context | "detail" | "list" | "form" | "timeline" | "card" | "inline" | "workflow" | no | View context for object-aware composition. See full schema for details. |
framework | "react" | "vue" | "both" | no | Which generated app to compile and serve; both frameworks by default, each at its own URL. |
preferences | object | no | Layout and appearance preferences. |
against | object | no | action compare: the version on the right; the left is compositionId@version. |
edit | object | no | action edit: the one operation to apply to compositionId@version. The parent version is never changed. |
contextItems | object[] | no | Decisions and evidence about this object that YOU already fetched, shown beside the running preview and stored on the version. See full schema for details. |
contextSearched | object[] | no | What you searched that returned nothing, so an empty panel is a statement rather than a silence: the reader can tell 'nothing was found' from 'nobody asked'. |
runPath | string | no | A Stage1 run directory on this machine (out/stage1/<suite>/<run-uuid>) whose REAL records this version shows: the run itself for Run, its findings for Finding, its attested artifacts for CapturedArtifact. See full schema for details. |
observationRunPath | string | no | A Stage1 run directory on this machine (out/stage1/<suite>/<run-uuid>). See full schema for details. |
presentation | "stage1-inspection" | no | Named Stage1 inspection presentation: omit the accessibility score and prominently show measurement limits. Source records remain unchanged. |
recordId | string | no | Exact record ID for a fresh runPath or analysisPath detail/card/inline view. Unknown IDs refuse before composition; existing versions retain their selected record. |
analysisPath | string | no | Portable Stage1 derived-analysis directory. Composes Comparison or ComparisonSignal from attested retained bytes, separate from runPath. Only read-only contexts; recordId selects an exact signal. |
Outputs: render or edit
| Name | Type | Required | Description |
|---|---|---|---|
warnings | object[] | no | Advisory warnings for unmet team component contract obligations; preview remains available. |
componentContracts | object[] | no | Advisory shared-scenario component reports. Each declared obligation is met, unmet or not checked with a reason; browser availability never blocks generation. |
status | "ok" | yes | |
action | "render" | "edit" | yes | |
compositionId | string | yes | |
version | integer | yes | |
parentVersion | integer | null | yes | |
operation | "compose" | "recompose" | "reorder-region" | "swap-slot" | "reorder-fields" | "seed" | yes | |
head | string | null | yes | |
schemaHash | string | yes | Canonical hash of the version's composed schema. |
object | string | yes | |
context | string | yes | |
previewUrl | string | yes | The first compiled framework's page with lineage and controls; open it in a browser. |
previews | object[] | yes | |
host | object | yes | |
brand | string | yes | |
theme | "light" | "dark" | "hc" | yes | |
recordPath | string | yes | |
durationMs | number | yes | |
measured | object | yes | What this version carries as measured and what it does not: the code.generate validation receipt per framework, artifact.certify for every placed chart, axe-core per framework and brand/theme scope run inside the running page. The page's measurement panel says the same; nothing is claimed that did not run. |
edit | object | no | action edit only: the operation that produced this version and the version it derives from. |
editable | object | yes | What an edit can name on this version: the regions in order, each slot with the composer's candidates, the field order per region, the current seed. |
Outputs: compare
| Name | Type | Required | Description |
|---|---|---|---|
status | "ok" | yes | |
action | "compare" | yes | |
left | object | yes | |
right | object | yes | |
compareUrl | string | yes | Both running apps side by side with the what-changed and both measurement panels. |
diffUrl | string | yes | |
frameworks | "react" | "vue"[] | yes | Frameworks both versions carry, shown side by side. |
identical | boolean | yes | |
differenceCount | integer | yes | |
diff | object | yes | The structural what-changed the preview host computes over the two version records: regions added/removed/reordered, slot components, nodes including slot subtrees, props of matched nodes, field order per region, the seed, and artifact files whose hash moved per framework both versions carry. Definition rows name objectSchema fields added, removed or changed, with a schemaHash fallback for unitemized changes. Identical versions have equal schema hashes and zero differences. |
host | object | yes | |
durationMs | number | yes |
Outputs: versions
| Name | Type | Required | Description |
|---|---|---|---|
status | "ok" | yes | |
action | "versions" | yes | |
compositionId | string | yes | |
latest | integer | yes | |
versions | object[] | yes | |
accepted | null | object | yes | The standing acceptance (the last one in accepted.json), or null when no version was accepted. |
host | object | yes | |
durationMs | number | yes |
Outputs: accept
| Name | Type | Required | Description |
|---|---|---|---|
status | "ok" | yes | |
action | "accept" | yes | |
compositionId | string | yes | |
version | integer | yes | |
parentVersion | integer | null | yes | |
operation | string | yes | |
object | string | yes | |
context | string | yes | |
accepted | object | yes | The acceptance just recorded in accepted.json. |
acceptances | integer | yes | How many acceptances accepted.json holds now; the last is the standing one. |
acceptedPath | string | yes | |
previewUrl | string | yes | |
host | object | yes | |
durationMs | number | yes |
A real call
Recorded by this site's harbor run, step preview, with the published OODS Foundry
0.10.1.
Its input:
{
"compositionId": "cmp-c013f1ee92f9",
"version": 1
} Its result, first lines:
{
"status": "ok",
"action": "render",
"compositionId": "cmp-c013f1ee92f9",
"version": 1,
"parentVersion": null,
"operation": "compose",
"head": "af36064f0f930eec023a3e02e0f1280cf8dbe8f7",
"schemaHash": "sha256:1b8472f61bf90259ad97727c0bf1c165d13ca58121659973c5e321d111a71375",
"object": "Warehouse",
"context": "detail",
"previewUrl": "http://127.0.0.1:57947/preview/cmp-c013f1ee92f9/1?framework=react&brand=Harbor&theme=light",
"previews": [
{
"framework": "react",
"url": "http://127.0.0.1:57947/preview/cmp-c013f1ee92f9/1?framework=react&brand=Harbor&theme=light",
"appUrl": "http://127.0.0.1:57947/preview/cmp-c013f1ee92f9/1/app?framework=react&brand=Harbor&theme=light",
"moduleUrl": "http://127.0.0.1:57947/preview/cmp-c013f1ee92f9/1/module.js?framework=react&brand=Harbor&theme=light",
"artifactContentHash": "sha256:2fc24e4ddcd1204110c81e9ce149286ef1a835ab43f619fa64827d81b0bc6730",
"compiled": {
"bytes": 55612,
"sha256": "sha256:6b6e0f5266544ea58489042fb4ca8546b1cb296833223b47ca298fe5a10c04f2"
},
"generatedFor": {
"brand": "Harbor",
"theme": "light",
"chartScoped": false
}
},
{
"framework": "vue",
"url": "http://127.0.0.1:57947/preview/cmp-c013f1ee92f9/1?framework=vue&brand=Harbor&theme=light",
"appUrl": "http://127.0.0.1:57947/preview/cmp-c013f1ee92f9/1/app?framework=vue&brand=Harbor&theme=light",
"moduleUrl": "http://127.0.0.1:57947/preview/cmp-c013f1ee92f9/1/module.js?framework=vue&brand=Harbor&theme=light",
"artifactContentHash": "sha256:ac0cfd23e92875e08e831d5eceec2f8c4ccb04ec266974c671c3d3ccd7e286b2",
"compiled": {
"bytes": 73416,
"sha256": "sha256:d32dca2c34cc08f41cbab2900f9e2b244c3ec834c3b9ab33b99c63efb48a0a51"
},
"generatedFor": {
"brand": "Harbor",
"theme": "light",
"chartScoped": false
}
}
],
"host": {
"url": "http://127.0.0.1:57947",
"port": 57947,
"compositionsDir": "~/.oods-foundry/compositions"
},
"brand": "Harbor",
"theme": "light",
"recordPath": "~/.oods-foundry/compositions/cmp-c013f1ee92f9/versions/1.json",
"componentContracts": [
{
"framework": "react",
"mappingId": "harbor-team-button",
"component": "Button",
"source": {