| 1 | --- |
| 2 | description: Create Brand workflow for an identity-only reusable workspace without an SVG page roster. |
| 3 | --- |
| 4 | |
| 5 | # Create Brand Workflow |
| 6 | |
| 7 | Enter this child workflow only after [`Create Template`](../create-template.md) dispatches `kind: brand`. |
| 8 | |
| 9 | ## Responsibility Boundary |
| 10 | |
| 11 | | Owner | Responsibilities | |
| 12 | |---|---| |
| 13 | | Create Template | Child-workflow dispatch plus the shared `library` / `project` scope, confirmation gate, collision preflight, registration, completion, and Generate PPTX handoff contract | |
| 14 | | Create Brand | End-to-end brand-specific analysis, identity brief, identity-only `design_spec.md`, adopted brand assets, and brand-specific validation | |
| 15 | |
| 16 | **Hard rule — child workflow, not a top-level route**: Create Brand executes only inside Create Template. It uses the parent workflow's single shared confirmation/preflight/registration contract and never creates a competing entry route or second confirmation gate. |
| 17 | |
| 18 | **Hard rule — identity only**: A brand owns color, typography, logo, voice, and icon style. It owns no canvas, spacing system, page roster, SVG prototype, Master/Layout graph, placeholder contract, or preview PPTX. |
| 19 | |
| 20 | ## Invocation Points |
| 21 | |
| 22 | 1. Use §1–2 below for brand analysis and identity fields, then execute Create Template Steps 2–3 with those child-owned fields. |
| 23 | 2. After Create Template Step 4 resolves and preflights `<template_workspace>`, use §3 to materialize the confirmed identity. |
| 24 | 3. Run §4, then return its evidence to Create Template Steps 5, 7, and 8. Create Brand always skips shared Step 6. |
| 25 | |
| 26 | ## 1. Brand Input Analysis |
| 27 | |
| 28 | | Input | Read path | Facts it may support | |
| 29 | |---|---|---| |
| 30 | | SVG logo | Read the SVG and inspect literal `fill` / `stroke` values | Logo asset and literal colors | |
| 31 | | PNG/JPG logo | Inspect visually | Logo asset and approximate colors | |
| 32 | | Official brand site or manual | Convert/read the source | Published colors, fonts, voice, usage restrictions | |
| 33 | | Branded PPTX/PDF | Use the existing source converters and theme/package facts | Observed colors, typography, logo assets, and tone | |
| 34 | | Pasted text, Markdown, or text document | Use direct text or the parent workflow's converted text output | Explicit identity values, usage rules, voice, and restrictions | |
| 35 | | Verbal brief | Use the user's words directly | Any identity field the user explicitly supplies | |
| 36 | | Mixed reference bundle | Run every applicable row and retain per-source provenance | Combined identity evidence; unresolved conflicts go to the shared confirmation gate | |
| 37 | | No reference | No analysis | Empty skeleton only when the user explicitly requests it | |
| 38 | |
| 39 | Use these provenance labels in the proposal and final Color Scheme table: |
| 40 | |
| 41 | - `fact` — literal value from an official asset or manual. |
| 42 | - `user` — value explicitly authored by the user, whether in chat, pasted text, or a user-written brief file. |
| 43 | - `approx` — visual estimate or pattern observed in an existing deck/site. |
| 44 | |
| 45 | **Hard rule — no inferred brand truth**: Do not promote a visual estimate, presentation convention, or observed neutral into an official brand fact. Do not invent semantic success/warning/error colors. |
| 46 | |
| 47 | ## 2. Identity Brief Fields |
| 48 | |
| 49 | Surface these through Create Template's single shared Step 2–3 gate: |
| 50 | |
| 51 | | Field | Requirement | |
| 52 | |---|---| |
| 53 | | Brand display name and use cases | Required | |
| 54 | | Primary color | Required; `#RRGGBB` plus provenance | |
| 55 | | Secondary/accent/text/background colors | Include only when confirmed or supported by evidence; every written color uses `#RRGGBB` plus provenance | |
| 56 | | Title/body typography | Required; retain provenance in surrounding prose when it is not official | |
| 57 | | Logo | Optional; identify the default presenting entity, file, usage rule, and any trademark restriction | |
| 58 | | Voice and tone | Required; formality, grammatical person, emoji policy, abbreviation policy | |
| 59 | | Icon style | Required; `linear`, `filled`, `duotone`, or a confirmed custom description | |
| 60 | | Adopted assets | Optional; list included and excluded candidates with reasons | |
| 61 | |
| 62 | When the user explicitly requests an empty skeleton, all identity values remain TODO comments, materialization stops after writing the file, and Create Template reports that the workspace is incomplete and unregistered. |
| 63 | |
| 64 | ## 3. Materialize the Confirmed Brand |
| 65 | |
| 66 | Create Template supplies an already resolved and collision-checked `<template_workspace>`. Write only: |
| 67 | |
| 68 | ```text |
| 69 | <template_workspace>/ |
| 70 | ├── templates/ |
| 71 | │ └── design_spec.md |
| 72 | ├── images/ # optional; logo/photos/illustrations only when adopted |
| 73 | └── icons/ # optional; branded icon overrides only when adopted |
| 74 | ``` |
| 75 | |
| 76 | Do not create optional directories or `exports/` solely to retain empty paths. An initialized project may already contain empty scaffolding; leave it untouched and do not report it as Brand output. Bitmap references from `templates/design_spec.md` use `../images/<name>`; branded icon references use `../icons/<name>`. |
| 77 | |
| 78 | Write this personality-only schema: |
| 79 | |
| 80 | ```markdown |
| 81 | --- |
| 82 | brand_id: <confirmed slug> |
| 83 | kind: brand |
| 84 | summary: <one-line use case> |
| 85 | primary_color: "#XXXXXX" |
| 86 | --- |
| 87 | |
| 88 | # <Display Name> Brand Specification |
| 89 | |
| 90 | > Identity-only preset. No SVG page roster — pages are composed freely under these constraints. |
| 91 | |
| 92 | ## I. Brand Overview |
| 93 | | Property | Value | |
| 94 | |---|---| |
| 95 | | Brand Name | <display name> | |
| 96 | | Use Cases | <summary> | |
| 97 | | Tone | <one-line tone summary> | |
| 98 | | Sources | <official URL or bundled asset paths; include version/retrieval date when known> | |
| 99 | |
| 100 | ## II. Color Scheme |
| 101 | | Role | HEX | Provenance | |
| 102 | |---|---|---| |
| 103 | | primary | #XXXXXX | fact \| approx \| user | |
| 104 | | secondary | #XXXXXX | fact \| approx \| user | |
| 105 | | accent | #XXXXXX | fact \| approx \| user | |
| 106 | |
| 107 | ## III. Typography |
| 108 | | Role | Family | Weight | |
| 109 | |---|---|---| |
| 110 | | title | <family> | <weight> | |
| 111 | | body | <family> | <weight> | |
| 112 | |
| 113 | ## IV. Logo |
| 114 | - File: `../images/logo.<ext>` or `none` |
| 115 | - Usage: cover-only \| every-page \| never |
| 116 | |
| 117 | ## V. Voice & Tone |
| 118 | - Formality: formal \| neutral \| casual |
| 119 | - Person: informal-you \| formal-you \| we \| none |
| 120 | - Emoji: allowed \| forbidden |
| 121 | - Abbreviations: spell-out-first \| common-abbrev-allowed |
| 122 | |
| 123 | ## VI. Icon Style |
| 124 | - Preference: linear \| filled \| duotone \| <custom> |
| 125 | |
| 126 | ## VII. Visual Assets |
| 127 | - Include this section only when real `images/` or `icons/` assets exist. |
| 128 | ``` |
| 129 | |
| 130 | Preserve a supplied logo's extension. When multiple lockups exist, use descriptive filenames and name exactly one default presenting entity. Keep subsidiary/campaign alternates explicit; create another brand workspace when their identity differs materially. |
| 131 | |
| 132 | ## 4. Brand Validation |
| 133 | |
| 134 | Return these facts to Create Template: |
| 135 | |
| 136 | - `templates/design_spec.md` exists and contains `brand_id`, `kind: brand`, `summary`, and `primary_color`. |
| 137 | - `brand_id` matches the confirmed workspace ID in library scope. |
| 138 | - Required sections I–VI exist; Page Roster and Signature Design Elements do not exist. |
| 139 | - No `*.svg`, `native_structure_mode`, Master/Layout, placeholder, canvas, or page-count fields were written. |
| 140 | - Every color is `#RRGGBB`, the primary table row matches frontmatter, and provenance is `fact`, `approx`, or `user`. |
| 141 | - Every referenced asset exists under the same workspace; this workflow created no optional directory or `exports/` directory solely to leave it empty. Pre-existing initialized-project scaffolding is allowed and remains untouched. |
| 142 | |
| 143 | For both scopes, Create Template Step 5 validates the portable Brand contract without registration: |
| 144 | |
| 145 | ```bash |
| 146 | python3 skills/ppt-master/scripts/svg_quality_checker.py "<template_workspace>/templates" --template-mode |
| 147 | ``` |
| 148 | |
| 149 | For `library` scope, additionally validate the directory/index identity with: |
| 150 | |
| 151 | ```bash |
| 152 | python3 skills/ppt-master/scripts/register_template.py <brand_id> --kind brand --dry-run |
| 153 | ``` |
| 154 | |
| 155 | After that gate passes, Create Template Step 7 registers with: |
| 156 | |
| 157 | ```bash |
| 158 | python3 skills/ppt-master/scripts/register_template.py <brand_id> --kind brand |
| 159 | ``` |
| 160 | |
| 161 | For `project` scope, run only the shared validator, skip both registrar commands, and report `Not registered (project workspace)`. Downstream consumption always uses the explicit workspace root through Generate PPTX Step 3; a bare brand name never activates it. |
| 162 |