Document 11 of 14 · docs/NEW-TEMPLATE-SKILL.md
new-template skill, draftSPEC.md section 8 says the skill is extracted after the invoice proves the pattern, the way new-tool came out of measureandbuy's paint calculator. This draft exists so the traps already found do not have to be found twice. The build session that ships the invoice turns it into ~/.ai/skills/new-template/SKILL.md and deletes this file.
CATALOG.md; the top ten results looked at as printed pages, not screenshots; what they get wrong on paper (margins, ink, a name that cannot fit). One paragraph in meta.json copy.description notes.fields.json first: what a person needs to change and nothing more. Every text field gets a max. Every long field decides whether it gets assist. Lists get a cap. The compute string is the only arithmetic..sheet in physical units. @page carries the default size only; the runtime swaps it. Two faces at most, from data/fonts.md, as static instances. Colours only through --t-*. Every editable region is a fixed box with data-max. Light-ink theme included. Decoration is CSS or SVG we drew.pdfcheck on the free file (page count, box size, FontFile2 present, Type3 absent, credit line present).shots.mjs for preview, OG and pin. Look at the pin at phone size once.copy.mjs drafts; a person rewrites the description, the five FAQs, the pin text and the OG line into meta.json; human-voice lint.build.mjs (catalog, landing page, customizer, free file, sitemap), the category page, related grids, the homepage "new this month" if it is new this month. Month pages if meta.months is set.HANDOFF.md: what shipped, what the paper showed, anything the next template should know.spikes/render/)@page cannot be selected by a class. The paper size is a <style id="page-size"> the runtime writes. A template that puts two @page rules in its CSS gets the last one, always.display: grid beats the UA [hidden] rule. Restate [hidden] { display: none !important } in every template.data-max box with max-height one line short of its own default text flags itself; that is the guard working. Fix the box, do not loosen the guard.data-ready after document.fonts.ready, not on load. The renderer waits for the attribute; set it early and the PDF ships fallback fonts.meta.orientation, not a CSS trick. The runtime writes Letter landscape; the sheet's width and height swap with the landscape class.r or v inside a compute string in a way that shadows the values object. Same hoisting trap as measureandbuy's diagrams.assets/fonts/.textContent; the values script is serialised with < escaped. A template that innerHTMLs anything is a template that gets rejected.--t-* values and nothing else. A hard-coded hex in template.css is a theme that cannot exist and a light-ink mode that does not work.The free file downloads from www and opens in Preview and Acrobat; the customizer passes the sweep at both widths; the overflow test fires and clears; pdfcheck passes; the page carries three valid JSON-LD blocks and the Rich Pin fields; it is in the sitemap, the category page and two related grids; and the paper photo is in the handoff.