Presentations
Presentations is for serious, high-polish presentation work where "clean" is
not enough. The target is an editable PowerPoint deck that feels like a strong
editor, a strong analyst, and a strong designer built it together.
Use this skill for analytics narratives, investor/operating reviews, strategy
stories, product/business performance decks, and any PPTX task where the user
asks to beat a reference deck.
Operating Contract
Use artifact-tool presentation JSX only. The bundled Codex runtime provides
@oai/artifact-tool version 2.7.3 or newer and exposes
@oai/artifact-tool/presentation-jsx.
Do not require or import a separate presentation runtime package. PPTX
export/render behavior must be accessed through artifact-tool.
For generated raster images or reference comps, use the Codex imagegen tool.
Bundled scripts may write imagegen prompt files, but must not call external
image APIs or read API keys.
Thread-scoped paths:
SKILL_DIR=<absolute path to the installed Presentations skill>
THREAD_ID=${CODEX_THREAD_ID:-manual-<timestamp-or-short-random-suffix>}
WORKSPACE=${TMPDIR:-/tmp}/codex-presentations/$THREAD_ID/<task-slug>
SLIDES_DIR=$WORKSPACE/slides
PREVIEW_DIR=$WORKSPACE/preview
LAYOUT_DIR=$WORKSPACE/layout
ASSET_DIR=$WORKSPACE/assets
QA_DIR=$WORKSPACE/qa
OUTPUT_DIR=<user-provided output dir if any, otherwise $WORKSPACE/output>
FINAL_PPTX=$OUTPUT_DIR/<relevant-deck-title-slug>.pptx
Use absolute paths in commands and handoffs. Keep all generated planning text
notes, preview PNGs, contact sheets, layout JSON, imagegen prompt files,
temporary reference images, and other scratch files inside this thread-scoped
$WORKSPACE. Keep only final deliverables in $OUTPUT_DIR. If the user
provides an external output directory, write or copy only final deliverables
there; generated .txt plans, contact sheets, previews, layout files, prompt
files, and generated scripts must still stay under $WORKSPACE.
Name the final PPTX with a short, relevant title derived from the deck topic or
requested deliverable. Do not use generic filenames such as output.pptx,
deck.pptx, or deck.final.pptx.
Never use a shared scratch folder such as .presentation_workspaces,
presentation-workspaces, presentation_workspaces, out, or a bare
repo-local deck slug unless the path includes $THREAD_ID. If CODEX_THREAD_ID
is unavailable, generate a manual id with timestamp plus a short random suffix.
North Star
The deck must win the contact-sheet test. At thumbnail size, it should show a
coherent visual system, distinct slide rhythms, and evidence-led storytelling.
At readable size, every slide should have a claim, a proof object, and no filler.
This skill rejects "serviceable" output. A deck can pass layout checks and still
fail. If it looks like a generic SaaS dashboard, consulting card grid, or
autogenerated template after replacing the company name, keep iterating.
Mandatory Workflow
- Confirm the task mode.
- Extract the source story.
- Write the claim spine.
- Lock the design system.
- Plan the contact sheet.
- Build editable artifact-tool presentation JSX slides.
- Render previews and layout JSON.
- Score against the comeback rubric.
- Iterate the weakest slides.
- Export the final PPTX only after the rendered deck beats the target or the
remaining gap is explicitly documented.
- Clean up generated planning text notes, QA scratch files, contact sheets,
preview images, generated slide modules/scripts, layout JSON, manifests,
prompt text files, and other temporary images before the final response.
Task Modes
reference-beating: user supplied or named a deck to beat. This is the
default when a reference PPTX is present.
template-following: user supplied a source/template deck whose visual system
must be inherited.
create: no deck/template is supplied; build from prompt and sources.
targeted-edit: small changes to an existing deck.
When both a source deck and a better reference deck exist, separate them:
- source deck: content, required sections, facts, existing material.
- reference deck: quality bar, rhythm, taste, and proof that a stronger output
is possible.
Do not blindly clone the reference. Beat it by improving story precision,
composition variety, chart clarity, whitespace, and final render quality.
Deck Profile Router
After task mode, choose exactly one primary deck-profile. This is a hard
routing step, not a labeling exercise. The profile determines which proof
objects, source rules, visual density, asset rules, and QA gates are blocking.
Profiles:
finance-ir: earnings, investor relations, operating reviews, financial
analysis. Requires exact reported figures, unit discipline, source footnotes,
bridges, tables, and disclosure logic.
product-platform: SaaS/platform/product narratives. Requires architecture
maps, workflow diagrams, adoption proof, product-to-financial linkage, and
no generic feature-card grids.
gtm-growth: GTM, marketing, consumer growth, subscription ecosystems,
mobility, customer engagement. Requires a visible growth loop, segment or
cohort proof, monetization bridge, and brand-aware rhythm.
engineering-platform: developer, AI, infrastructure, data, security, and
technical platform decks. Requires accurate system diagrams, technical labels
that survive executive simplification, and metrics tied to the architecture.
strategy-leadership: investor-day, board, transformation, and market
strategy decks. Requires chapter discipline, market framing, strategic bets,
and transition slides that carry the thesis.
consumer-retail: lookbooks, clienteling, luxury, consumer-brand, campaign,
travel, lifestyle, food, fashion, beauty, people, places, animals, sports,
playful/kids visual storytelling, and other image-led decks where the audience
needs to visually inspect the subject. Requires real assets or explicit asset
provenance, image quality, editorial hierarchy, and client-ready copy.
template-following: user supplied a template/source deck whose style must
be preserved. Requires template-audit.txt and deviation-log.txt before any
redesign.
targeted-edit-data: add or edit a data/comparison slide. Requires exact
calculations before visual work and a native-looking insertion into the
existing deck.
targeted-edit-media: add headshots, logos, screenshots, or other media.
Requires identity/source verification, consistent crops, and preservation of
the source deck layout grammar.
appendix-heavy: dense appendix, tables, disclosures, or source packs.
Requires index/page markers, readable small-type thresholds, table grammar,
and explicit source-density rules.
If more than one profile applies, pick the profile that creates the highest
delivery risk as primary, then list secondary gates in the claim spine. Example:
a finance investor deck with a supplied template is finance-ir primary and
template-following secondary.
When a profile is selected, read its corresponding file under
$SKILL_DIR/profiles/ if the task is substantial or unfamiliar:
finance-ir.md
product-platform.md
gtm-growth.md
engineering-platform.md
consumer-retail.md
template-and-edit.md
appendix-heavy.md
Create $WORKSPACE/profile-plan.txt with:
- task mode
- primary deck-profile
- secondary profile gates, if any
- required proof objects
- source/asset requirements
- brand authenticity constraints for logos, icons, mascots, screenshots, and
other identity assets
- profile-specific QA gates
- known missing inputs
Phase 0: Source And Reference Read
For every source or reference deck:
- Render it to PNGs or PDF pages.
- Make a contact sheet.
- Extract slide text.
- Identify which slides are content sources, which are visual targets, and
which patterns are anti-patterns.
For source links:
- Browse or otherwise retrieve the actual source page.
- For finance/product narratives, exhaust official linked materials such as
earnings decks, supplements, filings, and IR PDFs before omitting customer,
cohort, module, bookings, retention, guidance, or mix metrics.
- Extract exact metrics and source dates.
- Keep links in source notes and in a quiet deck footer or appendix.
- Never invent missing metrics to make a chart prettier.
Brand authenticity gate:
- Treat logos, mascots, app icons, product UI, character marks, badges, partner
marks, and customer marks as identity assets.
- Do not draw, trace, approximate, or stylize a company logo, mascot, app icon,
or signature brand mark from scratch unless the user explicitly asks for an
unofficial concept.
- Use a verified source asset with provenance, use a user-provided asset, or
omit the identity asset entirely.
- When an official asset cannot be verified or embedded cleanly, rely on color,
typography, layout, product language, and reported metrics as brand cues
instead of inventing a pseudo-logo or decorative icon.
- Record every identity asset in
$WORKSPACE/source-notes.txt with source,
provenance, and why it belongs in the deck.
- For template-following and source-deck tasks, inspect which identity assets
are official in the source. Preserve or borrow only verified assets; do not
create lookalike marks to fill visual gaps.
Create:
$WORKSPACE/source-notes.txt
$WORKSPACE/reference-audit.txt
$WORKSPACE/data.json when metrics/charts are used
$WORKSPACE/template-audit.txt for template-following or targeted-edit modes
$WORKSPACE/deviation-log.txt when inheriting a source deck visual system
For template-following and targeted-edit modes, template-audit.txt must include:
- preserve: visual rules that must survive
- improve: weak spots that can be upgraded
- do not imitate: source artifacts that should not be copied
- brand/assets: logos, colors, imagery, type, and crop language
- insertion contract: how new slides or objects join the existing deck
Phase 1: Narrative Spine
Before designing, write the story as slide claims. This is binding.
Every non-appendix slide must have:
- a kicker: 1-3 words that names the role, e.g.
EXPANSION DRIVERS
- a claim title: a conclusion, not a topic label
- a proof object: one chart, table, timeline, diagram, or visual comparison
- a support note: concise, factual, and source-backed
For finance/product narratives, a slide with only one thin chart usually fails.
Prefer one dominant proof object plus a compact context rail, variance table, or
callout stack when it improves the argument. Reject proof objects whose metric
movement is too small to carry the claim unless they support a larger bridge.
Product maps must show product-to-business linkage: module or workflow,
adoption signal, expansion/monetization logic, or efficiency impact.
Bad title: Revenue and margin trends
Good title: Growth slowed, but the margin engine kept expanding.
Bad title: Expansion drivers
Good title: Backlog is compounding faster than revenue.
If a title can be used after swapping the company name, sharpen it.
Create $WORKSPACE/claim-spine.txt with:
- thesis
- audience
- one-line arc
- slide list with claim, proof object, source, and omission notes
Phase 2: Design System Lock
Create $WORKSPACE/design-system.txt before writing slide modules.
The design system must define:
- slide size, usually
1280x720
- background system
- typography pair using installed fonts only
- color palette with usage rules
- chart grammar
- diagram grammar
- connector grammar
- container / box grammar
- source/footer grammar
- page marker grammar
- title/kicker grammar
- data-label grammar
- brand asset policy and identity-asset provenance
- allowed brand cues versus forbidden logo/icon/mascot approximations
- allowed layout families
- banned motifs
For premium analytics decks, prefer:
- warm paper or deep ink backgrounds, not default pale dashboards
- a display serif or refined display face for claims
- a utilitarian sans for labels
- hairline rules instead of box outlines
- open composition instead of repeated cards
- direct labels on charts instead of heavy legends
- fewer objects with stronger hierarchy
- Kickers must align as one optical unit: marker center and label center share the
same y-axis, and letter-spaced all-caps labels must be vertically centered in a
box with enough breathing room to avoid low-looking baselines.
- Use a canonical kicker construction rather than hand-tuning each slide:
- marker and label must be named as a pair, e.g.
kicker-marker and
kicker-label, or kicker-01-marker and kicker-01-label
- marker and label boxes should share the same vertical center within
<= 1px
- the label box must use middle vertical alignment and enough height to avoid
low-looking glyphs after render/export
- if multiple kicker rows appear on a slide, suffix the pair names consistently
so QA can verify each row
Do not use a one-note palette. Do not let teal, navy, beige, purple, or gray
dominate without a deliberate secondary contrast.
Phase 3: Contact-Sheet Plan
Before building slides, create $WORKSPACE/contact-sheet-plan.txt.
For a 10-slide deck, use at least 5 distinct macro-layout families, such as:
- cover with metric rail
- editorial product map
- horizontal bar proof with margin notes
- donut or mix proof with ranked evidence table
- line chart with right-side KPI stack
- sequential bar chart with side summary rail
- two-series cash chart with margin callout
- roadmap timeline
- dense appendix table
- dark appendix/source page
Hard gates:
- no more than 2 card-grid slides in a 10-slide deck
- no 3 consecutive slides may share the same macro layout
- no repeated
title + subtitle + boxed panel grid cadence
- no rounded card default unless the data relationship requires containment
- no decorative boxes around prose
The contact sheet must look authored before details are read.
Phase 4: Editable Build
Build one ESM slide module per slide in $SLIDES_DIR, exporting numbered
functions such as:
export async function slide01(presentation, ctx) {
const slide = presentation.slides.add();
// editable artifact-tool presentation JSX content
return slide;
}
Prefer native editable shapes, lines, text, tables, and chart-like constructs.
For charts, native chart helpers are allowed, but authored editable chart
systems built from shapes are acceptable when they give better label placement
and visual polish.
Structured Visual Precision Contract
Charts, diagrams, connectors, boxes, tables, and flows are high-risk proof
objects. Treat them as geometry systems, not decoration.
Before authoring any structured visual, define:
- what the visual must prove
- the primary reading order
- each node / mark / series and what it means
- each edge / connector and what relationship it encodes
- each container / box and what grouping or containment it means
- the intended alignment, spacing, and label attachment rules
Hard build rules:
- Connected series must be rendered as one continuous editable path or as a
verified native chart series. Do not fake a line with separately rotated
rectangles, disconnected strokes, floating slashes, or decorative arrows.
- Every connected series must pass through its intended markers and preserve
the correct point order after render/export.
- In diagrams, connectors must visibly attach to the correct source and target,
follow the intended direction, avoid unrelated objects, and terminate cleanly
without ambiguous crossings.
- Do not use arrows unless directionality matters. If direction matters, arrow
heads must be consistent, legible, and semantically meaningful.
- Boxes must imply a real grouping, comparison, lane, stage, or containment
relationship. Remove containers that only decorate prose.
- Equal-role boxes must share exact height, alignment, padding, border logic,
and text treatment unless the hierarchy intentionally differs.
- Text inside boxes must have enough padding and never sit against edges,
collide with rules, or rely on shrink-to-fit as the default.
- Use a minimum
12px vertical interior padding for boxed prose / callouts and
16px when the box carries 2+ lines or dark-background copy. If a box only
looks correct with near-zero bottom room, enlarge the box or shorten the copy.
- Any text that starts inside a filled callout / metric container and spills
past that container edge is a hard failure, even if the overflowed line is no
longer classified as an in-box child by a layout script.
- Labels must anchor to the mark, series, box, or connector they describe. A
viewer should never need to guess which label belongs to which object.
- Repeated metric rails / KPI stacks must preserve their full grammar on every
item: if the pattern is
value + label + context, every item must visibly
render all three pieces with adequate contrast against its background.
- Preview-visible defects override layout-script silence: orphan labels, missing
values in a repeated metric pattern, markers sitting on top of copy, or any
object that looks obviously accidental at full size must be treated as a build
failure even when export and layout checks succeed.
- Tables and matrices must preserve row/column grammar under thumbnail review:
headers, baselines, alignment, and emphasis must remain visually consistent.
- If a chart or diagram requires too many exceptions to remain clear, rebuild
it with a simpler visual rather than patching around geometry defects.
artifact-tool presentation JSX chart caveat:
- Try native
slide.charts.add(...) when the API can represent the chart.
- Always verify the exported PPTX package for
ppt/charts/chart*.xml.
- If native chart parts are not preserved, or export throws
toProto /
setChangeHandler errors, switch to authored editable chart primitives
rather than shipping weak native charts.
- Do not style
chart.yAxis.majorGridlines unless freshly
verified; it can fail export with this[#h].toProto is not a function.
- Do not fake per-point bar colors by adding zero-valued helper series. If
native charts cannot express the visual cleanly, rebuild the chart with
editable shapes and direct labels.
- For line, trend, or connected-series visuals, prefer a verified native line
chart when the API can express the chart cleanly. If authored with
primitives, draw the series as one continuous editable custom path / polyline
through the data points.
- Do not construct a line series from individually rotated rectangles or short
segment shapes; these can export as detached slashes or broken pseudo-arrows.
- Record the choice in
$WORKSPACE/qa/comeback-scorecard.txt.
Use helper scripts copied with this skill:
node "$SKILL_DIR/scripts/render_artifact_slide.mjs" \
--workspace "$WORKSPACE" \
--slide-module "$SLIDES_DIR/slide-01.mjs" \
--output "$PREVIEW_DIR/slide-01.png" \
--layout "$LAYOUT_DIR/slide-01.layout.json"
node "$SKILL_DIR/scripts/build_artifact_deck.mjs" \
--workspace "$WORKSPACE" \
--slides-dir "$SLIDES_DIR" \
--out "$FINAL_PPTX" \
--preview-dir "$PREVIEW_DIR" \
--layout-dir "$LAYOUT_DIR/final" \
--contact-sheet "$PREVIEW_DIR/contact-sheet.png" \
--slide-count <n>
Presentation JSX source must resolve through artifact-tool. Do not bypass the
bundled runtime with unrelated package imports.
Editable primitives are encouraged for charts, diagrams, and abstract product
flows. They are not a license to fabricate brand marks. Do not create
brand-like icons, mascots, app marks, partner marks, or pseudo-logos as
decoration or to fill whitespace. If the asset is not verified, solve the slide
with stronger hierarchy, data, copy, or abstract shapes instead.
Phase 5: Comeback Rubric
Score the rendered contact sheet and full-size slides in
$WORKSPACE/qa/comeback-scorecard.txt.
Each dimension is 0-5:
story: titles are claims; sequence has a real arc
specificity: deck would fail the noun-swap test
rhythm: contact sheet has varied macro layouts
whitespace: slides breathe without feeling empty
chart clarity: charts prove one sentence, labels are direct, and geometry is
continuous / correctly attached
typography: type feels intentional, not default
restraint: no filler boxes, badges, or decorative clutter
precision: metrics and source notes are exact
coherence: one visual system across the deck
reference delta: visibly better than the target reference, when supplied
Required minimum before delivery:
- total score >= 44 / 50 when a reference is supplied; otherwise >= 40 / 45
- no dimension below 4
reference delta >= 4 when a reference is supplied; otherwise mark it n/a
and do not claim reference-beating
Profile gates are pass/fail and sit above the numeric rubric. A deck fails even
with a high visual score if the profile gate fails. Common profile blockers:
finance-ir: invented or unsupported metrics, mixed units, missing footnotes,
or charts that look good but do not reconcile to sources.
product-platform: generic feature cards, architecture boxes that say
nothing, module lists without adoption or monetization proof, or missing
adoption/business linkage.
gtm-growth: funnel labels without progression logic, weak brand fit,
fabricated brand marks, or monetization claims unsupported by proof.
engineering-platform: technically vague diagrams, labels stripped of real
meaning, or developer details that overwhelm the executive story.
strategy-leadership: chapter dividers without thesis movement or a market
frame that never returns in the operating plan.
consumer-retail: stock-looking imagery, weak crop quality, unverified asset
provenance, or client outreach copy that feels generic.
template-following: style drift from the source deck without an explicit
deviation reason.
targeted-edit-data: calculation mistakes, wrong ranking, or a new slide
that looks pasted in.
targeted-edit-media: unverified identities, inconsistent headshot crops, or
local layout damage.
appendix-heavy: unreadable tables, missing index, or source density that
hides the answer.
brand authenticity: fabricated logo, mascot, app icon, signature mark,
unverified product UI, or pseudo-official mark used as decoration.
If a reference deck is supplied, write a blunt slide-by-slide comparison:
- where this deck beats the reference
- where the reference still wins
- what changed after iteration
Phase 6: Mechanical Verification
Before final delivery:
- Confirm the final PPTX exists and is non-empty.
- Confirm the expected slide count in the package.
- Confirm no empty media files.
- Confirm chart package parts when native charts are required, or document why
authored editable chart primitives were used instead.
- Render every final slide to PNG through artifact-tool.
- Inspect the artifact-tool contact sheet at thumbnail size and the
full-size PNG renders for visual errors.
- During full-size render review, explicitly verify repeated UI grammars such as
KPI rails, step sequences, legends, and forecast strips for completeness and
contrast: no blank value slots, no same-color-on-background text, and no
decorative marks that collide with the reading path.
- For every chart, diagram, matrix, connector system, and box system, inspect
the rendered slide at full size and verify the intended geometry:
- connected lines are continuous and pass through the correct markers
- bars / dots / labels align to the same baseline or axis logic
- arrows and connectors attach to the intended objects and do not float
- arrows point in the intended reading direction
- boxes that share a role line up, carry equivalent padding, and do not clip
or crowd text
- kickers / eyebrow rows align optically: icon, rule, and label sit on one
centerline rather than a low or drifting text baseline
- Use the kicker naming convention so layout QA can verify centerline alignment;
un-named kicker rows are a QA gap, not a pass.
- boxed prose and callouts keep visible top/bottom breathing room, especially on
dark fills and multi-line statements
- grouped objects read as a coherent system at thumbnail size
- Inspect the contact sheet and full-size renders for unofficial logos, app
icons, mascots, product UI, partner marks, and customer marks. Confirm each
identity asset is verified in source notes or remove it.
- Do not require, bundle, or assume LibreOffice or any other external renderer.
If a compatible renderer is already available and the user asks for it, it may
be used as non-blocking extra QA only.
- Run layout checks and fix all errors. Warnings may remain only when they are
known false positives from intentional table/axis/label construction and the
rendered slide is clean.
- Deficient box padding and text overflow out of filled callouts are errors, not
acceptable warnings.
Phase 7: Final QA Ledger
Create $WORKSPACE/qa/comeback-scorecard.txt with:
- final score by rubric dimension
- primary deck-profile and profile gate pass/fail
- reference-deck comparison
- tool/runtime caveats
- package checks
- render checks
- accepted warnings or tradeoffs
Do not leave the scorecard as vague praise. It should name the remaining weak
spots if any exist.
Blocking Anti-Patterns
Fix these before delivery:
- title states a topic instead of a conclusion
- slide uses more than one dominant evidence object
- chart has a legend when direct labels would work better
- chart displays data but does not prove the title
- connected-series chart is rendered as detached strokes, floating slashes,
pseudo-arrows, or a path that misses its markers
- line or connector geometry changes meaning after render / export
- connector floats, attaches to the wrong object, crosses unrelated structure,
or points in an ambiguous direction
- arrows are decorative rather than semantic
- box system implies grouping that the content does not support
- equal-role boxes are visibly misaligned, inconsistently padded, or styled as
if they have different meanings
- label appears visually detached from the mark, series, connector, or box it
describes
- a repeated KPI / metric rail omits a required value, label, or context line on
any item
- a marker, node, glyph, or accent shape visibly sits on top of readable copy
- a value is technically present but visually lost because it has insufficient
contrast against the background
- table or matrix loses its row / column grammar at thumbnail size
- proof object is too thin to carry the claim
- product or architecture diagram lacks adoption, monetization, expansion, or
efficiency linkage
- visible containers are louder than the content
- rounded cards are used as default scaffolding
- three slides in a row share the same composition
- contact sheet reads as a template pack
- contact sheet has clean slides but weak information architecture
- body copy exists only to fill space
- appendix is clean but unreadable
- artifact-tool render has obvious wrapped labels, collisions, awkward vertical
text, or cramped callouts
- footer/source/page marker changes style
- kicker icon and label are not optically centered on the same row
- kicker rows are hand-built without named marker/label pairs, preventing QA
from verifying their alignment
- boxed prose appears pinned to the bottom edge or lacks visible vertical
breathing room
- typography falls back to default without intent
- low-resolution logo or rough image crop
- fabricated or approximated official logo, mascot, app icon, product UI, or
signature brand mark
- brand-like icon used just to fill whitespace
- unprovenanced partner/customer logos, product screenshots, or brand badges
- unsupported metric or vague source label
- output only matches the reference instead of beating it
Iteration Rule
Do not stop after the first export unless the comeback rubric passes. Iterate
the weakest 2-4 slides first, then rerender the full deck. Prefer a bold rebuild
of a weak slide over cosmetic nudge work.
If a model or tool cannot reach the reference quality, say exactly why and name
the remaining weakest slides. Do not call the deck done because a PPTX exists.
Subagents
Subagents are allowed when the user explicitly asks for them. Use them for:
- source metric extraction
- reference deck critique
- QA scoring
- appendix implementation from a fixed spec
- alternate prototype generation in a separate workspace
The main agent owns final story, visual system, integration, and QA. Never ship
a raw stitched deck from independent slide workers.
Matrix Battle Harness
Use this harness when validating or improving the skill across many prompts.
It creates deck-quality probes, not source-complete final decks, unless all
attachments and source data are available. The probe output is for stress
testing profile routing, visual grammar, proof-object quality, and QA gates.
Command:
node "$SKILL_DIR/scripts/run_prompt_battle.mjs" \
--prompts "$WORKSPACE/batch-prompts/slides_prompts_first25.json" \
--workspace "$WORKSPACE/batch-runs/full-25" \
--limit 25 \
--scale 0.55
The harness writes:
- one editable PPTX per prompt
- PNG previews for every slide
- per-prompt contact sheets
- aggregate first-slide and proof-object contact sheets
battle-summary.json
battle-summary.txt
After a battle run:
- run layout checks across every
layout/ directory
- confirm every PPTX has the expected slide count
- confirm no empty media files
- inspect aggregate contact sheets for sameness
- update this skill when repeated failures show a missing gate
Do not confuse a battle probe with a final customer deck. For final delivery,
rerun the normal workflow with the actual source attachments, exact metrics,
real imagery, and full reference comparison.
Final Delivery
After the final PPTX is exported and verified, run the cleanup helper:
node "$SKILL_DIR/scripts/cleanup_presentation_workspace.mjs" \
--workspace "$WORKSPACE" \
--output-dir "$OUTPUT_DIR"
The cleanup helper preserves final .pptx deliverables in $OUTPUT_DIR and
deletes scratch artifacts from the current thread-scoped $WORKSPACE:
- Delete generated planning and QA text notes such as
profile-plan.txt,
source-notes.txt, reference-audit.txt, claim-spine.txt,
design-system.txt, contact-sheet-plan.txt, battle-summary.txt, and
$WORKSPACE/qa/*.txt.
- Delete generated reference/imagegen prompt text files such as
*.imagegen.txt and reference-imagegen-prompts.txt.
- Delete rendered review artifacts such as
contact-sheet.png, preview PNGs,
temporary reference PNGs, and other temporary images that are not deliberately
embedded in the final deck.
- Delete generated per-run scripts and slide modules, including files under
$SLIDES_DIR. Do not delete the installed skill helper scripts under
$SKILL_DIR/scripts.
- Delete generated layout JSON, build manifests, and other per-run scratch
metadata.
- Do not delete user-provided source files, source decks, or assets that are
intentionally embedded in or required to regenerate the final deck.
- If the user explicitly asks for QA artifacts, keep only the requested
artifacts and mention that they were retained.
- Never delete sibling folders under
${TMPDIR:-/tmp}/codex-presentations/ or
any other thread's workspace.
If $OUTPUT_DIR is outside $WORKSPACE, the cleanup helper deletes
$WORKSPACE and does not clean the external output directory. That external
directory must contain only final deliverables, not scratch artifacts.
Do not attach or link contact-sheet.png, preview PNGs, generated scripts,
planning docs, JSON manifests, layout JSON, imagegen prompt files, or temporary
images unless the user explicitly asks for QA artifacts.
Do not mention that scratch or QA artifacts were cleaned up in the final
response; the final response should focus on the user-facing deck only.
Deliver:
- final
.pptx with a relevant deck-title filename, not a generic name such
as output.pptx or deck.final.pptx
- brief scorecard summary
- note any residual gap against the reference
The final response should be short and artifact-focused.
1---2name: presentations3description: Build premium editorial analytics PPTX decks with artifact-tool presentation JSX, using ruthless narrative editing, chart-first storytelling, rendered critique, and iteration until the output beats the reference deck.4---56# Presentations78`Presentations` is for serious, high-polish presentation work where "clean" is9not enough. The target is an editable PowerPoint deck that feels like a strong10editor, a strong analyst, and a strong designer built it together.1112Use this skill for analytics narratives, investor/operating reviews, strategy13stories, product/business performance decks, and any PPTX task where the user14asks to beat a reference deck.1516## Operating Contract1718Use artifact-tool presentation JSX only. The bundled Codex runtime provides19`@oai/artifact-tool` version 2.7.3 or newer and exposes20`@oai/artifact-tool/presentation-jsx`.2122Do not require or import a separate presentation runtime package. PPTX23export/render behavior must be accessed through artifact-tool.2425For generated raster images or reference comps, use the Codex imagegen tool.26Bundled scripts may write imagegen prompt files, but must not call external27image APIs or read API keys.2829Thread-scoped paths:3031- `SKILL_DIR=<absolute path to the installed Presentations skill>`32- `THREAD_ID=${CODEX_THREAD_ID:-manual-<timestamp-or-short-random-suffix>}`33- `WORKSPACE=${TMPDIR:-/tmp}/codex-presentations/$THREAD_ID/<task-slug>`34- `SLIDES_DIR=$WORKSPACE/slides`35- `PREVIEW_DIR=$WORKSPACE/preview`36- `LAYOUT_DIR=$WORKSPACE/layout`37- `ASSET_DIR=$WORKSPACE/assets`38- `QA_DIR=$WORKSPACE/qa`39- `OUTPUT_DIR=<user-provided output dir if any, otherwise $WORKSPACE/output>`40- `FINAL_PPTX=$OUTPUT_DIR/<relevant-deck-title-slug>.pptx`4142Use absolute paths in commands and handoffs. Keep all generated planning text43notes, preview PNGs, contact sheets, layout JSON, imagegen prompt files,44temporary reference images, and other scratch files inside this thread-scoped45`$WORKSPACE`. Keep only final deliverables in `$OUTPUT_DIR`. If the user46provides an external output directory, write or copy only final deliverables47there; generated `.txt` plans, contact sheets, previews, layout files, prompt48files, and generated scripts must still stay under `$WORKSPACE`.49Name the final PPTX with a short, relevant title derived from the deck topic or50requested deliverable. Do not use generic filenames such as `output.pptx`,51`deck.pptx`, or `deck.final.pptx`.5253Never use a shared scratch folder such as `.presentation_workspaces`,54`presentation-workspaces`, `presentation_workspaces`, `out`, or a bare55repo-local deck slug unless the path includes `$THREAD_ID`. If `CODEX_THREAD_ID`56is unavailable, generate a manual id with timestamp plus a short random suffix.5758## North Star5960The deck must win the contact-sheet test. At thumbnail size, it should show a61coherent visual system, distinct slide rhythms, and evidence-led storytelling.62At readable size, every slide should have a claim, a proof object, and no filler.6364This skill rejects "serviceable" output. A deck can pass layout checks and still65fail. If it looks like a generic SaaS dashboard, consulting card grid, or66autogenerated template after replacing the company name, keep iterating.6768## Mandatory Workflow69701. Confirm the task mode.712. Extract the source story.723. Write the claim spine.734. Lock the design system.745. Plan the contact sheet.756. Build editable artifact-tool presentation JSX slides.767. Render previews and layout JSON.778. Score against the comeback rubric.789. Iterate the weakest slides.7910. Export the final PPTX only after the rendered deck beats the target or the80 remaining gap is explicitly documented.8111. Clean up generated planning text notes, QA scratch files, contact sheets,82 preview images, generated slide modules/scripts, layout JSON, manifests,83 prompt text files, and other temporary images before the final response.8485### Task Modes8687- `reference-beating`: user supplied or named a deck to beat. This is the88 default when a reference PPTX is present.89- `template-following`: user supplied a source/template deck whose visual system90 must be inherited.91- `create`: no deck/template is supplied; build from prompt and sources.92- `targeted-edit`: small changes to an existing deck.9394When both a source deck and a better reference deck exist, separate them:9596- source deck: content, required sections, facts, existing material.97- reference deck: quality bar, rhythm, taste, and proof that a stronger output98 is possible.99100Do not blindly clone the reference. Beat it by improving story precision,101composition variety, chart clarity, whitespace, and final render quality.102103### Deck Profile Router104105After task mode, choose exactly one primary `deck-profile`. This is a hard106routing step, not a labeling exercise. The profile determines which proof107objects, source rules, visual density, asset rules, and QA gates are blocking.108109Profiles:110111- `finance-ir`: earnings, investor relations, operating reviews, financial112 analysis. Requires exact reported figures, unit discipline, source footnotes,113 bridges, tables, and disclosure logic.114- `product-platform`: SaaS/platform/product narratives. Requires architecture115 maps, workflow diagrams, adoption proof, product-to-financial linkage, and116 no generic feature-card grids.117- `gtm-growth`: GTM, marketing, consumer growth, subscription ecosystems,118 mobility, customer engagement. Requires a visible growth loop, segment or119 cohort proof, monetization bridge, and brand-aware rhythm.120- `engineering-platform`: developer, AI, infrastructure, data, security, and121 technical platform decks. Requires accurate system diagrams, technical labels122 that survive executive simplification, and metrics tied to the architecture.123- `strategy-leadership`: investor-day, board, transformation, and market124 strategy decks. Requires chapter discipline, market framing, strategic bets,125 and transition slides that carry the thesis.126- `consumer-retail`: lookbooks, clienteling, luxury, consumer-brand, campaign,127 travel, lifestyle, food, fashion, beauty, people, places, animals, sports,128 playful/kids visual storytelling, and other image-led decks where the audience129 needs to visually inspect the subject. Requires real assets or explicit asset130 provenance, image quality, editorial hierarchy, and client-ready copy.131- `template-following`: user supplied a template/source deck whose style must132 be preserved. Requires `template-audit.txt` and `deviation-log.txt` before any133 redesign.134- `targeted-edit-data`: add or edit a data/comparison slide. Requires exact135 calculations before visual work and a native-looking insertion into the136 existing deck.137- `targeted-edit-media`: add headshots, logos, screenshots, or other media.138 Requires identity/source verification, consistent crops, and preservation of139 the source deck layout grammar.140- `appendix-heavy`: dense appendix, tables, disclosures, or source packs.141 Requires index/page markers, readable small-type thresholds, table grammar,142 and explicit source-density rules.143144If more than one profile applies, pick the profile that creates the highest145delivery risk as primary, then list secondary gates in the claim spine. Example:146a finance investor deck with a supplied template is `finance-ir` primary and147`template-following` secondary.148149When a profile is selected, read its corresponding file under150`$SKILL_DIR/profiles/` if the task is substantial or unfamiliar:151152- `finance-ir.md`153- `product-platform.md`154- `gtm-growth.md`155- `engineering-platform.md`156- `consumer-retail.md`157- `template-and-edit.md`158- `appendix-heavy.md`159160Create `$WORKSPACE/profile-plan.txt` with:161162- task mode163- primary deck-profile164- secondary profile gates, if any165- required proof objects166- source/asset requirements167- brand authenticity constraints for logos, icons, mascots, screenshots, and168 other identity assets169- profile-specific QA gates170- known missing inputs171172## Phase 0: Source And Reference Read173174For every source or reference deck:175176- Render it to PNGs or PDF pages.177- Make a contact sheet.178- Extract slide text.179- Identify which slides are content sources, which are visual targets, and180 which patterns are anti-patterns.181182For source links:183184- Browse or otherwise retrieve the actual source page.185- For finance/product narratives, exhaust official linked materials such as186 earnings decks, supplements, filings, and IR PDFs before omitting customer,187 cohort, module, bookings, retention, guidance, or mix metrics.188- Extract exact metrics and source dates.189- Keep links in source notes and in a quiet deck footer or appendix.190- Never invent missing metrics to make a chart prettier.191192Brand authenticity gate:193194- Treat logos, mascots, app icons, product UI, character marks, badges, partner195 marks, and customer marks as identity assets.196- Do not draw, trace, approximate, or stylize a company logo, mascot, app icon,197 or signature brand mark from scratch unless the user explicitly asks for an198 unofficial concept.199- Use a verified source asset with provenance, use a user-provided asset, or200 omit the identity asset entirely.201- When an official asset cannot be verified or embedded cleanly, rely on color,202 typography, layout, product language, and reported metrics as brand cues203 instead of inventing a pseudo-logo or decorative icon.204- Record every identity asset in `$WORKSPACE/source-notes.txt` with source,205 provenance, and why it belongs in the deck.206- For template-following and source-deck tasks, inspect which identity assets207 are official in the source. Preserve or borrow only verified assets; do not208 create lookalike marks to fill visual gaps.209210Create:211212- `$WORKSPACE/source-notes.txt`213- `$WORKSPACE/reference-audit.txt`214- `$WORKSPACE/data.json` when metrics/charts are used215- `$WORKSPACE/template-audit.txt` for template-following or targeted-edit modes216- `$WORKSPACE/deviation-log.txt` when inheriting a source deck visual system217218For template-following and targeted-edit modes, `template-audit.txt` must include:219220- preserve: visual rules that must survive221- improve: weak spots that can be upgraded222- do not imitate: source artifacts that should not be copied223- brand/assets: logos, colors, imagery, type, and crop language224- insertion contract: how new slides or objects join the existing deck225226## Phase 1: Narrative Spine227228Before designing, write the story as slide claims. This is binding.229230Every non-appendix slide must have:231232- a kicker: 1-3 words that names the role, e.g. `EXPANSION DRIVERS`233- a claim title: a conclusion, not a topic label234- a proof object: one chart, table, timeline, diagram, or visual comparison235- a support note: concise, factual, and source-backed236237For finance/product narratives, a slide with only one thin chart usually fails.238Prefer one dominant proof object plus a compact context rail, variance table, or239callout stack when it improves the argument. Reject proof objects whose metric240movement is too small to carry the claim unless they support a larger bridge.241Product maps must show product-to-business linkage: module or workflow,242adoption signal, expansion/monetization logic, or efficiency impact.243244Bad title: `Revenue and margin trends`245246Good title: `Growth slowed, but the margin engine kept expanding.`247248Bad title: `Expansion drivers`249250Good title: `Backlog is compounding faster than revenue.`251252If a title can be used after swapping the company name, sharpen it.253254Create `$WORKSPACE/claim-spine.txt` with:255256- thesis257- audience258- one-line arc259- slide list with claim, proof object, source, and omission notes260261## Phase 2: Design System Lock262263Create `$WORKSPACE/design-system.txt` before writing slide modules.264265The design system must define:266267- slide size, usually `1280x720`268- background system269- typography pair using installed fonts only270- color palette with usage rules271- chart grammar272- diagram grammar273- connector grammar274- container / box grammar275- source/footer grammar276- page marker grammar277- title/kicker grammar278- data-label grammar279- brand asset policy and identity-asset provenance280- allowed brand cues versus forbidden logo/icon/mascot approximations281- allowed layout families282- banned motifs283284For premium analytics decks, prefer:285286- warm paper or deep ink backgrounds, not default pale dashboards287- a display serif or refined display face for claims288- a utilitarian sans for labels289- hairline rules instead of box outlines290- open composition instead of repeated cards291- direct labels on charts instead of heavy legends292- fewer objects with stronger hierarchy293- Kickers must align as one optical unit: marker center and label center share the294 same y-axis, and letter-spaced all-caps labels must be vertically centered in a295 box with enough breathing room to avoid low-looking baselines.296- Use a canonical kicker construction rather than hand-tuning each slide:297 - marker and label must be named as a pair, e.g. `kicker-marker` and298 `kicker-label`, or `kicker-01-marker` and `kicker-01-label`299 - marker and label boxes should share the same vertical center within `<= 1px`300 - the label box must use middle vertical alignment and enough height to avoid301 low-looking glyphs after render/export302 - if multiple kicker rows appear on a slide, suffix the pair names consistently303 so QA can verify each row304305Do not use a one-note palette. Do not let teal, navy, beige, purple, or gray306dominate without a deliberate secondary contrast.307308## Phase 3: Contact-Sheet Plan309310Before building slides, create `$WORKSPACE/contact-sheet-plan.txt`.311312For a 10-slide deck, use at least 5 distinct macro-layout families, such as:313314- cover with metric rail315- editorial product map316- horizontal bar proof with margin notes317- donut or mix proof with ranked evidence table318- line chart with right-side KPI stack319- sequential bar chart with side summary rail320- two-series cash chart with margin callout321- roadmap timeline322- dense appendix table323- dark appendix/source page324325Hard gates:326327- no more than 2 card-grid slides in a 10-slide deck328- no 3 consecutive slides may share the same macro layout329- no repeated `title + subtitle + boxed panel grid` cadence330- no rounded card default unless the data relationship requires containment331- no decorative boxes around prose332333The contact sheet must look authored before details are read.334335## Phase 4: Editable Build336337Build one ESM slide module per slide in `$SLIDES_DIR`, exporting numbered338functions such as:339340```js341export async function slide01(presentation, ctx) {342 const slide = presentation.slides.add();343 // editable artifact-tool presentation JSX content344 return slide;345}346```347348Prefer native editable shapes, lines, text, tables, and chart-like constructs.349For charts, native chart helpers are allowed, but authored editable chart350systems built from shapes are acceptable when they give better label placement351and visual polish.352353### Structured Visual Precision Contract354355Charts, diagrams, connectors, boxes, tables, and flows are high-risk proof356objects. Treat them as geometry systems, not decoration.357358Before authoring any structured visual, define:359360- what the visual must prove361- the primary reading order362- each node / mark / series and what it means363- each edge / connector and what relationship it encodes364- each container / box and what grouping or containment it means365- the intended alignment, spacing, and label attachment rules366367Hard build rules:368369- Connected series must be rendered as one continuous editable path or as a370 verified native chart series. Do not fake a line with separately rotated371 rectangles, disconnected strokes, floating slashes, or decorative arrows.372- Every connected series must pass through its intended markers and preserve373 the correct point order after render/export.374- In diagrams, connectors must visibly attach to the correct source and target,375 follow the intended direction, avoid unrelated objects, and terminate cleanly376 without ambiguous crossings.377- Do not use arrows unless directionality matters. If direction matters, arrow378 heads must be consistent, legible, and semantically meaningful.379- Boxes must imply a real grouping, comparison, lane, stage, or containment380 relationship. Remove containers that only decorate prose.381- Equal-role boxes must share exact height, alignment, padding, border logic,382 and text treatment unless the hierarchy intentionally differs.383- Text inside boxes must have enough padding and never sit against edges,384 collide with rules, or rely on shrink-to-fit as the default.385- Use a minimum `12px` vertical interior padding for boxed prose / callouts and386 `16px` when the box carries 2+ lines or dark-background copy. If a box only387 looks correct with near-zero bottom room, enlarge the box or shorten the copy.388- Any text that starts inside a filled callout / metric container and spills389 past that container edge is a hard failure, even if the overflowed line is no390 longer classified as an in-box child by a layout script.391- Labels must anchor to the mark, series, box, or connector they describe. A392 viewer should never need to guess which label belongs to which object.393- Repeated metric rails / KPI stacks must preserve their full grammar on every394 item: if the pattern is `value + label + context`, every item must visibly395 render all three pieces with adequate contrast against its background.396- Preview-visible defects override layout-script silence: orphan labels, missing397 values in a repeated metric pattern, markers sitting on top of copy, or any398 object that looks obviously accidental at full size must be treated as a build399 failure even when export and layout checks succeed.400- Tables and matrices must preserve row/column grammar under thumbnail review:401 headers, baselines, alignment, and emphasis must remain visually consistent.402- If a chart or diagram requires too many exceptions to remain clear, rebuild403 it with a simpler visual rather than patching around geometry defects.404405artifact-tool presentation JSX chart caveat:406407- Try native `slide.charts.add(...)` when the API can represent the chart.408- Always verify the exported PPTX package for `ppt/charts/chart*.xml`.409- If native chart parts are not preserved, or export throws `toProto` /410 `setChangeHandler` errors, switch to authored editable chart primitives411 rather than shipping weak native charts.412- Do not style `chart.yAxis.majorGridlines` unless freshly413 verified; it can fail export with `this[#h].toProto is not a function`.414- Do not fake per-point bar colors by adding zero-valued helper series. If415 native charts cannot express the visual cleanly, rebuild the chart with416 editable shapes and direct labels.417- For line, trend, or connected-series visuals, prefer a verified native line418 chart when the API can express the chart cleanly. If authored with419 primitives, draw the series as one continuous editable custom path / polyline420 through the data points.421- Do not construct a line series from individually rotated rectangles or short422 segment shapes; these can export as detached slashes or broken pseudo-arrows.423- Record the choice in `$WORKSPACE/qa/comeback-scorecard.txt`.424425Use helper scripts copied with this skill:426427```bash428node "$SKILL_DIR/scripts/render_artifact_slide.mjs" \429 --workspace "$WORKSPACE" \430 --slide-module "$SLIDES_DIR/slide-01.mjs" \431 --output "$PREVIEW_DIR/slide-01.png" \432 --layout "$LAYOUT_DIR/slide-01.layout.json"433434node "$SKILL_DIR/scripts/build_artifact_deck.mjs" \435 --workspace "$WORKSPACE" \436 --slides-dir "$SLIDES_DIR" \437 --out "$FINAL_PPTX" \438 --preview-dir "$PREVIEW_DIR" \439 --layout-dir "$LAYOUT_DIR/final" \440 --contact-sheet "$PREVIEW_DIR/contact-sheet.png" \441 --slide-count <n>442```443444Presentation JSX source must resolve through artifact-tool. Do not bypass the445bundled runtime with unrelated package imports.446447Editable primitives are encouraged for charts, diagrams, and abstract product448flows. They are not a license to fabricate brand marks. Do not create449brand-like icons, mascots, app marks, partner marks, or pseudo-logos as450decoration or to fill whitespace. If the asset is not verified, solve the slide451with stronger hierarchy, data, copy, or abstract shapes instead.452453## Phase 5: Comeback Rubric454455Score the rendered contact sheet and full-size slides in456`$WORKSPACE/qa/comeback-scorecard.txt`.457458Each dimension is 0-5:459460- `story`: titles are claims; sequence has a real arc461- `specificity`: deck would fail the noun-swap test462- `rhythm`: contact sheet has varied macro layouts463- `whitespace`: slides breathe without feeling empty464- `chart clarity`: charts prove one sentence, labels are direct, and geometry is465 continuous / correctly attached466- `typography`: type feels intentional, not default467- `restraint`: no filler boxes, badges, or decorative clutter468- `precision`: metrics and source notes are exact469- `coherence`: one visual system across the deck470- `reference delta`: visibly better than the target reference, when supplied471472Required minimum before delivery:473474- total score >= 44 / 50 when a reference is supplied; otherwise >= 40 / 45475- no dimension below 4476- `reference delta` >= 4 when a reference is supplied; otherwise mark it `n/a`477 and do not claim reference-beating478479Profile gates are pass/fail and sit above the numeric rubric. A deck fails even480with a high visual score if the profile gate fails. Common profile blockers:481482- `finance-ir`: invented or unsupported metrics, mixed units, missing footnotes,483 or charts that look good but do not reconcile to sources.484- `product-platform`: generic feature cards, architecture boxes that say485 nothing, module lists without adoption or monetization proof, or missing486 adoption/business linkage.487- `gtm-growth`: funnel labels without progression logic, weak brand fit,488 fabricated brand marks, or monetization claims unsupported by proof.489- `engineering-platform`: technically vague diagrams, labels stripped of real490 meaning, or developer details that overwhelm the executive story.491- `strategy-leadership`: chapter dividers without thesis movement or a market492 frame that never returns in the operating plan.493- `consumer-retail`: stock-looking imagery, weak crop quality, unverified asset494 provenance, or client outreach copy that feels generic.495- `template-following`: style drift from the source deck without an explicit496 deviation reason.497- `targeted-edit-data`: calculation mistakes, wrong ranking, or a new slide498 that looks pasted in.499- `targeted-edit-media`: unverified identities, inconsistent headshot crops, or500 local layout damage.501- `appendix-heavy`: unreadable tables, missing index, or source density that502 hides the answer.503- `brand authenticity`: fabricated logo, mascot, app icon, signature mark,504 unverified product UI, or pseudo-official mark used as decoration.505506If a reference deck is supplied, write a blunt slide-by-slide comparison:507508- where this deck beats the reference509- where the reference still wins510- what changed after iteration511512## Phase 6: Mechanical Verification513514Before final delivery:515516- Confirm the final PPTX exists and is non-empty.517- Confirm the expected slide count in the package.518- Confirm no empty media files.519- Confirm chart package parts when native charts are required, or document why520 authored editable chart primitives were used instead.521- Render every final slide to PNG through artifact-tool.522- Inspect the artifact-tool contact sheet at thumbnail size and the523 full-size PNG renders for visual errors.524- During full-size render review, explicitly verify repeated UI grammars such as525 KPI rails, step sequences, legends, and forecast strips for completeness and526 contrast: no blank value slots, no same-color-on-background text, and no527 decorative marks that collide with the reading path.528- For every chart, diagram, matrix, connector system, and box system, inspect529 the rendered slide at full size and verify the intended geometry:530 - connected lines are continuous and pass through the correct markers531 - bars / dots / labels align to the same baseline or axis logic532 - arrows and connectors attach to the intended objects and do not float533 - arrows point in the intended reading direction534- boxes that share a role line up, carry equivalent padding, and do not clip535 or crowd text536- kickers / eyebrow rows align optically: icon, rule, and label sit on one537 centerline rather than a low or drifting text baseline538- Use the kicker naming convention so layout QA can verify centerline alignment;539 un-named kicker rows are a QA gap, not a pass.540- boxed prose and callouts keep visible top/bottom breathing room, especially on541 dark fills and multi-line statements542 - grouped objects read as a coherent system at thumbnail size543- Inspect the contact sheet and full-size renders for unofficial logos, app544 icons, mascots, product UI, partner marks, and customer marks. Confirm each545 identity asset is verified in source notes or remove it.546- Do not require, bundle, or assume LibreOffice or any other external renderer.547 If a compatible renderer is already available and the user asks for it, it may548 be used as non-blocking extra QA only.549- Run layout checks and fix all errors. Warnings may remain only when they are550 known false positives from intentional table/axis/label construction and the551 rendered slide is clean.552- Deficient box padding and text overflow out of filled callouts are errors, not553 acceptable warnings.554555## Phase 7: Final QA Ledger556557Create `$WORKSPACE/qa/comeback-scorecard.txt` with:558559- final score by rubric dimension560- primary deck-profile and profile gate pass/fail561- reference-deck comparison562- tool/runtime caveats563- package checks564- render checks565- accepted warnings or tradeoffs566567Do not leave the scorecard as vague praise. It should name the remaining weak568spots if any exist.569570## Blocking Anti-Patterns571572Fix these before delivery:573574- title states a topic instead of a conclusion575- slide uses more than one dominant evidence object576- chart has a legend when direct labels would work better577- chart displays data but does not prove the title578- connected-series chart is rendered as detached strokes, floating slashes,579 pseudo-arrows, or a path that misses its markers580- line or connector geometry changes meaning after render / export581- connector floats, attaches to the wrong object, crosses unrelated structure,582 or points in an ambiguous direction583- arrows are decorative rather than semantic584- box system implies grouping that the content does not support585- equal-role boxes are visibly misaligned, inconsistently padded, or styled as586 if they have different meanings587- label appears visually detached from the mark, series, connector, or box it588 describes589- a repeated KPI / metric rail omits a required value, label, or context line on590 any item591- a marker, node, glyph, or accent shape visibly sits on top of readable copy592- a value is technically present but visually lost because it has insufficient593 contrast against the background594- table or matrix loses its row / column grammar at thumbnail size595- proof object is too thin to carry the claim596- product or architecture diagram lacks adoption, monetization, expansion, or597 efficiency linkage598- visible containers are louder than the content599- rounded cards are used as default scaffolding600- three slides in a row share the same composition601- contact sheet reads as a template pack602- contact sheet has clean slides but weak information architecture603- body copy exists only to fill space604- appendix is clean but unreadable605- artifact-tool render has obvious wrapped labels, collisions, awkward vertical606 text, or cramped callouts607- footer/source/page marker changes style608- kicker icon and label are not optically centered on the same row609- kicker rows are hand-built without named marker/label pairs, preventing QA610 from verifying their alignment611- boxed prose appears pinned to the bottom edge or lacks visible vertical612 breathing room613- typography falls back to default without intent614- low-resolution logo or rough image crop615- fabricated or approximated official logo, mascot, app icon, product UI, or616 signature brand mark617- brand-like icon used just to fill whitespace618- unprovenanced partner/customer logos, product screenshots, or brand badges619- unsupported metric or vague source label620- output only matches the reference instead of beating it621622## Iteration Rule623624Do not stop after the first export unless the comeback rubric passes. Iterate625the weakest 2-4 slides first, then rerender the full deck. Prefer a bold rebuild626of a weak slide over cosmetic nudge work.627628If a model or tool cannot reach the reference quality, say exactly why and name629the remaining weakest slides. Do not call the deck done because a PPTX exists.630631## Subagents632633Subagents are allowed when the user explicitly asks for them. Use them for:634635- source metric extraction636- reference deck critique637- QA scoring638- appendix implementation from a fixed spec639- alternate prototype generation in a separate workspace640641The main agent owns final story, visual system, integration, and QA. Never ship642a raw stitched deck from independent slide workers.643644## Matrix Battle Harness645646Use this harness when validating or improving the skill across many prompts.647It creates deck-quality probes, not source-complete final decks, unless all648attachments and source data are available. The probe output is for stress649testing profile routing, visual grammar, proof-object quality, and QA gates.650651Command:652653```bash654node "$SKILL_DIR/scripts/run_prompt_battle.mjs" \655 --prompts "$WORKSPACE/batch-prompts/slides_prompts_first25.json" \656 --workspace "$WORKSPACE/batch-runs/full-25" \657 --limit 25 \658 --scale 0.55659```660661The harness writes:662663- one editable PPTX per prompt664- PNG previews for every slide665- per-prompt contact sheets666- aggregate first-slide and proof-object contact sheets667- `battle-summary.json`668- `battle-summary.txt`669670After a battle run:671672- run layout checks across every `layout/` directory673- confirm every PPTX has the expected slide count674- confirm no empty media files675- inspect aggregate contact sheets for sameness676- update this skill when repeated failures show a missing gate677678Do not confuse a battle probe with a final customer deck. For final delivery,679rerun the normal workflow with the actual source attachments, exact metrics,680real imagery, and full reference comparison.681682## Final Delivery683684After the final PPTX is exported and verified, run the cleanup helper:685686```bash687node "$SKILL_DIR/scripts/cleanup_presentation_workspace.mjs" \688 --workspace "$WORKSPACE" \689 --output-dir "$OUTPUT_DIR"690```691692The cleanup helper preserves final `.pptx` deliverables in `$OUTPUT_DIR` and693deletes scratch artifacts from the current thread-scoped `$WORKSPACE`:694695- Delete generated planning and QA text notes such as `profile-plan.txt`,696 `source-notes.txt`, `reference-audit.txt`, `claim-spine.txt`,697 `design-system.txt`, `contact-sheet-plan.txt`, `battle-summary.txt`, and698 `$WORKSPACE/qa/*.txt`.699- Delete generated reference/imagegen prompt text files such as700 `*.imagegen.txt` and `reference-imagegen-prompts.txt`.701- Delete rendered review artifacts such as `contact-sheet.png`, preview PNGs,702 temporary reference PNGs, and other temporary images that are not deliberately703 embedded in the final deck.704- Delete generated per-run scripts and slide modules, including files under705 `$SLIDES_DIR`. Do not delete the installed skill helper scripts under706 `$SKILL_DIR/scripts`.707- Delete generated layout JSON, build manifests, and other per-run scratch708 metadata.709- Do not delete user-provided source files, source decks, or assets that are710 intentionally embedded in or required to regenerate the final deck.711- If the user explicitly asks for QA artifacts, keep only the requested712 artifacts and mention that they were retained.713- Never delete sibling folders under `${TMPDIR:-/tmp}/codex-presentations/` or714 any other thread's workspace.715716If `$OUTPUT_DIR` is outside `$WORKSPACE`, the cleanup helper deletes717`$WORKSPACE` and does not clean the external output directory. That external718directory must contain only final deliverables, not scratch artifacts.719720Do not attach or link `contact-sheet.png`, preview PNGs, generated scripts,721planning docs, JSON manifests, layout JSON, imagegen prompt files, or temporary722images unless the user explicitly asks for QA artifacts.723Do not mention that scratch or QA artifacts were cleaned up in the final724response; the final response should focus on the user-facing deck only.725726Deliver:727728- final `.pptx` with a relevant deck-title filename, not a generic name such729 as `output.pptx` or `deck.final.pptx`730- brief scorecard summary731- note any residual gap against the reference732733The final response should be short and artifact-focused.