e560adacb6
---ci--- project: acdl phase: 0 milestone: v1.30 status: plan ---/ci---
275 lines
13 KiB
Markdown
275 lines
13 KiB
Markdown
# PLAN — v1.30 Single-shot Leadership Deck
|
||
|
||
> **Milestone:** v1.30 (feature — single-shot PPTX leadership deck).
|
||
> Tags on the **v1.29.x** line: `v1.29.1` (P0) → `v1.29.2` (P1
|
||
> execution) → `v1.29.3` (P2 final = milestone release). The final
|
||
> phase's patch IS the milestone release.
|
||
> **Branch:** `milestone/v1.30-leadership-deck`. Phase branches:
|
||
> `phase/00-pre-execution`, `phase/01-leadership-deck`,
|
||
> `phase/02-final-review-ship`.
|
||
>
|
||
> **Tags:** `v1.29.1` (P0) → `v1.29.2` (P1) → `v1.29.3` (P2 final =
|
||
> milestone release). **1 execution phase** (P1) — this is a
|
||
> single-shot artifact, not a multi-phase build.
|
||
|
||
## Milestone goal
|
||
|
||
A single-shot, 7-slide PPTX leadership deck for Infrastructure &
|
||
Operations leadership (CTO + VP Technology + Product Management),
|
||
presented live in August 2026, securing architecture endorsement and
|
||
a November 2026 runway. Authored as Marp markdown, rendered via the
|
||
existing `scripts/render_pptx.py` (narrowly extended per D-242),
|
||
verified by `scripts/check_leadership_deck.sh`. The deck is discrete
|
||
from the existing citizen-developer pitch (D-241: NOT a compression).
|
||
|
||
## Requirements
|
||
|
||
12 requirements: REQ-372.1..REQ-372.12 (full text in
|
||
`.ciagent/REQUIREMENTS.md` §v1.30). 1 capability: CAP-042. 3
|
||
decisions: D-241..D-243 (CLARIFY). Vision grounding: `[1]` →
|
||
`docs/vision.md`.
|
||
|
||
## Phase breakdown
|
||
|
||
### Phase P1 — leadership-deck (REQ-372.1..REQ-372.12)
|
||
|
||
**Goal:** Author the Marp markdown deck source, extend the render
|
||
pipeline, render the PPTX, author the smoke test, and append the
|
||
ship-wave records (CAP-042, D-241). The deck is a single-shot
|
||
artifact; all 12 REQs ship in this one phase.
|
||
|
||
**Personas:** lead-developer, backend-engineer, ci-doc-writer
|
||
(phase-specific), ci-cli-engineer.
|
||
|
||
**Territory:** `docs/presentations/nova-leadership-deck-marp.md`
|
||
(ci-doc-writer), `scripts/render_pptx.py` +
|
||
`docs/presentations/nova-leadership-deck.pptx` (backend-engineer),
|
||
`scripts/check_leadership_deck.sh` (ci-cli-engineer),
|
||
`.ciagent/STATE.md` + `.ciagent/PROJECT.md` (lead-developer).
|
||
|
||
#### Wave 1 — render pipeline prerequisite (backend-engineer)
|
||
|
||
**Task P1.W1.T1:** Extend `scripts/render_pptx.py` per D-242:
|
||
- Accept an explicit source `.md` path as argv[1] (if it ends in
|
||
`.md` and contains a `/`, treat as a path; else treat as a deck
|
||
name per the existing convention — backward compatible).
|
||
- Accept `--output <path>` for the custom output filename. Default:
|
||
derive from the source name (strip `-marp.md` → add `.pptx`) for
|
||
backward compatibility.
|
||
- Add a `_add_footer(slide, text)` helper that adds a right-aligned
|
||
textbox at the bottom of every slide with the exact string
|
||
`Nova Platform - Infrastructure & Operations` (grey, small). Call
|
||
it in both `render_title_slide` and `render_content_slide`.
|
||
- The footer text is read from the Marp frontmatter `footer:`
|
||
directive if present; else default to the existing deck's footer
|
||
(backward compatible). Parse the frontmatter to extract the
|
||
`footer:` value (the existing code strips frontmatter without
|
||
reading it — add a frontmatter parser).
|
||
- **No other renderer change.** Speaker notes remain skipped
|
||
(acceptable per RESEARCH R1).
|
||
|
||
**Must-haves:**
|
||
- `python3 scripts/render_pptx.py docs/presentations/nova-leadership-deck-marp.md --output docs/presentations/nova-leadership-deck.pptx` works.
|
||
- `python3 scripts/render_pptx.py nova-autonomous-cloud-delivery` still works (backward compatible — renders `{deck}-marp.md` → `{deck}-python.pptx`).
|
||
- Every rendered slide has a right-aligned footer textbox.
|
||
- `python3 -m py_compile scripts/render_pptx.py` exits 0.
|
||
|
||
**REQs covered:** (prerequisite, not REQ-372 directly — per spec §3.3
|
||
Edge 2 + D-242).
|
||
|
||
#### Wave 2 — deck source (ci-doc-writer)
|
||
|
||
**Task P1.W2.T1:** Author
|
||
`docs/presentations/nova-leadership-deck-marp.md`:
|
||
- **Header comment (REQ-372.9):** an HTML comment at the top (before
|
||
frontmatter) naming this deck as the leadership artifact for
|
||
Infrastructure & Operations, August 2026 presentation date, and
|
||
naming `nova-autonomous-cloud-delivery-marp.md` as a related-but-
|
||
distinct artifact that this deck does not compress or modify.
|
||
- **Frontmatter (cover note):** `marp: true; theme: default; footer:
|
||
"Nova Platform - Infrastructure & Operations"; paginate: false;
|
||
size: 16:9` + a `style:` block using ONLY the 4 S&P tokens
|
||
(`#D6002A`, `#1B1B1B`, `#FFFFFF`, `#F0F0F0`). **Replace the
|
||
existing deck's `#2E2E2E` blockquote color with `#1B1B1B`** to
|
||
satisfy REQ-372.6.
|
||
- **7 slides** delimited by `---` on its own line (REQ-372.3). All
|
||
slides use `##` H2 titles (content slides, white bg, red title bar
|
||
— per RESEARCH R1 final call for visual consistency).
|
||
- **On-slide body** per the Slide Content Map in PROJECT.md §v1.30
|
||
(REQ-372.7). Use `>` blockquotes for the italic callouts, `**...**`
|
||
bold lead for the slide titles' sub-headings, `-` bullets with `→`
|
||
prefix for the arrow lines (so they render as proper bullets).
|
||
- **Speaker notes** per slide as HTML comments `<!-- ... -->` within
|
||
the slide body before the next `---` (REQ-372.4). Word counts:
|
||
slides 1/2/4/6 in 150–300; slides 3/5 in 250–400; slide 7 in
|
||
200–300.
|
||
- **`[1]` citations** (REQ-372.12): at least one `[1]` in speaker
|
||
notes of slides 3, 5, 7 (the architecture-load slides), grounding
|
||
to `docs/vision.md` tenets/anti-goals/boundaries.
|
||
- **No hex colors** outside the 4 S&P tokens anywhere in the source
|
||
(REQ-372.6).
|
||
|
||
**Must-haves:**
|
||
- File exists, parses as valid Marp, exactly 7 `---`-delimited slides.
|
||
- Header comment present with all 3 elements (REQ-372.9).
|
||
- Frontmatter has the exact footer string + `paginate: false`.
|
||
- Per-slide speaker-note word counts in band.
|
||
- `[1]` present in slides 3, 5, 7 speaker notes.
|
||
- `grep -oiE '#[0-9A-Fa-f]{6}'` returns only the 4 S&P tokens.
|
||
|
||
**REQs covered:** REQ-372.1, REQ-372.3, REQ-372.4, REQ-372.6,
|
||
REQ-372.7, REQ-372.9, REQ-372.12.
|
||
|
||
#### Wave 3 — smoke test (ci-cli-engineer)
|
||
|
||
**Task P1.W3.T1:** Author `scripts/check_leadership_deck.sh`:
|
||
- Shebang `#!/usr/bin/env bash`, `set -euo pipefail`, header comment
|
||
with Usage + Returns.
|
||
- Assertions (REQ-372.8 a–f):
|
||
- (a) `docs/presentations/nova-leadership-deck-marp.md` exists.
|
||
- (b) slide count = 7 (count `^---\s*$` lines after frontmatter
|
||
end, +1; or count `---` separators — careful with frontmatter).
|
||
- (c) per-slide speaker-note word counts in band (extract `<!-- ...
|
||
-->` content per slide, `wc -w`; slides 1/2/4/6: 150–300; 3/5:
|
||
250–400; 7: 200–300). Exit non-zero on violation.
|
||
- (d) footer string `Nova Platform - Infrastructure & Operations`
|
||
present in source (frontmatter `footer:` directive).
|
||
- (e) only S&P hex colors in source (`grep -oiE '#[0-9A-Fa-f]{6}'`,
|
||
`sort -u`, compare to 4-token allow-list).
|
||
- (f) `docs/presentations/nova-leadership-deck.pptx` exists (hard
|
||
fail per Q-M4).
|
||
- Exit 0 on pass, non-zero (1) on fail. Runnable from repo root.
|
||
- NOT wired as a CI gate (no `.github/workflows/` or
|
||
`workflows-src/` integration).
|
||
|
||
**Must-haves:**
|
||
- `bash scripts/check_leadership_deck.sh` exits 0 after the deck +
|
||
PPTX are authored/rendered.
|
||
- Exits non-zero if any assertion fails (test by temporary
|
||
mutation).
|
||
|
||
**REQs covered:** REQ-372.8.
|
||
|
||
#### Wave 4 — render + ship-wave records (backend-engineer + lead-developer)
|
||
|
||
**Task P1.W4.T1 (backend-engineer):** Render the PPTX:
|
||
- `python3 scripts/render_pptx.py docs/presentations/nova-leadership-deck-marp.md --output docs/presentations/nova-leadership-deck.pptx`
|
||
- Verify: PPTX written with 7 slides, python-pptx raised no
|
||
exceptions, footer textbox present on every slide.
|
||
- Run `bash scripts/check_leadership_deck.sh` → exits 0.
|
||
|
||
**Task P1.W4.T2 (lead-developer):** Append CAP-042 to STATE.md:
|
||
- CAP-042 row in the capability table: artifact paths
|
||
(`nova-leadership-deck-marp.md`, `nova-leadership-deck.pptx`),
|
||
audience (Infrastructure & Operations leadership), single-shot
|
||
intent, presentation month (August 2026), milestone v1.30 / tag
|
||
`v1.29.3`.
|
||
|
||
**Task P1.W4.T3 (lead-developer):** Record D-241 in PROJECT.md:
|
||
- D-241 entry in the decisions section: single-shot nature, audience,
|
||
August 2026 anchor + November 2026 runway, explicit decision not
|
||
to compress the existing citizen-developer deck.
|
||
|
||
**Must-haves:**
|
||
- PPTX exists with 7 slides.
|
||
- Smoke test exits 0.
|
||
- CAP-042 row in STATE.md.
|
||
- D-241 record in PROJECT.md.
|
||
|
||
**REQs covered:** REQ-372.2, REQ-372.5, REQ-372.8, REQ-372.10,
|
||
REQ-372.11.
|
||
|
||
### Phase P2 — final-review-ship (review + audit + milestone ship)
|
||
|
||
**Goal:** Multi-persona review of the milestone changes, project-
|
||
health audit, and milestone ship (merge to main, tag `v1.29.3` =
|
||
milestone release, delete milestone branches).
|
||
|
||
**Personas:** lead-developer (review + audit + ship coordination).
|
||
|
||
**Tasks:**
|
||
- Review all v1.30 changes (deck source, render extension, smoke
|
||
test, STATE.md/PROJECT.md records). Auto-apply P0 fixes; flag P1+
|
||
for post-hoc review.
|
||
- Audit: reconstruction test (git log matches `.ciagent/` files),
|
||
file discipline, branch hygiene, commit discipline.
|
||
- Ship: merge `phase/02` → `milestone/v1.30-leadership-deck` →
|
||
`main`, tag `v1.29.3`, create release, delete milestone branches.
|
||
- Complete: mark REQ-372.1..12 complete in REQUIREMENTS.md, mark
|
||
v1.30 complete in ROADMAP.md.
|
||
|
||
## Wave dependency graph
|
||
|
||
```
|
||
W1 (render_pptx.py extension) ─┐
|
||
├─→ W4.T1 (render PPTX) ─→ W4.T2/T3 (records)
|
||
W2 (deck source) ──────────────┤ │
|
||
│ ↓
|
||
W3 (smoke test) ───────────────┴────────────────────────→ P1 VERIFY
|
||
│
|
||
↓
|
||
P1 SHIP (v1.29.2)
|
||
│
|
||
↓
|
||
P2 (v1.29.3)
|
||
```
|
||
|
||
W1, W2, W3 are independent (no cross-dependencies at author time).
|
||
W4 depends on W1 + W2 (render needs the extension + the source) +
|
||
W3 (smoke test validates the render). W4.T2/T3 (records) depend on
|
||
W4.T1 (render confirms ship readiness).
|
||
|
||
## User-Facing Surface
|
||
|
||
- **The PPTX deck** (`docs/presentations/nova-leadership-deck.pptx`)
|
||
— the primary leadership-facing artifact, presented live in August
|
||
2026.
|
||
- **The Marp markdown source**
|
||
(`docs/presentations/nova-leadership-deck-marp.md`) — the source-
|
||
of-truth, reproducible via `scripts/render_pptx.py`.
|
||
- **The smoke test** (`scripts/check_leadership_deck.sh`) — runnable
|
||
on demand by the PO/presenter to verify deck integrity before
|
||
presentation.
|
||
|
||
## Happy Path
|
||
|
||
**J1 — PO presents the deck live** (from spec §3.2):
|
||
|
||
1. PO authors `nova-leadership-deck-marp.md` against the Slide
|
||
Content Map; `bash scripts/check_leadership_deck.sh` exits 0
|
||
(verifies content). _(REQ-372.1, .4, .6, .7, .8, .12.)_
|
||
2. PO renders the markdown to PPTX via
|
||
`python3 scripts/render_pptx.py docs/presentations/nova-leadership-deck-marp.md --output docs/presentations/nova-leadership-deck.pptx`;
|
||
visual inspection confirms 7 slides + footer. _(REQ-372.2, .5.)_
|
||
3. PO presents live to Infrastructure & Operations leadership;
|
||
speaker notes carry architecture depth. _(REQ-372.4.)_
|
||
4. PO updates STATE.md with CAP-042 and PROJECT.md with D-241 at the
|
||
v1.30 ship wave. _(REQ-372.10, .11.)_
|
||
|
||
## UX Acceptance Criteria
|
||
|
||
1. `bash scripts/check_leadership_deck.sh` exits 0 (all 6 assertions
|
||
a–f pass).
|
||
2. `docs/presentations/nova-leadership-deck.pptx` exists, has 7
|
||
slides, and python-pptx raised no exceptions during render.
|
||
3. Visual review: each slide N (1–7) matches the Slide Content Map
|
||
in PROJECT.md §v1.30 (on-slide body + speaker notes fingerprint).
|
||
4. Footer `Nova Platform - Infrastructure & Operations` is visible
|
||
(right-aligned) on every rendered slide.
|
||
5. Only S&P theme colors appear in the source markdown.
|
||
6. `[1]` citations present in slides 3, 5, 7 speaker notes.
|
||
7. CAP-042 row in STATE.md; D-241 record in PROJECT.md.
|
||
8. `nova-autonomous-cloud-delivery-marp.md` is unmodified (D-241
|
||
discrete-artifact constraint).
|
||
|
||
## Risks (from RESEARCH + GRILL)
|
||
|
||
| Risk | Mitigation |
|
||
|---|---|
|
||
| python-pptx render fails on the new frontmatter/style block | The python-pptx path strips frontmatter without reading it; the `style:` block is source-only (Marp CLI). No render risk. |
|
||
| Footer textbox overlaps content | Place footer at `SLIDE_H - 0.3"` (bottom margin); content area tops out at ~6.5". No overlap. |
|
||
| Speaker notes word-count band violation | ci-doc-writer counts words per slide during authoring; smoke test (8c) is the gate. |
|
||
| `→` lines render as plain text (not bullets) | Use `- → ...` bullets so the renderer treats them as bullet blocks with the arrow in the text. |
|
||
| `*italic*` in source matches unordered-list regex | Verified in RESEARCH R1: `*italic*` (no space after `*`) does NOT match `[-*+]\s+`. Safe. |
|
||
| CAP-024 regression policy collides | Verified in RESEARCH R7: CAP-024 validates fixtures, not deck files. No collision. |
|
||
| `slides.yml` CI interferes | Verified in RESEARCH R8: CI only renders the citizen-developer deck (hardcoded DECK). No interference. | |