Artifact schemas
Artifact schema files are the center of the Workflow DSL. They define:- the artifact type
- its parent requirement
- its lifecycle
- its payload shape
- its document semantics
Full example
This example is intentionally planning-oriented so it demonstrates document sections while relying on Fabriqa’s automatic metadata for targeting, tags, and status.status, tags, target_scope, and target_workspace_project_ids to this artifact type. Workflow authors do not repeat those fields in the schema unless Fabriqa later makes one of them workflow-authored.
artifact
The artifact block defines the artifact’s identity.
id,name, andphaseare required.phasemust reference a phase fromworkflow.yaml.idmust match the key used inworkflow.yaml -> artifacts.
parent
parent declares the required parent artifact type.
- Omit
parentfor root artifacts. - When present, Fabriqa derives child relationships automatically.
- Agents should create the artifact under a real parent instance of that type.
lifecycle
Define lifecycle state directly in the artifact schema.
id or name because:
- the lifecycle only belongs to this artifact file
- Fabriqa does not reference inline lifecycles independently
- repeating lifecycle labels adds verbosity without adding runtime value
- one artifact file contains its own state machine
- authors do not need to jump between schema files to understand lifecycle state
- built-in workflows intentionally repeat lifecycle blocks when several artifact types share the same states
schema
schema is a Fabriqa-authored schema block that compiles to canonical JSON Schema internally.
It is the source of truth for:
- field names
- types
- enums
- required fields
- nested structures
- field descriptions
- field-local requiredness
- use
type: objectat the root - Fabriqa treats artifact payload objects as closed by default in V1, so define every supported field explicitly
- agents may only create or update fields that are declared in
schema.propertiesplus built-in system fields such astags,target_scope,target_workspace_project_ids, andtouched_workspace_project_ids - declare requiredness on the field itself with
required: trueorrequired: false - use
descriptionaggressively - keep field names stable
document
document defines the semantic document structure for the artifact detail view.
document to say:
- which fields form the main document body
- the order of the main reader experience
ui block in V1.
Fabriqa already knows how to render:
- markdown string fields
- enums and primitive values
- string arrays such as tags, project IDs, and touched files
- system fields such as
status,created_at, andupdated_at
workflow.yaml -> ui. Dashboard and root artifact viewer behavior are product-defined in V1.
document.sections
Use document.sections for the main document body.
Preferred pattern:
- Prefer
fieldfor almost every section. fieldshould usually point to a string property rendered as markdown.- Use
kind: markdownfor both string fields andarray<string>fields. Arrays of strings should render as bullet lists in the document body. - If one markdown section uses multiple
fields, Fabriqa combines those values into one markdown block in reading order instead of rendering them as separate widgets. - Use
fieldsonly when you need one structured section to display several primitive or list fields together.
| Key | Required | Purpose |
|---|---|---|
id | Yes | Stable identifier |
title | Yes | Section heading in the document view |
field | Recommended | The primary field for markdown-like sections |
fields | Optional | Escape hatch for structured multi-field sections |
kind | Optional | Viewer hint such as markdown or structured |
System fields
Fabriqa injects system fields into every artifact even though you do not declare them inschema.
| Field | Meaning |
|---|---|
title | Artifact title |
description | Artifact summary description |
status | Current lifecycle status |
priority | Optional artifact priority |
phase | Current workflow phase |
assignee | Claimed agent or assignee |
tags | Freeform string tags any agent can attach to the artifact |
target_scope | Built-in planning target scope such as workspace or workspace_project |
target_workspace_project_ids | Built-in planning target project IDs when the artifact is project-targeted |
touched_workspace_project_ids | Built-in execution tracking for projects actually changed |
created_at | Creation timestamp |
updated_at | Last update timestamp |
completed_at | Completion timestamp |
display_id | Human-friendly display identifier |
schema.
tags is the default cross-workflow tagging mechanism.
- every artifact has
tagsas a system-managed string array - agents can add or update tags when they decide they are useful
- workflows can surface tags automatically in artifact metadata, sidebar views, dashboard filters, and later UI features
- tags are metadata, not part of the main document body
Automatic metadata
Fabriqa infers artifact metadata automatically. The rule is simple:- if a field is used by
document.sections, it is part of the document body - every other schema-defined field becomes metadata automatically
- built-in system fields such as
status,tags,target_scope,target_workspace_project_ids,touched_workspace_project_ids, and timestamps also appear as metadata automatically
How artifact documents render
Fabriqa renders artifact documents with one simple rule: the body should read like a markdown document, not like a form. That means:- markdown sections render with Fabriqa’s read-only markdown renderer
- markdown string arrays render as bullet lists
- non-section primitive fields and small arrays render as compact metadata under the title
- child artifacts do not render again in the document body because the hierarchy already appears in the artifact viewer tree
- relations, linked chats, and activity belong in the contextual rail, not the document body
- one clear title
- a small metadata row under the title
- markdown sections in natural reading order
- minimal chrome and restrained separators
- checklist widgets for narrative requirements
- repeating child artifacts inside both the tree and the body
- turning relations or chat links into main document content
- heavy card stacks that make the artifact feel like an admin panel
Document-first authoring guidance
Fabriqa renders artifacts best when you separate document content from operational metadata.Put it in document.sections | Leave it as automatic metadata |
|---|---|
| summaries | status |
| rationale | priority |
| architecture notes | phase |
| implementation notes | current stage |
| verification narratives | timestamps |
| rollout notes | target scope |
summaryas markdownimplementation_notesas markdownverification_summaryas markdownverification_verdictleft as metadatatouched_workspace_project_idsleft as metadata
- large arrays of nested objects used as the main body of a design document
- artifact viewers that feel like forms instead of documents
Scope and associations
Fabriqa workflows often need explicit project targeting and structural associations.Planning scope
Fabriqa provides built-in planning target fields. Workflow authors should not redefine them inschema.properties.
Rules:
- use
target_scope: workspacewhen the artifact applies to the whole workspace - use
target_scope: workspace_projectwhen the artifact targets one or more specific workspace projects - require
target_workspace_project_idsonly whentarget_scopeisworkspace_project - do not store project names as canonical artifact data; resolve names from workspace metadata using the IDs
- some planning artifacts intentionally span the whole workspace before decomposition narrows to individual projects
- cross-project migrations, shared platform work, release coordination, and standards or policy artifacts do not naturally belong to one project
- third-party workflows may operate above single-project scope as well
intentmay be workspace-scoped for multi-project planningunit,story,work_item, andboltoften becomeworkspace_projectscoped as planning gets more concrete
Execution tracking
Fabriqa also providestouched_workspace_project_ids as a built-in field when agents want to record what was actually changed during execution.
Parent associations
Useparent for structural ownership such as:
work_itemunderintentwalkthroughunderruntest_reportunderbolt
Continue reading
Workflow file
Go back to the workflow envelope and orchestration rules.
Agents and connectors
Continue into SAF files, prompts, templates, and authoring rules.
AI-DLC definition
See these artifact-schema patterns applied to the built-in AI-DLC workflow.
Workflow glossary
Review the shared vocabulary for document semantics and lifecycles.
