docs(P00): grill — 4 revisions applied (PROCEED-WITH-REVISIONS, 0.78)
Nova Slides Render / render (push) Failing after 57s

10 axes reviewed. 6 PASS, 4 REVISE. Overall: PROCEED-WITH-REVISIONS.
Empirically cleared (not assumed): image format (plain <img src>, conf
0.95) + Marp <div> passthrough (rendered test, conf 0.95). Versioning
clean (no v1.22.* tags, conf 1.0). Test inversion risk fully enumerated
(conf 0.9).

Revisions (binding):
G-001 (0.85): purge 'penetrate' repo-wide (docs/ + .ciagent/), not just
  docs/presentations/. RESEARCH.md/PLAN.md/GRILL.md exempt as decision-
  history. P4 verify becomes grep -ri penetrat docs/ .ciagent/PROJECT.md
  .ciagent/CLARIFY.md -> nothing.
G-002 (0.85): serialize P3->P4 (not parallel). P4's parser depends on
  P3's stable render_slides.sh; P4's trimmed deck is what P3b's parser
  consumes. C8 parallelization overruled.
G-003 (0.80): split P3 into P3a (inline_images.py + render_slides.sh +
  pyproject — low-risk) + P3b (render_pptx.py + parser +
  attach_release_asset.py — high-risk, isolated). Both serial in Wave 3.
G-004 (0.80): merge P5+P6. NFR docs milestone; dedicated review/ship
  phase is ceremonial. P5 absorbs review/audit/ship. Net phases 7->6.

Revised phase/tag plan:
v1.22.0 P0 -> v1.22.1 P1 -> v1.22.2 P2 -> v1.22.3 P3a -> v1.22.4 P3b
-> v1.22.5 P4 -> v1.22.6 P5 (final = milestone release).

---ci---
project: acdl
phase: 0
milestone: v1.23
status: grill
---/ci---
This commit is contained in:
Jon Chery
2026-08-12 00:05:34 +00:00
parent ea44fdb9d6
commit b8fbd995a9
4 changed files with 153 additions and 102 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"phase": 0,
"stage": "plan",
"stage": "grill",
"milestone": "v1.23",
"phase_role": "pre_execution",
"attempts": 0,
+131 -84
View File
@@ -1,8 +1,21 @@
# PLAN — v1.23 (Nova Deck Cleanup & Python PPTX)
> NFR milestone (docs/render/test only). Tags on v1.22.x line:
> v1.22.0 (P0) → v1.22.1..v1.22.5 (P1P5) → v1.22.6 (P6 final = milestone
> release). 13 requirements (REQ-263..275), 7 phases.
> v1.22.0 (P0) → v1.22.1..v1.22.4 (P1P4) → v1.22.5 (P5 final = milestone
> release). 13 requirements (REQ-263..275), 6 phases.
>
> **GRILL revisions applied** (G-001..G-004, conf 0.78-0.85):
> - G-001: "penetrate" purge covers the whole repo (`docs/` +
> `.ciagent/`), not just `docs/presentations/`.
> - G-002: P3→P4 serialized (not parallel) — P4's parser depends on
> P3's stable `render_slides.sh`; P4's trimmed deck is what P3b's
> parser consumes.
> - G-003: P3 split into P3a (inline_images + render_slides.sh +
> pyproject — low-risk) + P3b (render_pptx.py + parser +
> attach_release_asset.py — high-risk, isolated).
> - G-004: P5+P6 merged — NFR docs milestone; dedicated review/ship
> phase is ceremonial overhead. P5 absorbs review/audit/ship. Tag
> v1.22.5 = milestone release.
## Wave Ordering
@@ -13,25 +26,26 @@ Wave 2 (P2): restore-clean-style (edits -marp.md frontmatter +
↓ benefit callouts; edits render_slides.sh; retires
↓ nova-sp-theme.css from render)
Wave 3 (P3 + P4, parallel):
P3: inline-images + python-pptx-generator (new scripts +
render_slides.sh step + pyproject; ZERO deck-markdown overlap)
P4: trim-wordcount + remove "penetrate" (edits -marp.md +
talking-points.md; ZERO script overlap with P3)
Wave 3 (P3a): inline-images (inline_images.py + render_slides.sh
↓ step + pyproject — low-risk, mechanical)
Wave 4 (P5): ci-tests-readme (workflows, tests, README —
depends on all above)
Wave 4 (P3b): python-pptx-generator (render_pptx.py + parser +
attach_release_asset.py — high-risk, isolated)
Wave 5 (P6): final-review-ship (review + audit + milestone ship)
Wave 5 (P4): trim-wordcount + remove "penetrate" (edits -marp.md +
↓ talking-points.md + docs/scope.md + docs/vision.md +
↓ .ciagent/*.md "penetrate" purge)
Wave 6 (P5): ci-tests-readme + review + audit + milestone ship
(merged P5+P6 per G-004)
```
**Rationale (C8, conf 0.85):** P1→P2 is serial (both edit `-marp.md`;
P1 establishes the single doc, P2 edits its frontmatter). P3+P4
parallelize: P3 owns `scripts/inline_images.py` + `scripts/render_pptx.py`
+ `scripts/render_slides.sh` + `pyproject.toml` + `scripts/attach_release_asset.py`;
P4 owns `docs/presentations/nova-autonomous-cloud-delivery-marp.md` +
`*-talking-points.md` — zero file overlap. P5 depends on all (tests
assert the final state). P6 is the final gate.
**Rationale (C8 revised by G-002/G-003/G-004):** P1→P2 serial (both
edit `-marp.md`). P3a→P3b serial (P3b's parser benefits from P3a's
stable `render_slides.sh`). P4 serial after P3b (P4's trimmed deck is
what P3b's parser must handle; P4's verify render depends on P3a's
stable script). P5 final (merged review/audit/ship per G-004 — NFR docs
milestone doesn't warrant a dedicated P6).
---
@@ -149,15 +163,12 @@ assert the final state). P6 is the final gate.
---
## Phase P3 — inline-images + python-pptx-generator (tag v1.22.3)
## Phase P3a — inline-images (tag v1.22.3)
**Requirements:** REQ-268, REQ-269, REQ-270
**Persona:** backend-engineer (scripts + pyproject) + lead-developer
(deck structure consultation)
**Branch:** `phase/03-inline-images-pptx`
**Requirements:** REQ-268
**Persona:** backend-engineer (scripts + pyproject)
**Branch:** `phase/03a-inline-images`
**Depends on:** P2 (render_slides.sh `--theme` drop)
**Parallel with:** P4 (zero file overlap — P3 owns scripts, P4 owns
deck markdown)
### Tasks
@@ -174,7 +185,36 @@ deck markdown)
- Writes HTML back in place; prints count inlined to stderr.
- Usage: `python scripts/inline_images.py <html-path>`.
2. **`scripts/render_pptx.py`** (REQ-269):
2. **`scripts/render_slides.sh`** (REQ-268):
- After Step 2 (MARP render), add Step 3: inline images into HTML
(`python scripts/inline_images.py "$HTML"`).
- Update Step 5 (stage): no change yet (python-pptx is P3b).
- Order now: Step 1 mermaid → Step 2 MARP HTML+PPTX → Step 3 inline
images → Step 4 stage.
3. **Verify** (must-have):
- `bash scripts/render_slides.sh` produces `.html` with inlined
base64 images.
- Open the HTML from a different directory (no `assets/` folder) —
images display.
- `grep -c 'src="assets/' nova-autonomous-cloud-delivery.html`
returns 0 (all inlined).
- `grep -c 'data:image' nova-autonomous-cloud-delivery.html`
returns ≥2 (the deck's 2 images).
---
## Phase P3b — python-pptx-generator (tag v1.22.4)
**Requirements:** REQ-269, REQ-270
**Persona:** backend-engineer (scripts + pyproject) + lead-developer
(deck structure consultation)
**Branch:** `phase/03b-python-pptx`
**Depends on:** P3a (stable render_slides.sh with inline step)
### Tasks
1. **`scripts/render_pptx.py`** (REQ-269):
- Dependency: `python-pptx>=0.6.23` (import at module load; if
absent, print "pip install -e .[slides]" and exit 1).
- Parses `nova-autonomous-cloud-delivery-marp.md`:
@@ -209,46 +249,43 @@ deck markdown)
- Usage: `python scripts/render_pptx.py [deck-name]` (defaults to
`nova-autonomous-cloud-delivery`).
3. **`pyproject.toml`** (REQ-269):
2. **`pyproject.toml`** (REQ-269):
- Add to `[project.optional-dependencies]`:
```toml
slides = ["python-pptx>=0.6.23"]
```
4. **`scripts/render_slides.sh`** (REQ-268, REQ-270):
- After Step 2 (MARP render), add Step 3: inline images into HTML.
3. **`scripts/render_slides.sh`** (REQ-270):
- Add Step 4: python-pptx render → `*-python.pptx`.
- Update Step 5 (stage): add `*-python.pptx`.
- Final order: Step 1 mermaid → Step 2 MARP HTML+PPTX → Step 3
inline images → Step 4 python-pptx → Step 5 stage.
5. **`scripts/attach_release_asset.py`** (REQ-270):
4. **`scripts/attach_release_asset.py`** (REQ-270):
- Extend to accept multiple asset paths (both `.pptx` +
`-python.pptx`). Backward-compatible (single arg still works; or
accept a list). MARP PPTX is the primary attachment (first).
6. **Verify** (must-have):
5. **Verify** (must-have):
- `bash scripts/render_slides.sh` produces 3 artifacts: `.html`
(with inlined base64 images), `.pptx` (MARP), `-python.pptx`
(structured).
- Open the HTML from a different directory (no `assets/` folder) —
images display.
- Open `-python.pptx` — 16:9, title slide black with red bar, content
slides with red titles + bullets + tables + images.
- `grep -c 'src="assets/' nova-autonomous-cloud-delivery.html`
returns 0 (all inlined).
- `grep -c 'data:image' nova-autonomous-cloud-delivery.html`
returns ≥2 (the deck's 2 images).
- `-python.pptx` is a valid zip (PPTX signature).
---
## Phase P4 — trim-wordcount (tag v1.22.4)
## Phase P4 — trim-wordcount + repo-wide "penetrate" purge (tag v1.22.5)
**Requirements:** REQ-271, REQ-272
**Persona:** lead-developer (deck markdown + talking-points)
**Persona:** lead-developer (deck markdown + talking-points + docs +
.ciagent)
**Branch:** `phase/04-trim-wordcount`
**Depends on:** P1 (consolidated doc)
**Parallel with:** P3 (zero file overlap)
**Depends on:** P3b (stable render_slides.sh; trimmed deck is what P3b's
parser already handles — P4 does not break P3b's parser because the
parser handles the pre-trim structure and P4 trims prose, not
structure)
### Tasks
@@ -273,31 +310,43 @@ deck markdown)
- Benefit callouts (all slides): already restyled in P2; here just
tighten each to one short sentence (preserve the spirit).
2. **Remove "penetrate"** (REQ-272):
- Slide 5 line 73: "Nova never penetrates it. Integration is through
one validated contract." → "Integration is through one validated
contract." (The "PDLC is upstream" bullet already conveys scope;
slide 4 Anti-Goals explicitly excludes the PDLC.)
- `nova-autonomous-cloud-delivery-talking-points.md:40`: "Nova never
penetrates it" → match slide 5's trimmed wording.
- The plain `.md` is already deleted (P1), so its `:165` "penetrate"
line is gone.
2. **Remove "penetrate" — repo-wide purge** (REQ-272, G-001):
- `docs/presentations/nova-autonomous-cloud-delivery-marp.md` slide 5:
"Nova never penetrates it. Integration is through one validated
contract." → "Integration is through one validated contract."
- `docs/presentations/nova-autonomous-cloud-delivery-talking-points.md:40`:
"Nova never penetrates it" → match slide 5's trimmed wording.
- `docs/scope.md`: reword "Nova never penetrates the PDLC" →
"Nova never reaches into the PDLC" (or restructure — the scope
boundary is already established by "downstream of PDLC").
- `docs/vision.md`: reword "It does not penetrate upstream product or
software development lifecycles" → "It does not reach into upstream
product or software development lifecycles".
- `.ciagent/PROJECT.md`: reword the 3 "penetrate" occurrences in the
Core Tenets #2 + Scope sections.
- Note: `.ciagent/RESEARCH.md` + `.ciagent/PLAN.md` meta-references
to "penetrate removal" are NOT purged (they describe the removal;
purging them would erase the decision history).
3. **Verify** (must-have):
- `grep -ri penetrat docs/presentations/` returns nothing (text
files: .md, .html).
- `grep -ri penetrat docs/ .ciagent/PROJECT.md .ciagent/CLARIFY.md`
returns nothing (the term is gone from all audience-facing +
project-spec docs; RESEARCH.md/PLAN.md/GRILL.md meta-references
are exempt as decision-history).
- Slide count unchanged (22).
- `bash scripts/render_slides.sh` renders; no broken slides.
- Word count of trimmed slides reduced ~20-30% (manual spot-check).
---
## Phase P5 — ci-tests-readme (tag v1.22.5)
## Phase P5 — ci-tests-readme + review + audit + ship (Final Phase, tag v1.22.6)
**Requirements:** REQ-273, REQ-274, REQ-275
**Persona:** backend-engineer (CI + tests) + lead-developer (README)
**Branch:** `phase/05-ci-tests-readme`
**Depends on:** P1, P2, P3, P4 (asserts the final state)
**Requirements:** REQ-273, REQ-274, REQ-275 (+ review/audit/ship for all REQ-263..275)
**Persona:** backend-engineer (CI + tests) + lead-developer (README + review coordination)
**Branch:** `phase/05-ci-tests-readme-ship`
**Depends on:** P1, P2, P3a, P3b, P4 (asserts the final state; merged
P5+P6 per G-004 — NFR docs milestone doesn't warrant a dedicated
review/ship phase)
### Tasks
@@ -325,8 +374,10 @@ deck markdown)
- `test_source_md_*` → delete (plain `.md` is gone).
- `test_render_slides_pins_cli_versions` → keep, extend to assert
`python-pptx` is in `pyproject.toml`.
- `test_no_penetrate_term` (new): assert
`grep -ri penetrat docs/presentations/` returns nothing.
- `test_no_penetrate_term` (new, G-001): assert
`grep -ri penetrat docs/ .ciagent/PROJECT.md .ciagent/CLARIFY.md`
returns nothing (RESEARCH.md/PLAN.md/GRILL.md meta-references
exempt as decision-history).
- `test_html_images_inlined_as_base64` (new): assert rendered
HTML has zero `src="assets/` references and ≥1
`data:image/png;base64` per image the deck uses.
@@ -365,34 +416,17 @@ deck markdown)
- Document the dual-PPTX output (MARP image-of-slide primary +
python structured for comparison/editing).
4. **Verify** (must-have):
- `pytest tests/test_slides_pipeline.py tests/test_pptx_generator.py`
all pass.
- CI workflow YAML is valid.
- README reflects the new pipeline.
---
## Phase P6 — final-review-ship (Final Phase, tag v1.22.6)
**Requirements:** all (REQ-263..275)
**Persona:** lead-developer (review coordination)
**Branch:** `phase/06-final-review-ship`
**Depends on:** P1P5
### Tasks
1. **Multi-persona code review** (`ciagent-review`):
4. **Multi-persona code review** (`ciagent-review`):
- Review all changes in `milestone/v1.23-deck-cleanup-python-pptx`.
- Auto-apply P0 fixes; flag P1+ for post-hoc review.
- If P1+ found: fix in this phase.
2. **Audit** (`ciagent-audit`):
5. **Audit** (`ciagent-audit`):
- Reconstruction test: git log matches `.ciagent/` files.
- `.ciagent/` file discipline + branch hygiene + commit discipline.
3. **Ship** (`ciagent-ship` — milestone ship):
- Merge `phase/06` → `milestone/v1.23-deck-cleanup-python-pptx`.
6. **Ship** (`ciagent-ship` — milestone ship):
- Merge `phase/05` → `milestone/v1.23-deck-cleanup-python-pptx`.
- Merge `milestone/v1.23-deck-cleanup-python-pptx` → `main`.
- Tag `v1.22.6` (final patch = milestone release).
- Create release with full milestone summary (all phases, all 13
@@ -401,20 +435,28 @@ deck markdown)
- Delete all milestone branches (local + remote). Tags preserve
history.
4. **Complete the milestone**:
7. **Complete the milestone**:
- Update `REQUIREMENTS.md` — mark all v1.23 requirements complete.
- Update `ROADMAP.md` — mark v1.23 complete.
- Commit: `docs(milestone): complete v1.23 — Nova Deck Cleanup & Python PPTX`.
8. **Verify** (must-have):
- `pytest tests/test_slides_pipeline.py tests/test_pptx_generator.py`
all pass.
- CI workflow YAML is valid.
- README reflects the new pipeline.
---
## Versioning
- NFR milestone → progressive patches on v1.22.x line.
- `v1.22.0` (P0) → `v1.22.1..v1.22.5` (P1P5) → `v1.22.6` (P6 final =
milestone release). No separate minor tag.
- `v1.22.0` (P0) → `v1.22.1` (P1) → `v1.22.2` (P2) → `v1.22.3` (P3a) →
`v1.22.4` (P3b) → `v1.22.5` (P4) → `v1.22.6` (P5 final = milestone
release). No separate minor tag. 6 phases total (was 7; P5+P6 merged
per G-004, P3 split into P3a+P3b per G-003).
## Risk Mitigations (from RESEARCH)
## Risk Mitigations (from RESEARCH + GRILL)
1. **Default theme padding** — explicitly set
`section { padding: 48px 56px 40px }` in the inline `style:` block
@@ -428,4 +470,9 @@ deck markdown)
slides but they persist in the source `-marp.md` (acceptable; they're
for authors, not the audience).
5. **`test_html_embeds_theme`** — update to assert literal `#D6002A`
(not `--sp-red`).
(not `--sp-red`).
6. **P3b parser overflow** (G-003) — isolated in its own phase so a
parser setback doesn't block inline-images (P3a) or trim (P4).
7. **"penetrate" purge scope** (G-001) — repo-wide, not just
`docs/presentations/`; RESEARCH.md/PLAN.md/GRILL.md exempt as
decision-history.
+3 -3
View File
@@ -2020,9 +2020,9 @@ assert 20 main + 1 appendix.
| REQ-265 | P2 | pending |
| REQ-266 | P2 | pending |
| REQ-267 | P2 | pending |
| REQ-268 | P3 | pending |
| REQ-269 | P3 | pending |
| REQ-270 | P3 | pending |
| REQ-268 | P3a | pending |
| REQ-269 | P3b | pending |
| REQ-270 | P3b | pending |
| REQ-271 | P4 | pending |
| REQ-272 | P4 | pending |
| REQ-273 | P5 | pending |
+18 -14
View File
@@ -2100,7 +2100,10 @@ release). **DONE.**
### Phase P0 — pre-execution (active)
- SPECIFY → CLARIFY → RESEARCH → PLAN → GRILL. Establishes v1.23
requirements (REQ-263..275). Tag `v1.22.0`.
requirements (REQ-263..275). Tag `v1.22.0`. Grill PROCEED-WITH-
REVISIONS (0.78): 4 binding revisions applied (G-001 repo-wide
"penetrate" purge; G-002 P3→P4 serialized; G-003 P3 split P3a+P3b;
G-004 P5+P6 merged).
### Phase P1 — consolidate-docs (planned, tag v1.22.1)
- REQ-263: fold speaker notes + talking points into `*-marp.md` as Marp
@@ -2118,24 +2121,28 @@ release). **DONE.**
- REQ-267: restyle benefit callouts — remove `**Benefit:**` prefix; use
`.benefit` class (red top-rule + black italic; white on title slides).
### Phase P3 — inline-images + python-pptx-generator (planned, tag v1.22.3)
### Phase P3a — inline-images (planned, tag v1.22.3)
- REQ-268: new `scripts/inline_images.py` — base64-embeds all images in
the rendered HTML for redistribution. Invoked after the MARP HTML
render.
render. Low-risk, mechanical (G-003 isolation).
### Phase P3b — python-pptx-generator (planned, tag v1.22.4)
- REQ-269: new `scripts/render_pptx.py` — structured, editable, S&P-themed
PPTX via `python-pptx`. 16:9; native tables; embedded PNGs; benefit
callouts. Add `python-pptx` to `pyproject.toml`.
callouts. Add `python-pptx` to `pyproject.toml`. High-risk, isolated
(G-003).
- REQ-270: `render_slides.sh` produces both PPTX outputs; CI installs
`python-pptx`; both attached to release.
### Phase P4 — trim-wordcount (planned, tag v1.22.4)
### Phase P4 — trim-wordcount + repo-wide "penetrate" purge (planned, tag v1.22.5)
- REQ-271: targeted ~20-30% word-count trim on verbose slides (1, 5, 7,
8, 13, 14, 20, appendix). Tables untouched. Spirit preserved.
- REQ-272: remove "penetrate" (and derivatives) from all presentation
files. Slide 5's phrase removed with no replacement (slide 4
already excludes the PDLC).
- REQ-272: remove "penetrate" (and derivatives) repo-wide (G-001) —
`docs/` + `.ciagent/PROJECT.md`/`CLARIFY.md`; RESEARCH.md/PLAN.md/
GRILL.md exempt as decision-history. Slide 5's phrase removed with no
replacement (slide 4 already excludes the PDLC).
### Phase P5 — ci-tests-readme (planned, tag v1.22.5)
### Phase P5 — ci-tests-readme + review + audit + ship (Final Phase, tag v1.22.6)
- REQ-273: CI workflows install `python-pptx`, run `render_slides.sh`,
commit HTML + both PPTX + inlined images.
- REQ-274: update `test_slides_pipeline.py` (consolidated doc, inline
@@ -2143,10 +2150,7 @@ release). **DONE.**
"penetrate" absence). New `test_pptx_generator.py`.
- REQ-275: rewrite `README.md` for the single-document + dual-PPTX +
image-inlining pipeline.
### Phase P6 — final-review-ship (Final Phase, planned, tag v1.22.6)
- Multi-persona code review across all phases.
- Audit: git log matches `.ciagent/` discipline.
- Ship: tag `v1.22.6` (final patch = milestone release). Merge
- Review + audit + milestone ship (merged P5+P6 per G-004 — NFR docs
milestone). Tag `v1.22.6` (final patch = milestone release). Merge
`milestone/v1.23-deck-cleanup-python-pptx` → `main`.
- **Requirements:** REQ-263..275 (13 requirements).