Builders As Descriptions
The central move in metaBuilder is to treat a builder as a description before it is treated as an executable artifact.
A description is typed data. Parameters, sources, dependencies, tools, operations, outputs, evidence, and runtime declarations are all generated datatypes with named constructors and fields. A builder spec is an inhabitant of the base description type, and it is checked against that type before anything is built. A spec that is missing a required field or carries the wrong shape is rejected at description time, not at build time.
Because the builder is data, its parts are available to inspect and reinterpret. A description says which parts exist and how they relate without committing to the single thing that could be done with them. That separation is what makes multiple views possible.
Functions And Descriptions
A function gives an answer when it is called. It can hide everything that happened on the way to the answer.
A description can be read before any answer is produced. It can be checked, summarized, documented, or interpreted into a build. The description is not less precise than a function. It is precise in a form that supports more than one use.
Typed All The Way Down
The types are not decoration. They are the same descriptions the views read and the same descriptions the documentation and schemas are generated from. A field added to a description becomes visible to validation, to dependency analysis, to the rendered docs, and to materialization at once, because all of them read the one typed source.
Structure Before Execution
When a builder is described structurally, its components become available to generic interpretations. Validation inspects the shape. Dependency analysis inspects tools and operations. Dry-run summarizes intent. Plan-view renders an executable plan. Materialization produces the artifact.
The build still happens. metaBuilder adds the structure around it that makes the builder inspectable before it runs.