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.
System fields
Fabriqa injects system fields into every artifact even though you do not declare them inschema.
Do not duplicate them in
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.
Good pattern:
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.
