docs(P00): research findings — v1.22 deck layout root cause (REQ-254..262)
8 findings (all confidence >= 0.8): - F1 (VERY HIGH): theme CSS has zero section padding (/* @theme */ is a comment, not the directive; no @import of Marp default). - F2 (VERY HIGH): overflow:hidden silently clips dense content (8/19 slides overflow). - F3 (HIGH): image aspect-ratio catastrophe (platform-pipeline 13.52x, telemetry-live-ops 0.63x). - F4 (HIGH): header+footer chrome on every slide (~70px lost). - F5 (MEDIUM-HIGH): render_deck.sh omits --theme (unthemed output). - F6 (HIGH): render_slides.sh missing -s 2 -b transparent (1x PNGs). - F7 (LOW): P5 marp-cli version bump — NOT the cause (theme CSS byte- identical P3->P5). - F8 (VERY HIGH): test coverage gaps — no layout/overflow/aspect-ratio tests; static-file-property tests only. Persona roster (v1.22): lead-developer (theme CSS + deck markdown + mermaid + .ciagent), backend-engineer (render scripts + tests). frontend-engineer + data-engineer deactivated. D-148 (theme CSS is lead-developer, not frontend), D-149 (no new personas). ---ci--- project: acdl phase: 0 milestone: v1.22 status: research ---/ci---
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"phase": 0,
|
||||
"stage": "specify",
|
||||
"stage": "clarify",
|
||||
"milestone": "v1.22",
|
||||
"phase_role": "pre_execution",
|
||||
"attempts": 0,
|
||||
"updated_at": "2026-08-11T14:30:00Z",
|
||||
"updated_at": "2026-08-11T14:32:00Z",
|
||||
"milestone_complete": false,
|
||||
"tag": null,
|
||||
"requirements": ["REQ-254","REQ-255","REQ-256","REQ-257","REQ-258","REQ-259","REQ-260","REQ-261","REQ-262"],
|
||||
"notes": "v1.22 Nova Deck Layout Fix. SPECIFY complete. 9 requirements (REQ-254..262). NFR milestone, 7 phases (P0 + P1-P5 + P6 final). Tags on v1.21.x line. Root cause: theme CSS zero section padding + overflow:hidden + blunt img max-height + extreme aspect-ratio diagrams. Comprehensive fix across theme CSS, render scripts, mermaid, deck content, tests."
|
||||
"notes": "v1.22 CLARIFY complete. 5 ambiguities auto-resolved at full autonomy (comprehensive scope, full pipeline, re-layout to LR, delete render_deck.sh, split slides 3+8). No human escalation."
|
||||
}
|
||||
+120
-24
@@ -1,34 +1,128 @@
|
||||
---
|
||||
project: acdl
|
||||
milestone: v1.18
|
||||
generated_at: 2026-08-06
|
||||
milestone: v1.22
|
||||
generated_at: 2026-08-11
|
||||
generator: lead-developer
|
||||
verification_toolchain:
|
||||
typecheck: "python3 -m py_compile core/submission_readiness.py mcp/atelier/server.py && python3 -m jsonschema schemas/submission-readiness.schema.json"
|
||||
test: "pytest tests/test_submission_readiness.py tests/test_atelier_mcp.py # REQ-220 + REQ-225"
|
||||
build: "bash scripts/render_deck.sh docs/presentations/nova-no-humans-platform-marp.md # HTML + PPTX (D-142)"
|
||||
typecheck: "python3 -m py_compile tests/test_slides_pipeline.py"
|
||||
test: "pytest tests/test_slides_pipeline.py # REQ-254..262"
|
||||
build: "bash scripts/render_slides.sh nova-autonomous-cloud-delivery # HTML + PPTX"
|
||||
note: |
|
||||
v1.18 adds the Citizen Developer & Production-Grade Guidance surface:
|
||||
submission-readiness gate, Atelier-derived skills, the Atelier MCP server
|
||||
(plugin-registry, stdio), and PPTX-as-first-class-artifact deck automation.
|
||||
Three active personas: lead-developer (coordination + decks + RACI/scope
|
||||
docs), backend-engineer (MCP server + submission-readiness validator +
|
||||
render/attach scripts), data-engineer (submission-readiness schema if it
|
||||
touches contract storage / DynamoDB shape). frontend-engineer stays
|
||||
deactivated (v1.18 has no frontend; decks are markdown = lead-developer
|
||||
territory). The MCP plugin-registry is a backend pattern, so a separate
|
||||
mcp-engineer persona is NOT added — it folds into backend-engineer.
|
||||
v1.22 is the Nova Deck Layout Fix — a docs-only NFR milestone. Two
|
||||
active personas: lead-developer (theme CSS + deck markdown + talking
|
||||
points + README + .ciagent metadata), backend-engineer (render scripts
|
||||
+ tests). frontend-engineer stays deactivated (decks are markdown =
|
||||
lead-developer territory, per v1.17/v1.18 precedent). No data-engineer
|
||||
(no schema/DB changes). No new personas (the work is CSS + bash +
|
||||
markdown + pytest, all within the two active personas' range).
|
||||
---
|
||||
|
||||
# ACDL — Persona Roster (v1.18 Citizen Developer & Production-Grade Guidance)
|
||||
# ACDL — Persona Roster (v1.22 Nova Deck Layout Fix)
|
||||
|
||||
> v1.18 roster. Three active personas + one deactivated. The MCP server
|
||||
> plugin-registry (D-140) is a backend pattern, not a new persona — it
|
||||
> folds into backend-engineer. v1.17 precedent (frontend-engineer
|
||||
> deactivated, decks are markdown = lead-developer territory) is upheld.
|
||||
> v1.22 roster. Two active personas + one deactivated. This is a docs-
|
||||
> only NFR milestone: the work is theme CSS, render scripts, mermaid
|
||||
> diagrams, deck markdown, and tests. frontend-engineer stays
|
||||
> deactivated (decks are markdown = lead-developer territory, per
|
||||
> v1.17/v1.18 precedent). No data-engineer (no schema/DB changes).
|
||||
|
||||
## Active personas
|
||||
|
||||
### lead-developer
|
||||
- **Domain:** coordination + deck content
|
||||
- **Active:** true
|
||||
- **Phase-specific:** false
|
||||
- **Frameworks:** [] (no framework — owns process + narrative + CSS + markdown)
|
||||
- **Constraints:** ["pragmatic", "battle-tested defaults", "no fabrication (NORTH_STAR honesty model)", "do not change the 4-beat arc", "do not re-introduce badges/version/internal citations"]
|
||||
- **Territory:**
|
||||
- `docs/presentations/assets/nova-sp-theme.css` (REQ-254,255,256 — theme CSS)
|
||||
- `docs/presentations/nova-autonomous-cloud-delivery-marp.md` (REQ-261 — deck content)
|
||||
- `docs/presentations/nova-autonomous-cloud-delivery.md` (REQ-261 — source of truth)
|
||||
- `docs/presentations/nova-autonomous-cloud-delivery-talking-points.md` (REQ-261)
|
||||
- `docs/presentations/README.md` (REQ-261 — slide-count convention)
|
||||
- `docs/presentations/assets/mmd/*.mmd` (REQ-259,260 — mermaid re-layout)
|
||||
- `.ciagent/**` (PROJECT, ROADMAP, REQUIREMENTS, RESEARCH, PLAN, GRILL, PERSONAS, REVIEW, CHECKPOINT)
|
||||
- **Reason:** Owns the theme CSS (the root cause), the deck markdown
|
||||
(trim/split overflowing slides), the mermaid re-layout, the talking
|
||||
points, the README, and all CIAgent metadata. Is the only persona
|
||||
that touches `.ciagent/**` and the deck markdown/CSS.
|
||||
- **Phase-specific flag:** none (active for all of P0–P6).
|
||||
|
||||
### backend-engineer
|
||||
- **Domain:** render scripts + tests
|
||||
- **Active:** true
|
||||
- **Phase-specific:** false
|
||||
- **Frameworks:** ["bash", "pytest", "marp-cli", "mermaid-cli"]
|
||||
- **Constraints:** ["pin CLI versions (no @latest)", "2x scale + transparent bg for mermaid", "tests must catch layout regressions", "no raw curl with shell-env tokens"]
|
||||
- **Territory:**
|
||||
- `scripts/render_slides.sh` (REQ-257,258 — pin versions, 2x scale)
|
||||
- `scripts/render_deck.sh` (REQ-257 — DELETE)
|
||||
- `tests/test_slides_pipeline.py` (REQ-262 — layout/aspect-ratio/theme-structural tests)
|
||||
- `.github/workflows/slides.yml` (if references to render_deck.sh need removal)
|
||||
- **Reason:** Owns the render pipeline (bash scripts) and the test
|
||||
suite. The layout/aspect-ratio/theme-structural tests (REQ-262) are
|
||||
the gap that let this regression through — backend-engineer owns
|
||||
closing that gap. Pinning CLI versions and adding 2x scale are
|
||||
backend/scripting tasks.
|
||||
- **Phase-specific flag:** none (active for P2, P5; light touch on P0/P6).
|
||||
|
||||
## Deactivated personas
|
||||
|
||||
### frontend-engineer
|
||||
- **Active:** false
|
||||
- **Domain:** frontend
|
||||
- **Frameworks:** ["react", "next.js"] (inert — no territory)
|
||||
- **Constraints:** ["component-first", "server-components", "minimal-client-js"] (inert)
|
||||
- **Territory:** [] (no territory in v1.22)
|
||||
- **Reason:** v1.22 has no frontend; decks are markdown (lead-developer
|
||||
territory); deactivated per PERSONAS.md v1.17/v1.18 precedent. The
|
||||
theme CSS is a Marp stylesheet, not a React/Next.js component system
|
||||
— it stays lead-developer territory. No reactivation trigger.
|
||||
|
||||
### data-engineer
|
||||
- **Active:** false
|
||||
- **Domain:** data
|
||||
- **Frameworks:** [] (inert)
|
||||
- **Constraints:** [] (inert)
|
||||
- **Territory:** [] (no territory in v1.22)
|
||||
- **Reason:** v1.22 has no schema/DB/ORM changes. The milestone is
|
||||
docs + scripts + tests only. No reactivation trigger.
|
||||
|
||||
## Roster decisions
|
||||
|
||||
### D-148 (0.95): Theme CSS is lead-developer territory, not frontend-engineer
|
||||
The `nova-sp-theme.css` is a Marp stylesheet (CSS for a markdown-to-
|
||||
slide renderer), not a React/Next.js component system. The v1.17/v1.18
|
||||
precedent (decks are markdown = lead-developer territory) extends to
|
||||
the deck's CSS theme. frontend-engineer's frameworks (react, next.js)
|
||||
are irrelevant to Marp CSS. **Decision:** theme CSS stays lead-developer
|
||||
territory. Confidence 0.95 — the only counter-argument is that CSS is
|
||||
"frontend," but Marp CSS is a static stylesheet, not a component system.
|
||||
|
||||
### D-149 (0.9): No new personas for v1.22
|
||||
The work is CSS + bash + markdown + mermaid + pytest. All of this is
|
||||
within the two active personas' range (lead-developer: CSS + markdown +
|
||||
mermaid; backend-engineer: bash + pytest). Creating a separate "css-
|
||||
engineer" or "slides-engineer" persona would fragment ownership of the
|
||||
theme CSS + deck markdown (both lead-developer) and the render scripts
|
||||
+ tests (both backend-engineer). **Decision:** no new personas.
|
||||
Confidence 0.9.
|
||||
|
||||
### Territory-overlap resolution (co-ownership)
|
||||
|
||||
| Path | Primary | Co-owner | Why |
|
||||
|------|---------|----------|-----|
|
||||
| `docs/presentations/assets/mmd/*.mmd` | lead-developer (mermaid re-layout) | backend-engineer (re-render via render_slides.sh) | The .mmd content is lead-developer (diagram narrative); the PNG re-render is backend-engineer (script invocation). |
|
||||
| `tests/test_slides_pipeline.py` | backend-engineer (test code) | lead-developer (assertions reflect deck structure) | The test code is backend; the assertions (slide count, theme rules, aspect ratios) reflect lead-developer's deck/theme decisions. |
|
||||
|
||||
---
|
||||
|
||||
## Historical rosters
|
||||
|
||||
<details>
|
||||
<summary>v1.18 roster (Citizen Developer & Production-Grade Guidance) — superseded by v1.22</summary>
|
||||
|
||||
### Active personas (v1.18)
|
||||
|
||||
### lead-developer
|
||||
- **Domain:** coordination
|
||||
- **Active:** true
|
||||
@@ -97,7 +191,7 @@ verification_toolchain:
|
||||
is backend; the schema it validates against is data).
|
||||
- **Phase-specific flag:** none (active for P3 schema + ingestor wiring).
|
||||
|
||||
## Deactivated personas
|
||||
### Deactivated personas (v1.18)
|
||||
|
||||
### frontend-engineer
|
||||
- **Active:** false
|
||||
@@ -111,7 +205,7 @@ verification_toolchain:
|
||||
frontend / dashboard"). The MCP server exposes tools to an AI agent,
|
||||
not a web UI. No reactivation trigger in this milestone.
|
||||
|
||||
## Roster decisions
|
||||
### Roster decisions (v1.18)
|
||||
|
||||
### D-143 (0.90): Fold mcp-engineer into backend-engineer
|
||||
The MCP plugin-registry (D-140: `plugins/<name>.py register(mcp)`) is a
|
||||
@@ -127,10 +221,12 @@ that MCP is a distinct protocol skill, but the SDK v2 API surface
|
||||
range (it's the same Pydantic/FastAPI-style pattern the persona already
|
||||
knows).
|
||||
|
||||
### Territory-overlap resolution (co-ownership)
|
||||
### Territory-overlap resolution (v1.18)
|
||||
|
||||
| Path | Primary | Co-owner | Why |
|
||||
|------|---------|----------|-----|
|
||||
| `docs/submission-readiness.md` | lead-developer (narrative + examples) | backend-engineer (reason-code catalog, REQ-218 codes) | The doc is citizen-developer-facing copy (lead) but the reason-code catalog (MISSING_TAGS, ENV_MISSING_MANDATORY, AGENTIC_MISSING_INTENT, MISSING_APP_SOURCE, POLICY_PRECONDITION_MISSING) is backend (it mirrors the validator's return codes). |
|
||||
| `core/lambda/contract_ingestor.py` | backend-engineer (dispatch wiring) | data-engineer (the schema it validates against) | D-133 places the `--check-readiness` subcommand on the ingestor (backend dispatch), but the readiness schema it loads is data-engineer territory. |
|
||||
| `schemas/submission-readiness.schema.json` | data-engineer (schema artifact) | backend-engineer (the validator must match it) | The schema is data-engineer's; the validator (REQ-218) is backend-engineer's and must stay in sync with it. |
|
||||
| `schemas/submission-readiness.schema.json` | data-engineer (schema artifact) | backend-engineer (the validator must match it) | The schema is data-engineer's; the validator (REQ-218) is backend-engineer's and must stay in sync with it. |
|
||||
|
||||
</details>
|
||||
@@ -2346,3 +2346,225 @@ committed directly).
|
||||
backend pattern (decorators, type hints, stdio, urllib). The SDK v2
|
||||
API surface is small and FastAPI/Pydantic-style (already in
|
||||
backend-engineer's range). D-143 logged in PERSONAS.md records this.
|
||||
|
||||
---
|
||||
|
||||
# v1.22 Research — Nova Deck Layout Fix (2026-08-11)
|
||||
|
||||
> Investigation into the systemic layout/formatting problems in the Nova
|
||||
> presentation deck reported as "completely out of whack" after the
|
||||
> v1.21 P5 re-render. This research IS the investigation — the findings
|
||||
> below are the empirical root-cause analysis that drives the v1.22
|
||||
> requirements (REQ-254..262).
|
||||
|
||||
## Background — why v1.22 exists
|
||||
|
||||
The v1.21 milestone shipped a refined deck (renamed to "Autonomous Cloud
|
||||
Delivery Platform", 4-beat arc, 18 main + 1 appendix slides). The P5
|
||||
phase re-rendered the HTML + PPTX and added two new mermaid diagrams
|
||||
(`platform-pipeline.png`, `telemetry-live-ops.png`). After P5, the user
|
||||
reported that the layout is "completely out of whack" and that "they all
|
||||
have layout issues." This research identifies the root cause and the fix
|
||||
scope.
|
||||
|
||||
## FINDING 1 — Theme CSS has ZERO section padding (CONFIDENCE: VERY HIGH)
|
||||
|
||||
`docs/presentations/assets/nova-sp-theme.css` line 1 is
|
||||
`/* @theme nova-sp */` — a **comment**, not the `@theme` directive that
|
||||
Marp uses to register a theme name. The theme does **not `@import`**
|
||||
Marp's default theme. Marp's built-in default theme applies
|
||||
`section { padding: 56px 64px; }`. Because this custom theme neither
|
||||
imports the default nor sets its own `padding`, the rendered `<section>`
|
||||
has **zero padding**.
|
||||
|
||||
**Verification:** grep for `padding:56px` / `padding:64px` /
|
||||
`padding:96px` in the rendered HTML returns **zero matches**. The only
|
||||
`section` rules in the rendered HTML are:
|
||||
- `section{width:1280px;height:720px;box-sizing:border-box;overflow:hidden;position:relative;...}`
|
||||
(marpit base — no padding)
|
||||
- `section{font-family:...;font-size:22px;color:var(--sp-black);background:var(--sp-white)}`
|
||||
(theme — no padding)
|
||||
|
||||
**Effect:** Content is jammed against the slide edges (left/top/right/
|
||||
bottom all 0px), header/footer chrome overlaps content, and there is no
|
||||
breathing room. This alone makes every slide look "out of whack."
|
||||
|
||||
## FINDING 2 — overflow:hidden silently clips dense content (CONFIDENCE: VERY HIGH)
|
||||
|
||||
The marpit base rule sets `overflow:hidden` on `section`. The theme adds
|
||||
no `overflow` override, no scaling, no shrink-to-fit. Any slide whose
|
||||
content exceeds 720px is **clipped with no visual indication**. Combined
|
||||
with zero padding, content-dense slides (tables, image+bullets) lose
|
||||
their bottom rows / benefit paragraphs.
|
||||
|
||||
**Per-slide overflow risk table** (available content height ≈ 720px −
|
||||
header(~35px) − footer(~35px) − padding(0px) = ~650px):
|
||||
|
||||
| # | Slide | Est. height | Fits? | Issue |
|
||||
|---|---|---|---|---|
|
||||
| 3 | Objectives + Anti-Goals | ~780px | NO | Densest text slide; nested list |
|
||||
| 5 | RACI (8-row × 5-col) | ~700px | NO | Cell text wraps to 2 lines |
|
||||
| 6 | Pipeline (image + 4 bullets) | ~750px | NO | Image + bullets overflow |
|
||||
| 8 | Attestation (10-row × 4-col) | ~780px | NO | Description column wraps |
|
||||
| 9 | Telemetry (image + 4 bullets) | ~720px | NO | Image + bullets overflow |
|
||||
| 12 | Deferred (8-row table) | ~720px | NO | Blocking-work column wraps |
|
||||
| 15 | Quarter-by-Quarter (5-col) | ~720px | NO | Wide table, long text |
|
||||
| A1 | Glossary (13-row × 3-col) | ~700px | NO | On title-class (dark bg) |
|
||||
| 1,4,10,11,13,16,17,18 | various | ~620px | TIGHT | Cramped with 0 padding |
|
||||
| 2,7,14 | various | ~520px | YES | Manageable density |
|
||||
|
||||
**8 of 19 slides overflow; 8 more are cramped.**
|
||||
|
||||
## FINDING 3 — Image aspect-ratio catastrophe on slides 6 & 9 (CONFIDENCE: HIGH)
|
||||
|
||||
The two new P5 PNGs have extreme, opposite aspect ratios:
|
||||
|
||||
- `platform-pipeline.png` = **1568×116** (aspect 13.52, ultra-wide/short).
|
||||
The deck uses `![w:1000]`. At width=1000px, height = 1000/13.52 =
|
||||
**74px**. The `max-height:320px` rule never engages. The image renders
|
||||
as a 1000×74 thin strip — text in nodes is nearly unreadable, and the
|
||||
10-node LR flowchart is squashed.
|
||||
|
||||
- `telemetry-live-ops.png` = **1024×1628** (aspect 0.63, tall). The deck
|
||||
uses `![w:900]`. At width=900px the natural height would be **1428px**
|
||||
— but `max-height:320px` clamps it, so the image actually renders at
|
||||
**~201×320**. The `w:900` directive is **completely overridden** by
|
||||
`max-height:320px`. The image is tiny and the explicit width is
|
||||
ignored. The `.mmd` uses `flowchart TB` (top-bottom) — exactly the
|
||||
failure mode the README (line 168) warns against.
|
||||
|
||||
## FINDING 4 — Header+footer chrome on every slide (CONFIDENCE: HIGH)
|
||||
|
||||
The frontmatter sets both `header:` and `footer:` to the full 51-char
|
||||
deck title "Nova — The Autonomous Cloud Delivery Platform" on **every**
|
||||
slide (including the title slide, which has `data-header`/`data-footer`
|
||||
attributes present but `_paginate: false` only suppresses the page
|
||||
number, not the header/footer). The theme gives header a `border-bottom`
|
||||
and footer a `border-top`, each consuming ~30-40px of vertical chrome.
|
||||
With zero section padding, the header text sits at the very top edge and
|
||||
the footer at the very bottom edge, visually colliding with slide
|
||||
content. This reduces the effective content area from 720px to roughly
|
||||
640-650px on every slide.
|
||||
|
||||
## FINDING 5 — render_deck.sh produces unthemed output (CONFIDENCE: MEDIUM-HIGH)
|
||||
|
||||
`scripts/render_deck.sh` (line 44) runs marp-cli **without `--theme`**,
|
||||
relying on the frontmatter `theme: nova-sp`. But `nova-sp` is **not a
|
||||
built-in Marp theme** — it's a custom CSS file. Marp resolves `theme:`
|
||||
frontmatter against its built-in theme registry (default, gaia, uncover)
|
||||
and registered custom themes via `--theme-set`. Without `--theme <file>`
|
||||
or `--theme-set`, Marp cannot resolve `nova-sp` and **falls back to the
|
||||
default theme** (or errors). The committed HTML was rendered by
|
||||
`render_slides.sh` (which correctly passes `--theme`), so the committed
|
||||
artifact is fine — but `render_deck.sh` is a stale, dangerous script
|
||||
that would produce an unthemed/default-themed deck if anyone ran it.
|
||||
The README (line 201) documents `render_slides.sh` as canonical;
|
||||
`render_deck.sh` is not mentioned in the build-commands section.
|
||||
|
||||
## FINDING 6 — render_slides.sh missing 2x scale + transparent bg (CONFIDENCE: HIGH)
|
||||
|
||||
`render_slides.sh` mermaid invocation (lines 51-55) does **NOT** pass
|
||||
`-s 2` (2x scale) or `-b transparent`, despite the README (line 193)
|
||||
documenting both as required. This is why `platform-pipeline.png` is
|
||||
only 1568px wide (1x) instead of 3136px (2x) — the rendered PNGs are
|
||||
lower resolution than the README specifies, contributing to illegibility
|
||||
when scaled.
|
||||
|
||||
## FINDING 7 — P5 marp-cli version bump (CONFIDENCE: LOW — not the cause)
|
||||
|
||||
The P3→P5 HTML diff is 831 changed lines, but the **theme CSS portion
|
||||
is byte-identical** (verified: `font-size:22px`, `max-height:320px`,
|
||||
`marpit-root-font-size:22px`, `--sp-red:#D6002A` all match; `sp-red`
|
||||
appears exactly once in both). The large diff is:
|
||||
- (a) marp-cli boilerplate (bespoke-marp presenter/overview/transition
|
||||
CSS) changed due to a marp-cli version bump (neither script pins a
|
||||
version — both use `@latest`), and
|
||||
- (b) content changes: title "No-Humans Infrastructure Platform" →
|
||||
"Autonomous Cloud Delivery Platform", footer "Act %{page}/5 — v1.20"
|
||||
→ deck title, slide count 20 → 19.
|
||||
|
||||
The version bump did **not** alter the slide layout engine or the theme
|
||||
rules. **This is not the regression source.** The layout problems are
|
||||
inherent to the theme CSS (zero padding, no overflow handling, blunt
|
||||
image rule) which has been unchanged. P5 made the content denser (new
|
||||
diagrams with extreme aspect ratios, longer deck-title header/footer)
|
||||
which made the pre-existing theme flaws more visible.
|
||||
|
||||
## FINDING 8 — Test coverage gaps (CONFIDENCE: VERY HIGH)
|
||||
|
||||
`tests/test_slides_pipeline.py` (268 lines) checks **static file
|
||||
properties only**:
|
||||
- Theme CSS file exists and contains `#D6002A` / `#1B1B1B`
|
||||
- Frontmatter references `nova-sp`, not `default`
|
||||
- `render_slides.sh` exists, is executable, invokes mermaid-cli + marp-cli
|
||||
- Every `.mmd` has a `.png`
|
||||
- No maturity badges, no version in footer, slide count = 18+1
|
||||
- No D-###/REQ-###/internal `.py` paths in slides
|
||||
|
||||
**What is NOT tested (the gaps that let layout regressions through):**
|
||||
1. NO rendered-dimension / overflow test — no test renders the HTML and
|
||||
checks that each slide's content height ≤ 720px.
|
||||
2. NO theme-CSS structural test — no test asserts `section` has
|
||||
`padding`, that `overflow` is handled, or that `img` rules don't
|
||||
conflict with `w:`/`h:` directives.
|
||||
3. NO image aspect-ratio / legibility test — no test checks that PNG
|
||||
dimensions are reasonable for a 16:9 slide.
|
||||
4. NO render-script theme-flag test — no test asserts `render_deck.sh`
|
||||
passes `--theme` (it doesn't), so the broken script passes CI.
|
||||
5. NO rendered-HTML structural assertion — no test parses the committed
|
||||
HTML to verify the theme is actually embedded.
|
||||
6. NO mermaid render-scale test — no test verifies PNGs are 2x scale.
|
||||
|
||||
**Conclusion:** A layout regression — including the current zero-padding,
|
||||
image-clamping, and table-overflow problems — would pass every existing
|
||||
test. This is why the user's "completely out of whack" report was not
|
||||
caught.
|
||||
|
||||
## Theme CSS gaps (summary)
|
||||
|
||||
1. NO `padding` on `section` (lines 21-26 set font/color/bg only).
|
||||
2. NO `overflow` handling on `section`.
|
||||
3. NO `@import` of a base theme (line 1 is a comment, not `@theme`).
|
||||
4. NO rule for the `h2` + bold-lead-paragraph pattern (default `<p>`
|
||||
margins waste ~44px each).
|
||||
5. Table cell padding `6px 10px` too generous for 10-13 row tables.
|
||||
6. `img { max-height: 320px }` is a blunt instrument that breaks `w:`
|
||||
directives on tall images and does nothing for ultra-wide images.
|
||||
7. Header/footer have no padding/margin — collide with content at 0
|
||||
section padding.
|
||||
8. `section.title` does not suppress header/footer.
|
||||
9. NO rule for `ol` (only `ul`/`li` styled).
|
||||
10. NO `@media print` overrides for PPTX export fidelity.
|
||||
|
||||
## Assumptions logged (v1.22)
|
||||
|
||||
- **A1 (0.95):** The theme CSS is the primary root cause. Adding
|
||||
`section { padding: 48px 56px 40px; }` alone would fix the "jammed
|
||||
against edges" look on all 19 slides. Confidence grounded in the
|
||||
grep verification (zero padding matches in rendered HTML).
|
||||
- **A2 (0.9):** The P5 re-render is NOT a regression — the theme CSS is
|
||||
byte-identical P3→P5. P5's denser content (new diagrams, longer
|
||||
header/footer) made pre-existing flaws visible. Grounded in the
|
||||
byte-level diff comparison.
|
||||
- **A3 (0.9):** `render_deck.sh` should be deleted, not fixed. The
|
||||
README already documents `render_slides.sh` as canonical; keeping a
|
||||
second broken script is a footgun. Grounded in the README build-
|
||||
commands section (line 201) which does not mention `render_deck.sh`.
|
||||
- **A4 (0.85):** Splitting slides 3 and 8 (18 → 20 main) is preferable
|
||||
to trimming content, because the content is leadership-relevant and
|
||||
should not be lost. The slide-count test + README convention are
|
||||
updated to match. Grounded in the overflow estimates (slides 3 and 8
|
||||
are the densest at ~780px).
|
||||
- **A5 (0.8):** Pinning marp-cli/mermaid-cli versions is necessary to
|
||||
prevent uncontrolled boilerplate-CSS drift. The exact pinned versions
|
||||
will be determined during P2 execution by testing which version
|
||||
produces stable output in this environment.
|
||||
|
||||
## Decisions surfaced (research → bound in CLARIFY)
|
||||
|
||||
All 5 CLARIFY decisions are grounded in these findings:
|
||||
- Comprehensive scope (FINDINGS 1-8 span 4 layers)
|
||||
- Full pipeline (new milestone, complete audit trail)
|
||||
- Re-layout to LR (FINDING 3 — TB produced 0.63 aspect)
|
||||
- Delete render_deck.sh (FINDING 5 — stale, unthemed)
|
||||
- Split slides 3+8 (FINDING 2 — densest overflow)
|
||||
|
||||
Reference in New Issue
Block a user