bundle-incomplete
"A section folder is missing one of its contract files."
Venue: check — A section folder is missing one of its contract files.
A section folder must contain, as files, at the folder root, exactly these three:
| File | Declares |
|---|---|
Renderer.tsx |
the markup |
section.ts |
schema and Props, as named exports |
fixtures.ts |
fixtures, as a named export |
This is the folder’s only structural rule, and there is exactly one legal shape it can take — an empty folder is told all three missing files, and a folder short one file reports exactly that one.
Two near-misses do not satisfy it:
- a directory named
section.ts/— the check wants a file; - a file at
components/section.ts— the contract files are looked for at the folder root, not searched for down the tree.
Everything else in the folder is unconstrained. components/, hooks/, utils/, any
nesting, any number of support modules, islands, stylesheets: the check has no
opinion about them, and neither does the rest of the kit.
Reason
Section titled “Reason”The contract files are the platform’s entire interface to a section. The publisher
reads the schema to know what the section contains and how each slot is filled,
preview reads the fixtures, and Renderer.tsx is the markup. A folder missing any of
them cannot be loaded as a section.
That freedom has one non-obvious consequence, worth knowing before it surprises you:
every file in the folder is part of the section’s identity. The content hash covers
the whole folder, not just the contract files — so editing a helper, a util, or even a
comment produces a new section version on the next publish, exactly as editing
Renderer.tsx would.
Create the missing file at the folder root. A section that fills nothing still declares
a schema — its slots simply carry no fill:; a section with no designed states still
declares fixtures.
Before
Section titled “Before”sections/hero/ Renderer.tsx section.ts components/ Headline.tsxOne violation: fixtures.ts is missing. components/ is not one of the contract
files — it was never a problem.
sections/hero/ Renderer.tsx section.ts fixtures.ts ← added components/ Headline.tsxexport const fixtures = defineFixtures( schema, (scenario) => ({ base: scenario("luxuryMultiUnit", { headline: "A mansard Victorian in the heart of Jamaica Plain", }), }),);See also
Section titled “See also”- Sections and their declarations — the three contract files, what each declaration declares, and the types they satisfy.
missing-slot-marker— the check that runs once the contract files exist: every editable slot in the schema has a marker in the JSX.