Skip to content

Commit ee3c1e4

Browse files
committed
Add structural-slide and colour-accessibility rules to the deck agents
Two more real ppt-agent gaps: - slide-deck-rules: add Section 11 (structural slides). The exporter renders cover / agenda / section-divider / Q&A / references, but only their *visual* accent was documented, not their job. Each structural slide has one navigational role: cover = title (not the raw query) + authors/year/venue; agenda only for multi-paper decks (pointers, not abstracts); divider = a cognitive reset, name+number only; Q&A = minimal, not a second conclusion; references = only the works actually cited, numbered, split on overflow — not a BibTeX dump. This is where "a paper dumped onto slides" leaks back in. - deck-design (Figures): don't encode meaning by colour alone — teal vs navy is hard for colour-blind viewers and indistinguishable in greyscale; encode twice (colour + marker shape / line style / direct label). Docs only; tests/test_agents_md.py passes.
1 parent 72344e4 commit ee3c1e4

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

.claude/agents/rules/deck-design.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ The exporter inserts figures as PNGs via the `figures=` field (`_add_figure_imag
317317
- **Dark-mode adaptation is mandatory.** The slide background is `_DARK_SLIDE_BG` (`#12151B`) by default. A white-background PNG dropped onto it shows a glaring white rectangle — the figure equivalent of `rgb=None` text on dark. Export plots with a **transparent background** (`savefig(..., transparent=True)`) and light foreground (axes / labels / lines in near-white or brand teal `#2DD4BF`), OR place the figure on a card whose fill has a `_LIGHT_TO_DARK_FILL` entry. Never a bare white PNG on the dark slide.
318318
- **Strip chartjunk.** No default matplotlib grey panel, no spines on all four sides, no dense gridlines, no 3-D bars / pies, no drop shadows. Top + right spines off, at most one light horizontal gridline set. Data-ink first.
319319
- **Brand palette, not library defaults.** Series colours come from the deck palette (navy / teal / grey), never matplotlib's `C0` blue / `C1` orange — default colours read as "pasted from a notebook". (Red stays banned here too, per the no-red contract.)
320+
- **Don't encode meaning by colour alone.** Teal vs navy is hard for some colour-blind viewers and *indistinguishable* in a black-and-white printout. When two series must be told apart, encode them twice — colour **plus** a marker shape / line style (solid vs dashed) or a direct end-of-line label. The winning series can also be the only solid/heavy one. (The 4-colour brand palette is small precisely so it can't carry many simultaneous distinctions — lean on shape and labels.)
320321
- **Readable when projected.** Axis labels + tick labels + legend ≥ ~14pt *in the rendered figure* (a 6pt matplotlib label is unreadable from row 10). Label every axis with its quantity AND unit ("Latency (ms)"), per `paper_rule`'s number-reporting rule.
321322
- **Export at print DPI.** `dpi >= 150` (200 for line-heavy plots). A 72-DPI screenshot pixelates on a projector.
322323
- **Paper screenshots are a last resort.** Re-plotting your own data beats screenshotting the paper's figure — a screenshot carries the paper's off-brand fonts / colours, JPEG artefacts, and usually a white background. Crop tightly; only screenshot when re-plotting is impossible (e.g. a qualitative architecture diagram).

.claude/agents/rules/slide-deck-rules.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,20 @@ A thesis-style deck is read by an audience watching a talk, not by someone readi
138138

139139
**Anti-pattern:** a 5×4 accuracy table read cell-by-cell (should be a bar chart); or a single 92.3% drowned in a paragraph (should be a KPI). **Pattern:** chart for "who wins", table for "exact cells", KPI for "the one number", bullets for "the qualitative points".
140140

141+
### 11. Structural slides (cover / agenda / divider / Q&A / references)
142+
143+
Content slides carry the findings (§9); **structural** slides carry the *navigation*. They have different jobs, and over-filling them is a common "paper dumped onto slides" tell — a divider with eight bullets, or a references slide pasting a whole BibTeX file. Each structural slide has exactly **one** navigational job.
144+
145+
- **Cover** (`_cover_title` + `_cover_subtitle`). Title = the paper's title run through `_cover_title` (title-cased, period / locale suffix added) — NEVER the raw search query (deck-design anti-pattern). Subtitle = authors · year · venue. For a multi-paper survey deck the cover title is the *survey topic*, not paper #1's title. Presenter name / affiliation / date belong here (a defence), not repeated on every slide.
146+
- **Agenda** (`_agenda_line`). A multi-paper deck lists each paper as one pointer line so the audience can place each paper. A single-paper deck does **not** need an agenda — go cover → content; an agenda for one paper is filler. Agenda lines are pointers, never content (no abstracts on the agenda).
147+
- **Section divider** (the larger top accent band, deck-design). A divider is a *cognitive reset* between topics — section name + number, nothing else. Resist putting the next section's first bullet on it. Its whole value is telling the audience "we've moved from Method to Results".
148+
- **Q&A / closing.** One slide, minimal — "Q&A" or a thanks line + contact. It is NOT a second conclusion; the takeaways already landed on the findings slides. Don't restate results here.
149+
- **References.** List ONLY the works the deck actually cites (the comparison table, the SOTA baselines), numbered to match the in-deck citation markers — not a full bibliography dump. Split across slides when it overflows `FOOTER_GUARD` (§7). Reference text may be small but must stay readable (contrast contract) and on-brand grey, not bright.
150+
151+
**Why:** structural slides are exactly where "a paper dumped onto slides" leaks back in — a 40-entry references slide, an agenda restating abstracts, a divider doubling as a content slide. Keep each to its one navigational job.
152+
153+
**Anti-pattern:** a references slide with 35 BibTeX entries in 9pt overflowing the footer; an agenda whose lines are one-sentence paper summaries. **Pattern:** references = the ~8 works actually cited, numbered [1]..[8], split across 2 slides if needed; agenda = "Paper N of M: <short title>" pointers.
154+
141155
---
142156

143157
## LLM-as-agent vs Python pipeline (enrichment dispatch)

0 commit comments

Comments
 (0)