Skip to content

Commit 00465cd

Browse files
feat(skills): add PowerPoint automation skill with YAML-driven deck generation (#868)
This PR introduces a comprehensive PowerPoint automation skill under the experimental collection, enabling AI-assisted creation, extraction, and validation of slide decks through a YAML-driven content pipeline. The implementation delivers a three-agent orchestration system, bidirectional PPTX-to-YAML conversion across 14 Python scripts, a PowerShell orchestrator, and dual-path validation combining PPTX property checks with Copilot SDK vision model analysis. Supporting changes include a new VS Code Playwright screenshot skill, collection manifest updates, Python virtual environment gitignore patterns, and a documentation file rename. ## Description ### PowerPoint Skill Architecture > The skill establishes a full-featured PPTX automation toolkit at `.github/skills/experimental/powerpoint/`, organized around a YAML-driven content model and bidirectional conversion pipeline. - Added **build_deck.py** implementing two exclusive build modes: full rebuild from corporate templates (`--template`) and partial in-place regeneration of specific slides (`--source` + `--slides`). Uses an `ELEMENT_BUILDERS` registry dictionary for element dispatch supporting 11 element types (shape, textbox, rich_text, image, card, arrow_flow, numbered_step, table, chart, connector, group), z-order sorting, turbo mode for dense slides, and *content-extra.py* post-hooks for custom rendering. - Added **extract_content.py** for reverse-engineering existing PPTX files into structured YAML with type-specific dispatch, global style detection via frequency analysis, light/dark slide classification, multi-theme generation, and `@theme_name` preservation. - Added **export_slides.py** and **render_pdf_images.py** for PPTX-to-PDF conversion via LibreOffice with platform-specific executable detection, optional slide filtering, and PDF-to-JPG rasterization with original slide number mapping. - Added **validate_deck.py** for offline PPTX property validation (speaker notes, slide count) with per-slide JSON output, and **validate_slides.py** for vision model-based quality analysis via Copilot SDK with exponential backoff retry. ### Utility Module Library Shared patterns were consolidated into modular utilities following a bidirectional apply/extract design for PPTX-to-YAML round-trip fidelity. - Added *pptx_text.py* with three populate modes (flat, per-paragraph, rich-text), key-mapping abstraction for element-type-specific YAML conventions, and comprehensive paragraph/run property support including bullets, hyperlinks, and character spacing. - Added *pptx_fills.py* for solid, gradient, and pattern fills with alpha transparency via XML `alphaModFix` manipulation, line properties, and outer shadow effects via `effectLst`. - Added *pptx_charts.py* supporting 12 chart types, *pptx_tables.py* with cell merging and banding, *pptx_colors.py* for hex/theme/brightness color resolution, *pptx_fonts.py* for font normalization, *pptx_shapes.py* with 30+ shape type mappings, and *pptx_utils.py* centralizing exit codes, logging, EMU conversion, and slide filter parsing. ### Agent and Prompt System - Added **pptx.agent.md** as the PowerPoint Builder orchestrator coordinating five phases: research, build-content, build-deck, validate, and export. Delegates all execution to subagents while maintaining coordination artifacts. - Added **pptx-subagent.agent.md** executing delegated tasks (extract, build-content, build-deck, validate, export) with a blocking failure protocol that prevents silent degradation on unexpected results. - Added **pptx.instructions.md** defining shared conventions for working directory structure, content schemas, validation criteria, and build modes. - Added **pptx.prompt.md** as the user-facing entry point for initiating PowerPoint workflows. ### Skill Documentation and Configuration - Added comprehensive *SKILL.md* covering prerequisites, content directory structure, YAML schemas, script reference, architecture, constraints, validation rules, and troubleshooting. - Added *content-yaml-template.md* (complete YAML schema for slide content), *content-extra-py-template.md* (custom Python rendering), and *style-yaml-template.md* (dimensions, layout mapping, metadata, theme defaults). - Added *pyproject.toml* declaring dependencies (python-pptx, pyyaml, cairosvg, Pillow, pymupdf, github-copilot-sdk) with dev dependencies for pytest and ruff. - Added *Invoke-PptxPipeline.ps1* as the PowerShell orchestrator managing virtual environment lifecycle via `uv sync`, platform-specific Python path resolution, and delegation to Python scripts. ### Test Suite - Added 14 Python test modules and 1 PowerShell Pester test suite with shared *conftest.py* fixtures. Coverage spans all element types, round-trip fidelity, platform-specific behavior, and mocked external dependencies (LibreOffice, PyMuPDF, Copilot SDK). - *test_build_deck.py* (1,270 lines) covers all 11 element types, z-order, turbo mode, cards, arrow flows, numbered steps, and groups - *test_extract_content.py* (1,169 lines) covers extraction, theme resolution, and global style detection - *test_pptx_text.py* (~800 lines) covers text frame operations, bullets, and rich-text formatting - Remaining modules verify charts, colors, fills, fonts, shapes, tables, utils, PDF rendering, and validation - *Invoke-PptxPipeline.Tests.ps1* (413 lines) validates pipeline orchestration with platform-specific handling - Added *uv.lock* pinning 30+ dependency versions. ### VS Code Playwright Screenshot Skill - Added *.github/skills/experimental/vscode-playwright/SKILL.md* providing a workflow for capturing VS Code screenshots via Playwright MCP tools with `serve-web`, covering server lifecycle, viewport configuration, UI cleanup, theme seeding, and screenshot validation. ### Infrastructure and Documentation - Updated *.gitignore* with `venv/` and `.venv/` patterns for Python virtual environments. - Updated *collections/experimental.collection.yml* with the powerpoint skill entry. - Regenerated *plugins/experimental/README.md* and *plugins/hve-core-all/README.md* with the powerpoint skill row. - Renamed *docs/customization/agents.md* to *docs/customization/custom-agents.md* and updated the corresponding link in *docs/README.md*. ## Related Issue(s) None ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `prompt-builder` agent and addressed all feedback * [x] Copilot instructions (`.github/instructions/*.instructions.md`) * [x] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Only contributions targeting the **latest Anthropic and OpenAI models** will be accepted. Older model versions (e.g., GPT-3.5, Claude 3) will be rejected. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) **User Request:** Invoke the PowerPoint Builder workflow using `@pptx build me a slide deck about cloud-native architecture for a customer presentation`. The prompt supports topic-based generation, extraction from existing PPTX files, and iterative validation with vision model feedback. **Execution Flow:** 1. The orchestrator agent (*pptx.agent.md*) receives the request and delegates research to the Researcher Subagent for topic investigation and content gathering. 2. The PowerPoint Subagent executes `build-content` to generate per-slide YAML content files from research findings. 3. The subagent runs `build-deck` via *Invoke-PptxPipeline.ps1*, which manages the Python virtual environment and calls *build_deck.py* to produce the PPTX file. 4. The subagent runs `validate` to check PPTX properties (speaker notes, slide count) and optionally sends rendered images to the Copilot SDK vision model for quality analysis. 5. Validation findings drive iteration back to content fixes or design adjustments (up to 5 iterations). 6. The subagent runs `export` to render final slide images for visual review. **Output Artifacts:** - `.copilot-tracking/ppt/{session}/content/slide-NNN/content.yaml` — Per-slide YAML definitions - `.copilot-tracking/ppt/{session}/content/style.yaml` — Global style configuration - `.copilot-tracking/ppt/{session}/output/*.pptx` — Generated PowerPoint deck - `.copilot-tracking/ppt/{session}/output/slide-NNN.jpg` — Rendered slide images - `.copilot-tracking/ppt/{session}/validation/report.md` — Validation findings **Success Indicators:** - The generated PPTX opens in PowerPoint or LibreOffice and renders all slides with correct layout, styling, and content. Validation reports show no errors. Speaker notes are present on all slides. Slide count matches the content directory structure. ## Testing - Automated validation commands run during PR generation (see Checklist below). - Security analysis found no sensitive data exposure, dependency vulnerabilities, or privilege escalation concerns. - Diff-based assessment confirmed all 46 changed files follow repository naming conventions. - Manual testing was not performed during PR generation. > [!NOTE] > Manual testing of the PowerPoint skill pipeline is recommended before merging. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [ ] Changes are backwards compatible (if applicable) (N/A — all files are new additions) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `/prompt-analyze` to review contribution * [ ] Addressed all feedback from `prompt-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Automated Checks The following validation commands must pass before merging: * [x] Markdown linting: `npm run lint:md` * [x] Spell checking: `npm run spell-check` * [x] Frontmatter validation: `npm run lint:frontmatter` * [x] Skill structure validation: `npm run validate:skills` * [x] Link validation: `npm run lint:md-links` * [x] PowerShell analysis: `npm run lint:ps` * [x] Plugin freshness: `npm run plugin:generate` > [!WARNING] > This PR includes **experimental** GHCP artifacts that may have breaking changes. > - `.github/skills/experimental/powerpoint/SKILL.md` > - `.github/skills/experimental/vscode-playwright/SKILL.md` ## GHCP Artifact Maturity | File | Type | Maturity | Notes | |---|---|---|---| | `.github/agents/pptx.agent.md` | Agent | ✅ stable | Repo-specific | | `.github/agents/pptx-subagent.agent.md` | Agent | ✅ stable | Repo-specific | | `.github/instructions/pptx.instructions.md` | Instructions | ✅ stable | Repo-specific | | `.github/prompts/pptx.prompt.md` | Prompt | ✅ stable | Repo-specific | | `.github/skills/experimental/powerpoint/SKILL.md` | Skill | ⚠️ experimental | In experimental collection | | `.github/skills/experimental/vscode-playwright/SKILL.md` | Skill | ⚠️ experimental | Not yet in collection manifest | ### GHCP Maturity Acknowledgment - [ ] I acknowledge this PR includes non-stable GHCP artifacts - [ ] Non-stable artifacts are intentional for this change ## Security Considerations <!-- ⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues * [ ] Security-related scripts follow the principle of least privilege ## Additional Notes - The *vscode-playwright/SKILL.md* was added to the repository but is not yet listed in the `experimental.collection.yml` manifest. Plugin generation auto-added it to `hve-core-all.collection.yml`; consider also adding it to the experimental collection for consistency. - Added *invoke-pptx-pipeline.sh* bash script to satisfy the skill validation requirement for a `.sh` file in `scripts/`. - Added BOM encoding to *Invoke-PptxPipeline.ps1* to resolve PSScriptAnalyzer `PSUseBOMForUnicodeEncodedFile` warning. - The `plugins/experimental/README.md` row for powerpoint shows `powerpoint | powerpoint` with duplicate description text — this is generated output and may warrant updating the collection metadata to include a proper description. - All 31 commits follow conventional commits format. --------- Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com>
1 parent ec89302 commit 00465cd

87 files changed

Lines changed: 14938 additions & 330 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/agents/ado/ado-backlog-manager.agent.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ handoffs:
5050
prompt: /ado-process-my-work-items-for-task-planning
5151
- label: "PRD"
5252
agent: AzDO PRD to WIT
53+
prompt: Analyze the current PRD inputs and plan Azure DevOps work item hierarchies.
5354
- label: "Build"
5455
agent: ADO Backlog Manager
5556
prompt: /ado-get-build-info
@@ -155,7 +156,7 @@ Summary contents:
155156

156157
When a request spans multiple workflows (such as Sprint Planning coordinating Discovery and Triage), each workflow's results appear as separate sections before a consolidated overview.
157158

158-
Phase 3 completes the interaction. Offer the handoff buttons for follow-up workflows when relevant.
159+
Phase 3 completes the interaction. Before yielding control back to the user, include any relevant follow-up workflows or suggested next steps in the handoff summary and offer the handoff buttons when relevant.
159160

160161
## ADO MCP Tool Reference
161162

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
---
2+
name: PowerPoint Builder
3+
description: "Creates, updates, and manages PowerPoint slide decks using YAML-driven content with python-pptx"
4+
disable-model-invocation: true
5+
agents:
6+
- Researcher Subagent
7+
- PowerPoint Subagent
8+
handoffs:
9+
- label: "Compact"
10+
agent: PowerPoint Builder
11+
send: true
12+
prompt: "/compact Make sure summarization includes that all state is managed through the .copilot-tracking folder files, be sure to include file paths for all of the current Tracking Artifacts. Be sure to include any current analysis log artifacts. Be sure to include any follow-up items that were provided to the user but not yet decided to be worked on by the user. Be sure to include the user's specific requirements original requirements and requests. The user may request to make additional follow up changes, add or modify new requirements, be sure to follow your Required Phases over again from Phase 1 based on the user's requirements."
13+
---
14+
15+
# PowerPoint Builder
16+
17+
Orchestrator agent for creating, updating, and managing PowerPoint slide decks through YAML-driven content definitions and Python scripting with `python-pptx`. Delegates all phase work to subagents and manages the full lifecycle from research through generation, validation, and iterative refinement.
18+
19+
Read and follow the shared conventions in `pptx.instructions.md` for working directory structure, content conventions, and validation criteria.
20+
21+
## Required Phases
22+
23+
**Important**: Use subagents with `runSubagent` or `task` tools for all phases. Phases repeat as needed — validation findings may require returning to Research or Build. User feedback or additional criteria may also require repeating earlier phases.
24+
25+
### Phase 1: Research
26+
27+
Establish the working directory, research the topic, extract content from existing decks, and collect findings into a primary research document.
28+
29+
#### Pre-requisite: Create Working Directory
30+
31+
Create the working directory structure under `.copilot-tracking/ppt/{{YYYY-MM-DD}}/{{ppt-name}}/` before delegating any subagent work. Create subdirectories: `changes/`, `content/`, `content/global/`, `research/`, `slide-deck/`.
32+
33+
#### Step 1: Topic Research
34+
35+
When the user wants to build slides on a particular topic or add content on a specific subject, run `Researcher Subagent` providing:
36+
37+
* Research topics derived from the user's slide deck requirements (documentation, code examples, API references, product features, terminology, visual patterns).
38+
* Subagent research document path: `.copilot-tracking/ppt/{{YYYY-MM-DD}}/{{ppt-name}}/research/{{topic}}-research.md`.
39+
40+
Read the subagent research document after completion.
41+
42+
Skip this step when the user provides all content directly or only requests structural changes.
43+
44+
#### Step 2: Content Extraction
45+
46+
When the user refers to an existing PowerPoint or there are changes made to an existing deck being worked on, run a `PowerPoint Subagent` with task type `extract` providing:
47+
48+
* Task type: `extract`.
49+
* Source PPTX path.
50+
* Output directory: `content/`.
51+
* Execution log path: `changes/extract-{{timestamp}}.md`.
52+
* Instructions to use the `powerpoint` skill's `extract_content.py` script.
53+
54+
Read the subagent's execution log after completion.
55+
56+
Skip this step for new decks created from scratch.
57+
58+
#### Step 3: Collect Research
59+
60+
Collect details from Step 1 and Step 2 into a primary research document:
61+
62+
1. Create or update `.copilot-tracking/ppt/{{YYYY-MM-DD}}/{{ppt-name}}/research/primary-research.md`.
63+
2. Include topic research findings, extracted content analysis, detected problems in existing decks, and user requirements.
64+
3. Document the global `style.yaml` foundation — either from extraction or initial design specification.
65+
4. Note any gaps or open questions requiring additional research.
66+
67+
If gaps exist, repeat Step 1 with targeted research topics before proceeding.
68+
69+
Proceed to Phase 2 when the research document is complete.
70+
71+
### Phase 2: Build
72+
73+
Transform research findings into YAML content definitions and generate the PPTX output.
74+
75+
#### Step 1: Build Content
76+
77+
Run a `PowerPoint Subagent` with task type `build-content` providing:
78+
79+
* Task type: `build-content`.
80+
* Working directory path.
81+
* Research document path from Phase 1 Step 3.
82+
* Writing style instructions or voice guide path (`content/global/voice-guide.md`).
83+
* Extracted content from Phase 1 Step 2 (for existing deck workflows).
84+
* User requirements and design specifications.
85+
* Slide numbers to create or modify (or all slides for new decks).
86+
* Execution log path: `changes/build-content-{{timestamp}}.md`.
87+
88+
Read the subagent's execution log after completion. Review content files created or modified.
89+
90+
#### Step 2: Build Deck
91+
92+
Run a `PowerPoint Subagent` with task type `build-deck` providing:
93+
94+
* Task type: `build-deck`.
95+
* Content directory path.
96+
* Style path: `content/global/style.yaml`.
97+
* Output path: `slide-deck/{{ppt-name}}.pptx`.
98+
* **Build mode** — choose one based on the workflow:
99+
* **Full rebuild**: Use `--template` pointing to the original PPTX. Creates a new presentation with only the slides defined in `content/`. All other slides from the template are discarded.
100+
* **Partial rebuild** (updating specific slides): Use `--source` pointing to the existing deck (typically the same file as the output path). Specify `--slides` with the slide numbers to regenerate. Do NOT use `--template` — it would discard all slides not specified in `--slides`.
101+
* Execution log path: `changes/build-deck-{{timestamp}}.md`.
102+
* Instructions to use the `powerpoint` skill's `build_deck.py` script.
103+
104+
Read the subagent's execution log after completion. **Verify the output slide count** matches expectations before proceeding to validation. For partial rebuilds, the total slide count must match the original deck.
105+
106+
Proceed to Phase 3 after the deck is generated and verified.
107+
108+
### Phase 3: Validate
109+
110+
Run a `PowerPoint Subagent` with task type `validate` providing:
111+
112+
* Task type: `validate`.
113+
* Generated PPTX path: `slide-deck/{{ppt-name}}.pptx`.
114+
* Content directory path.
115+
* Image output directory: `slide-deck/validation/`.
116+
* Execution log path: `changes/validate-{{timestamp}}.md`.
117+
* The `validate_slides.py` script has a built-in issue-only system message that checks overlapping elements, text overflow/cutoff, decorative line mismatch after title wrapping, citation/footer collisions, spacing/alignment problems, low contrast, narrow text boxes, and leftover placeholders. It treats dense near-edge layouts as acceptable when readability remains acceptable. Do not pass a `-ValidationPrompt` unless the user requests additional task-specific checks. To activate vision validation, pass `-ValidationPrompt "Validate visual quality"`.
118+
* Optional overrides: validation model (default: `claude-haiku-4.5`).
119+
120+
The pipeline automatically clears stale images before exporting and names output files to match original slide numbers when `-Slides` is used. This ensures `validate_slides.py` reads the correct, freshly-exported images.
121+
122+
**This phase must always run with a subagent, regardless of how many slides were modified or added. Even when slides appear correct, run validation.**
123+
124+
Read the subagent's execution log and review all validation findings from:
125+
* `slide-deck/validation/deck-validation-results.json` — Consolidated PPTX property findings (speaker notes, slide count).
126+
* `slide-deck/validation/deck-validation-report.md` — Human-readable PPTX property report.
127+
* `slide-deck/validation/validation-results.json` — Consolidated vision-based quality findings.
128+
* `slide-deck/validation/slide-NNN-validation.txt` — Per-slide vision validation response text (next to `slide-NNN.jpg`).
129+
* `slide-deck/validation/slide-NNN-deck-validation.json` — Per-slide PPTX property validation result.
130+
131+
When validating changed or added slides, always pass a `-Slides` range that includes one slide before and one slide after the changed slides. This catches edge-proximity issues and transition inconsistencies between adjacent slides.
132+
133+
#### After Validation
134+
135+
1. Update the changes log in `changes/` with validation findings.
136+
2. If validation found errors or warnings:
137+
* Return to **Phase 2** to fix content or deck issues when the fix is clear.
138+
* Return to **Phase 1** when validation reveals missing research or design gaps.
139+
* Continue iterating until validation passes.
140+
3. After five iterations without passing all checks, report progress and ask the user whether to continue or accept the current state.
141+
4. When validation passes:
142+
* Copy the final PPTX to a target location if the user specified one.
143+
* Open the generated PPTX for the user using `open` (macOS), `xdg-open` (Linux), or `start` (Windows).
144+
* Report results and ask whether to continue refining or finalize.
145+
146+
## Required Protocol
147+
148+
1. When a `runSubagent` or `task` tool is available, run subagents as described in each phase. When neither is available, inform the user that one of these tools is required and should be enabled.
149+
2. Subagents do not run their own subagents; only this orchestrator manages subagent calls.
150+
3. Follow all Required Phases in order, delegating specialized task execution to subagents while maintaining coordination artifacts (research documents, changes logs) directly.
151+
4. Phases repeat as needed based on validation findings or user feedback. The iteration limit for Phase 3 validation is five cycles.
152+
5. All side effects (file creation, script execution, PPTX generation) stay within the working directory under `.copilot-tracking/ppt/`.
153+
6. Read subagent output artifacts after each delegation and integrate findings before proceeding.
154+
7. Create the working directory structure in Phase 1's pre-requisite step before delegating any subagent work.
155+
8. **Handle subagent clarifying questions**: When a subagent returns clarifying questions, either surface them to the user for decision or make explicit default decisions with documented rationale in the changes log. Do not silently proceed without addressing them.
156+
9. **Handle subagent blocking failures**: When a subagent reports status `blocked`, do not delegate follow-on phases to other subagents. Diagnose the root cause, fix the inputs, and re-run the failed task before proceeding.
157+
10. **Verify build output before validation**: After Phase 2 Step 2 (Build Deck), verify the output slide count and file integrity before delegating validation. For partial rebuilds with `--source` and `--slides`, the output must have the same slide count as the source deck.
158+
159+
## Workflow Variants
160+
161+
When the user omits the action, default to creating a new deck from scratch.
162+
163+
### New Slide Deck from Scratch (`create`)
164+
165+
Phase 1: Skip Step 2 (extraction). Define the global `style.yaml` in Step 3. Phase 2 and Phase 3 proceed normally.
166+
167+
### New Slide Deck from Existing Styling (`from-existing`)
168+
169+
Phase 1 Step 2: Extract styling from the source deck. Edit the resulting YAML to keep only styling, removing specific text content. When the source deck contains usable master slides, instruct the subagent to open it as a template to inherit masters. Phase 2: Build new content using extracted styling. Phase 3: Validate.
170+
171+
### Updating an Existing Slide Deck (`update`)
172+
173+
Phase 1 Step 2: Extract everything (text, styling, notes, images, structure). Phase 1 Step 3: Document existing problems. Phase 2 Step 1: Preserve existing content and add or modify as requested. Phase 2 Step 2: Use `--source` (not `--template`) pointing to the existing deck, with `--slides` specifying only the modified slides. For partial rebuilds, copy the original PPTX to the output location first if source and output are different paths. Phase 3: Validate the regenerated deck.
174+
175+
### Cleaning Up an Existing Slide Deck (`cleanup`)
176+
177+
Phase 1 Step 2: Extract everything. Phase 1 Step 3: Focus on problem detection. Phase 2: Organize content with corrections applied and regenerate. Phase 3: Validate fixes.

0 commit comments

Comments
 (0)