Builders
shipped 1.0.0A builder is how cwp reads and writes a page builder’s design system. Two
ship: bricks and none. elementor validates in cwp.yml and refuses at run
time with the reason. A schema cannot say “designed, not built”, so the
dispatcher says it instead.
builder:
id: bricks
options:
child_theme: example-child
export_dir: bricks
wp_user: 1
builder.id names the page builder rather than switching one on. none is
plain WordPress: Gutenberg, classic, a block theme. It is a supported
configuration, not a degraded one.
What that looks like in a run: cwp pull carries six
artifacts, and the design system is one of them. A project whose builder has no
design system skips that artifact in silence rather than reporting it absent
on every run. The absence is a fact about the project, not a finding about the
run. Nothing else changes.
cwp refuses the older bricks: { enabled } block and names the replacement in
the fix hint.
Why the builder’s name is in the artifact
The design system travels as --only bricks and lives in bricks/. The
builder’s own commands read cwp bricks audit and cwp bricks post-types.
A provider is 1:1 with an environment. A builder is 1:1 with nothing. Bricks is a theme; Elementor and Oxygen are plugins, and one site can run several with different pages on each. So a name that did not say which builder would have to guess, or take a flag to disambiguate.
bricks/ does not hold a generic design system either. It holds Bricks-format
JSON; Elementor’s equivalent is a kit stored as a post. A directory called
design-system/ would promise a portability that does not exist.
Their surfaces differ in the same way: Elementor has no abilities API, so the whole ability transport has no counterpart there.
What the seam guarantees
Nothing outside tools/builders/ compares against a builder id. A structural
test fails the build on one, with a single permanent exception: cwp init has
to ask which builder this project uses before a builder exists to ask.
The visible consequence is cwp doctor: it holds no
Bricks-specific knowledge of its own. It asks whichever builder the project
configured and splices in what comes back. So a builder: none project gets no
Bricks checks at all, rather than a screen of skips.