docs(ship): P0 complete — v1.22 pre-execution (specify, clarify, research, plan, grill)
---ci--- project: acdl phase: 0 milestone: v1.22 status: complete phase_role: pre_execution ---/ci---
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"phase": 6,
|
||||
"stage": "complete",
|
||||
"milestone": "v1.21",
|
||||
"phase_role": "final",
|
||||
"phase": 0,
|
||||
"stage": "plan",
|
||||
"milestone": "v1.22",
|
||||
"phase_role": "pre_execution",
|
||||
"attempts": 0,
|
||||
"updated_at": "2026-08-11T00:30:00Z",
|
||||
"milestone_complete": true,
|
||||
"tag": "v1.20.6",
|
||||
"requirements": ["REQ-245","REQ-246","REQ-247","REQ-248","REQ-249","REQ-250","REQ-251","REQ-252","REQ-253"],
|
||||
"notes": "v1.21 milestone complete. 9 requirements (REQ-245..253) across 6 execution phases + P0 pre-execution. P1 strategic-docs (thesis rename + NORTH_STAR objectives + RACI restructure); P2 slides source-of-truth (rename + restructure + rewrite, 18 main + 1 appendix); P3 marp deck + talking points + README + theme CSS fix; P4 pipeline hardening (Checkov before plan, Wiz-or-Checkov on plan, never both); P5 render + verify (new diagrams, HTML, PPTX, 686 tests pass + 1 pre-existing attestation env failure). Deck renamed nova-no-humans-platform* -> nova-autonomous-cloud-delivery*. Title: 'Nova — The Autonomous Cloud Delivery Platform'. 4-beat arc (Problem -> Solution -> Proof -> Roadmap + Ask). All 33 review notes applied. Tags on v1.20.x line (v1.20.0 P0 -> v1.20.6 P6 final). Next milestone starts fresh."
|
||||
"updated_at": "2026-08-11T14:38: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 PLAN complete. 7 phases, 4 waves. Plan persisted to PLAN.md. Tags on v1.21.x line."
|
||||
}
|
||||
+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>
|
||||
+357
-2
@@ -1098,5 +1098,360 @@ NOT exercised here.
|
||||
8. **No new frontend (frontend-engineer deactivated).** v1.18 has no
|
||||
frontend; decks are markdown (lead-developer territory); the MCP
|
||||
server exposes tools to an AI agent, not a web UI. The
|
||||
frontend-engineer persona stays deactivated (PERSONAS.md v1.18
|
||||
roster). No reactivation trigger in this milestone.
|
||||
frontend-engineer persona stays deactivated (PERSONAS.md v1.18
|
||||
roster). No reactivation trigger in this milestone.
|
||||
|
||||
---
|
||||
|
||||
# Nova — Phase Plan v1.22 (Nova Deck Layout Fix)
|
||||
|
||||
> **Milestone:** v1.22 — Nova Deck Layout Fix
|
||||
> **Branch:** `milestone/v1.22-deck-layout-fix` → merge to `main` at P6.
|
||||
> Phase branches: `phase/00-pre-execution`, `phase/01-theme-css`,
|
||||
> `phase/02-render-scripts`, `phase/03-mermaid-relayout`,
|
||||
> `phase/04-deck-content`, `phase/05-render-and-test`,
|
||||
> `phase/06-final-review-ship`.
|
||||
> **Tag line:** `v1.21.x` patch line — `v1.21.0` (P0) →
|
||||
> `v1.21.1..v1.21.5` (P1–P5) → `v1.21.6` (P6 final = milestone release).
|
||||
> v1.22 is an NFR milestone (all phases are fix/docs/test) →
|
||||
> progressive patches.
|
||||
> **Phase count:** 7 (P0 pre-execution + 5 execution + 1 final).
|
||||
> **Source of truth for requirements:** `.ciagent/REQUIREMENTS.md` §v1.22
|
||||
> (REQ-254..262, 9 requirements).
|
||||
> **Source of truth for research:** `.ciagent/RESEARCH.md` §v1.22 (8
|
||||
> findings, 5 assumptions, 5 CLARIFY decisions).
|
||||
> **Source of truth for personas:** `.ciagent/PERSONAS.md` v1.22 roster
|
||||
> (2 active: lead-developer + backend-engineer; 2 deactivated:
|
||||
> frontend + data).
|
||||
|
||||
## Wave Ordering
|
||||
|
||||
| Wave | Phases | Rationale |
|
||||
|------|--------|-----------|
|
||||
| Wave 1 | P1, P2 (**parallel**) | P1 (theme CSS: padding, overflow, image, title chrome) + P2 (render scripts: delete render_deck.sh, pin versions, 2x scale). Zero file overlap: P1 touches `docs/presentations/assets/nova-sp-theme.css`; P2 touches `scripts/render_slides.sh` + deletes `scripts/render_deck.sh`. P1 establishes the padding/overflow/image budget that P4's content trimming relies on; P2 fixes the render pipeline that P3's PNG re-render depends on. |
|
||||
| Wave 2 | P3, P4 (**parallel**) | P3 (mermaid re-layout: telemetry LR, platform-pipeline 2-row wrap) + P4 (deck content: trim/split 8 overflowing slides, remove header). P3 depends on P2 (2x scale flag); P4 depends on P1 (padding budget). Zero file overlap: P3 touches `docs/presentations/assets/mmd/*.mmd` + PNGs; P4 touches `docs/presentations/nova-autonomous-cloud-delivery-marp.md` + source `.md` + talking-points + README. |
|
||||
| Wave 3 | P5 | Re-render HTML + PPTX + add tests. Depends on all above (P1 theme, P2 scripts, P3 diagrams, P4 content). Re-renders via the fixed `render_slides.sh`; adds the layout/aspect-ratio/theme-structural tests (the gap that let this through). |
|
||||
| Wave 4 | P6 | Final review + audit + milestone ship. Merge to main, tag `v1.21.6`, create release, attach PPTX. |
|
||||
|
||||
## Phase P0 — pre-execution (DONE)
|
||||
|
||||
SPECIFY → CLARIFY → RESEARCH → PLAN. Validated v1.22 requirements
|
||||
(REQ-254..262). Established `active_milestone: "v1.22"`. Root-cause
|
||||
investigation persisted to RESEARCH.md (8 findings). Persona roster
|
||||
updated (2 active, 2 deactivated). 5 CLARIFY decisions auto-resolved.
|
||||
|
||||
## Phase P1 — theme-css (fix) — lead-developer
|
||||
|
||||
**Requirements:** REQ-254, REQ-255, REQ-256
|
||||
**Branch:** `phase/01-theme-css`
|
||||
**Territory:** `docs/presentations/assets/nova-sp-theme.css`
|
||||
|
||||
### Tasks
|
||||
|
||||
1. **REQ-254 — section padding + overflow:**
|
||||
- Add `section { padding: 48px 56px 40px; }` (top reserves header
|
||||
space; bottom reserves footer).
|
||||
- Add `section { overflow: auto; }` as an authoring-time signal
|
||||
(dense content scrolls instead of silently clipping). Document
|
||||
that the real fix is content trimming (P4), not runtime scroll.
|
||||
2. **REQ-255 — aspect-ratio-aware image rules:**
|
||||
- Replace `img { display: block; margin: 0 auto; max-height: 320px }`
|
||||
with `img { display: block; margin: 0 auto; max-width: 100%;
|
||||
max-height: 380px; object-fit: contain; }`.
|
||||
- Add `.wide` class: `img.wide { max-height: 280px; }` (for ultra-wide
|
||||
diagrams).
|
||||
- Add `.tall` class: `img.tall { max-height: 480px; }` (for tall
|
||||
diagrams that need more vertical room).
|
||||
3. **REQ-256 — title chrome + spacing tightening:**
|
||||
- Add `section.title header, section.title footer { display: none; }`.
|
||||
- Add `section h2 + p { margin-top: 0.2em; }`.
|
||||
- Add `section p { margin: 0.4em 0; }`.
|
||||
- Add `ol` styling: `ol { margin-top: 0.3em; }` (match `ul`).
|
||||
- Add `table.dense td, table.dense th { padding: 4px 8px; }` (for
|
||||
tables with ≥8 rows).
|
||||
- Add `@media print { section { overflow: hidden; } }` (PPTX export
|
||||
fidelity — no scrollbars in exported slides).
|
||||
|
||||
### Verify (inline)
|
||||
- `python3 -c "from pathlib import Path; css = Path('docs/presentations/assets/nova-sp-theme.css').read_text(); assert 'padding:' in css and 'section.title header' in css and 'object-fit' in css and 'table.dense' in css; print('theme CSS OK')"`
|
||||
- `pytest tests/test_slides_pipeline.py -k "theme" -q` (existing theme
|
||||
color tests still pass).
|
||||
|
||||
### Ship
|
||||
- Tag `v1.21.1`, merge `phase/01-theme-css` → `milestone/v1.22-deck-layout-fix`.
|
||||
|
||||
## Phase P2 — render-scripts (fix) — backend-engineer
|
||||
|
||||
**Requirements:** REQ-257, REQ-258
|
||||
**Branch:** `phase/02-render-scripts`
|
||||
**Territory:** `scripts/render_slides.sh`, `scripts/render_deck.sh` (DELETE)
|
||||
|
||||
### Tasks
|
||||
|
||||
1. **REQ-257 — delete render_deck.sh + pin CLI versions:**
|
||||
- `git rm scripts/render_deck.sh` (the README already documents
|
||||
`render_slides.sh` as canonical; `render_deck.sh` omits `--theme`
|
||||
and produces unthemed output).
|
||||
- Pin marp-cli and mermaid-cli versions in `render_slides.sh`:
|
||||
replace `@marp-team/marp-cli@latest` with a pinned version (e.g.
|
||||
`@marp-team/marp-cli@4.0.0` — determine the working version by
|
||||
testing during execution) and `@mermaid-js/mermaid-cli@latest`
|
||||
with a pinned version (e.g. `@mermaid-js/mermaid-cli@10.9.1`).
|
||||
- Remove any references to `render_deck.sh` from
|
||||
`.github/workflows/slides.yml`, `docs/presentations/README.md`,
|
||||
and `tests/test_slides_pipeline.py` (if any test references it).
|
||||
2. **REQ-258 — 2x scale + transparent bg for mermaid:**
|
||||
- In `render_slides.sh` lines 51-55, add `-s 2 -b transparent` to
|
||||
the mermaid-cli invocation (matches README line 193 spec).
|
||||
|
||||
### Verify (inline)
|
||||
- `test ! -f scripts/render_deck.sh && echo "render_deck.sh deleted OK"`
|
||||
- `grep -q "marp-cli@" scripts/render_slides.sh && grep -q "mermaid-cli@" scripts/render_slides.sh && echo "versions pinned OK"`
|
||||
- `grep -q -- "-s 2" scripts/render_slides.sh && grep -q -- "-b transparent" scripts/render_slides.sh && echo "2x + transparent OK"`
|
||||
- `pytest tests/test_slides_pipeline.py -k "render" -q` (existing
|
||||
render-script tests still pass; update if they reference
|
||||
`render_deck.sh`).
|
||||
|
||||
### Ship
|
||||
- Tag `v1.21.2`, merge `phase/02-render-scripts` → `milestone/v1.22-deck-layout-fix`.
|
||||
|
||||
## Phase P3 — mermaid-relayout (fix) — lead-developer
|
||||
|
||||
**Requirements:** REQ-259, REQ-260
|
||||
**Branch:** `phase/03-mermaid-relayout`
|
||||
**Territory:** `docs/presentations/assets/mmd/telemetry-live-ops.mmd`,
|
||||
`docs/presentations/assets/mmd/platform-pipeline.mmd`, PNG re-render
|
||||
(via `render_slides.sh` — backend-engineer co-owns the script
|
||||
invocation).
|
||||
|
||||
### Tasks
|
||||
|
||||
1. **REQ-259 — telemetry-live-ops.mmd TB → LR:**
|
||||
- Rewrite `docs/presentations/assets/mmd/telemetry-live-ops.mmd` from
|
||||
`flowchart TB` to `flowchart LR` with subgraph row-wrapping (per
|
||||
README line 168). Target aspect ratio ∈ [1.2, 2.5].
|
||||
- Re-render PNG: `bash scripts/render_slides.sh nova-autonomous-cloud-delivery`
|
||||
(now with 2x scale + transparent bg from P2).
|
||||
- Update the Marp deck's `![w:900]` directive on slide 9 to match
|
||||
the new dimensions (or replace with `![h:320]` if the diagram
|
||||
remains taller than wide after re-layout — but LR should produce
|
||||
a wide diagram).
|
||||
2. **REQ-260 — platform-pipeline.mmd 2-row wrap:**
|
||||
- Rewrite `docs/presentations/assets/mmd/platform-pipeline.mmd` to
|
||||
wrap the 10-node LR chain into 2 rows via mermaid subgraphs (or
|
||||
split into two stages: static-scan row + runtime-scan row). Target
|
||||
aspect ratio ∈ [1.2, 2.5].
|
||||
- Re-render PNG (same command as above).
|
||||
|
||||
### Verify (inline)
|
||||
- `python3 -c "from PIL import Image; import os; d='docs/presentations/assets/png'; [print(f, Image.open(os.path.join(d,f)).size) for f in os.listdir(d) if f.endswith('.png')]"` (check aspect ratios — or use a stdlib-only check if PIL unavailable).
|
||||
- Verify both re-rendered PNGs have aspect ratio ∈ [1.2, 2.5].
|
||||
|
||||
### Ship
|
||||
- Tag `v1.21.3`, merge `phase/03-mermaid-relayout` → `milestone/v1.22-deck-layout-fix`.
|
||||
|
||||
## Phase P4 — deck-content (fix) — lead-developer
|
||||
|
||||
**Requirements:** REQ-261
|
||||
**Branch:** `phase/04-deck-content`
|
||||
**Territory:** `docs/presentations/nova-autonomous-cloud-delivery-marp.md`,
|
||||
`docs/presentations/nova-autonomous-cloud-delivery.md`,
|
||||
`docs/presentations/nova-autonomous-cloud-delivery-talking-points.md`,
|
||||
`docs/presentations/README.md`.
|
||||
|
||||
### Tasks
|
||||
|
||||
1. **Split slide 3** (Objectives + Anti-Goals) into:
|
||||
- Slide 3a — Strategic Objectives (4 objectives + nested sub-list).
|
||||
- Slide 3b — Anti-Goals (4 anti-goals + benefit).
|
||||
Main slide count 18 → 19.
|
||||
2. **Split slide 8** (Attestation Matrix) into:
|
||||
- Slide 8a — Attestation: QA (3 qa rows + separation-of-duties note).
|
||||
- Slide 8b — Attestation: Prod/DR (7 prod/dr rows + benefit).
|
||||
Main slide count 19 → 20.
|
||||
3. **Trim slide 5** (RACI): apply `table.dense` class (from P1) to
|
||||
reduce cell padding; keep 8 rows.
|
||||
4. **Trim slide 6** (Pipeline): reduce to 3 bullets (the 4th is covered
|
||||
by the diagram, now legible after P3).
|
||||
5. **Trim slide 9** (Telemetry): reduce to 3 bullets; image now legible
|
||||
after P3.
|
||||
6. **Trim slide 12** (Deferred): reduce to 6 rows (merge the 3 "Live
|
||||
AWS re-provisioning" blockers into one row).
|
||||
7. **Trim slide 15** (Quarter-by-Quarter): drop the "Grounding" column
|
||||
(redundant with strategic objectives); 4 columns fit better.
|
||||
8. **Trim Appendix A1** (Glossary): apply `table.dense` class (16px
|
||||
font); keep 13 rows.
|
||||
9. **Remove `header:` from frontmatter** (keep `footer:` + `paginate:
|
||||
true` only). The full 51-char deck title in BOTH header and footer
|
||||
is redundant chrome; the footer alone suffices.
|
||||
10. **Update talking-points.md** to match the new 20 main + 1 appendix
|
||||
slide structure.
|
||||
11. **Update README.md** "18 main + 1 appendix" convention (line 130)
|
||||
→ "20 main + 1 appendix".
|
||||
12. **Update `test_marp_deck_slide_count`** in
|
||||
`tests/test_slides_pipeline.py` to assert 20 main + 1 appendix
|
||||
(this test is co-owned with backend-engineer per PERSONAS.md, but
|
||||
the assertion value reflects lead-developer's deck structure
|
||||
decision — lead-developer makes the edit here).
|
||||
|
||||
### Verify (inline)
|
||||
- `pytest tests/test_slides_pipeline.py -k "slide_count" -q` (updated
|
||||
test passes with 20 main + 1 appendix).
|
||||
- `grep -c "## Slide " docs/presentations/nova-autonomous-cloud-delivery-marp.md` → 20.
|
||||
- `grep -c "## Appendix " docs/presentations/nova-autonomous-cloud-delivery-marp.md` → 1.
|
||||
- `grep -q "^header:" docs/presentations/nova-autonomous-cloud-delivery-marp.md && echo "FAIL: header still present" || echo "header removed OK"`.
|
||||
|
||||
### Ship
|
||||
- Tag `v1.21.4`, merge `phase/04-deck-content` → `milestone/v1.22-deck-layout-fix`.
|
||||
|
||||
## Phase P5 — render-and-test (test) — backend-engineer
|
||||
|
||||
**Requirements:** REQ-262
|
||||
**Branch:** `phase/05-render-and-test`
|
||||
**Territory:** `tests/test_slides_pipeline.py` (test code — backend),
|
||||
re-render invocation (backend). Assertions reflect lead-developer's
|
||||
deck/theme decisions (co-owned).
|
||||
|
||||
### Tasks
|
||||
|
||||
1. **Re-render HTML + PPTX:**
|
||||
- `bash scripts/render_slides.sh nova-autonomous-cloud-delivery` →
|
||||
re-renders all mermaid PNGs (2x transparent) + HTML + PPTX.
|
||||
- Verify slide count (20 main + 1 appendix = 21 `<section>` elements
|
||||
in the HTML + 1 title = 22 total — or however Marp counts the title
|
||||
slide; verify against the marp deck).
|
||||
- Verify media embedding (PPTX has embedded PNGs).
|
||||
2. **Add tests to `tests/test_slides_pipeline.py`:**
|
||||
- `test_theme_css_has_section_padding` — assert `section` rule in
|
||||
`nova-sp-theme.css` contains `padding`.
|
||||
- `test_theme_css_suppresses_title_chrome` — assert
|
||||
`section.title header` and `section.title footer` have
|
||||
`display: none`.
|
||||
- `test_png_aspect_ratios_sane` — for every PNG in `assets/png/`,
|
||||
assert aspect ratio ∈ [1.2, 2.5] (catches the 13.52× and 0.63×
|
||||
outliers). Use `struct`/`imghdr` or a minimal PNG header parser
|
||||
(no PIL dependency if possible).
|
||||
- `test_render_slides_has_2x_scale` — assert `render_slides.sh`
|
||||
contains `-s 2` and `-b transparent`.
|
||||
- `test_render_deck_removed` — assert `scripts/render_deck.sh` does
|
||||
not exist.
|
||||
- `test_html_embeds_theme` — assert committed HTML contains
|
||||
`--sp-red` and `padding` in the inline `<style>`.
|
||||
- `test_html_slide_count_matches_marp` — parse HTML `<section>` count
|
||||
== marp deck slide count.
|
||||
3. **Run full test suite:**
|
||||
- `pytest tests/test_slides_pipeline.py -q` (all slide tests pass).
|
||||
- `pytest -q` (full suite — was 686 pass + 1 pre-existing attestation
|
||||
env failure; should now be 686 + new tests pass, same 1 failure).
|
||||
- `bash scripts/run_platform.sh --check-only` → exit 0.
|
||||
|
||||
### Verify (inline)
|
||||
- `pytest tests/test_slides_pipeline.py -q` (all pass, including new
|
||||
layout/aspect-ratio/theme-structural tests).
|
||||
- `pytest -q 2>&1 | tail -5` (full suite — confirm no new failures).
|
||||
|
||||
### Ship
|
||||
- Tag `v1.21.5`, merge `phase/05-render-and-test` → `milestone/v1.22-deck-layout-fix`.
|
||||
|
||||
## Phase P6 — final-review-ship (final) — lead-developer
|
||||
|
||||
**Requirements:** all (REQ-254..262) — milestone release
|
||||
**Branch:** `phase/06-final-review-ship`
|
||||
|
||||
### Tasks
|
||||
|
||||
1. **Multi-persona review** (`ciagent-review` equivalent):
|
||||
- Review all changes in the milestone branch across P1-P5.
|
||||
- Auto-apply P0 fixes; flag P1+ for post-hoc review.
|
||||
- If P1+ issues found: fix them in this final phase.
|
||||
2. **Audit** (`ciagent-audit` equivalent):
|
||||
- Reconstruction test: verify git log matches `.ciagent/` files.
|
||||
- Check `.ciagent/` file discipline and branch hygiene.
|
||||
- Check commit discipline (all commits have `---ci---` blocks).
|
||||
- If audit finds critical issues: fix them in this final phase.
|
||||
3. **Milestone ship** (`ciagent-ship` equivalent):
|
||||
- Merge `phase/06-final-review-ship` → `milestone/v1.22-deck-layout-fix`.
|
||||
- Merge `milestone/v1.22-deck-layout-fix` → `main`.
|
||||
- Tag `v1.21.6` (final phase patch = milestone release).
|
||||
- Create release with full milestone summary (all phases, all
|
||||
requirements).
|
||||
- Build and upload PPTX as release asset.
|
||||
- Delete all milestone branches (local + remote).
|
||||
4. **Complete the milestone:**
|
||||
- Update `REQUIREMENTS.md` — mark REQ-254..262 as complete.
|
||||
- Update `ROADMAP.md` — mark v1.22 as complete.
|
||||
- Commit: `docs(milestone): complete v1.22 — Nova Deck Layout Fix`.
|
||||
|
||||
### Ship
|
||||
- Tag `v1.21.6` (milestone release). Merge to `main`. Clear checkpoint.
|
||||
|
||||
## Plan-Level Risks + Notes (v1.22)
|
||||
|
||||
1. **Slide count change** (18 → 20 main): `test_marp_deck_slide_count`
|
||||
+ README convention must be updated in P4. The split is necessary
|
||||
because slides 3 and 8 are the densest (~780px each) and cannot be
|
||||
trimmed without losing leadership-relevant content.
|
||||
2. **Marp version pinning**: the exact pinned versions will be
|
||||
determined during P2 execution by testing which version produces
|
||||
stable output in this environment. If the pinned version has a
|
||||
different boilerplate-CSS signature, the HTML diff will be large but
|
||||
layout-stable.
|
||||
3. **`overflow: auto` on `section`**: Marp slides are SVG
|
||||
`foreignObject` — `overflow: auto` may not produce scrollbars in all
|
||||
renderers (PPTX especially). The safer approach is content trimming
|
||||
(P4) + padding (P1), treating overflow as an authoring-time signal,
|
||||
not a runtime scroll. The `@media print { section { overflow: hidden; } }`
|
||||
rule in P1 ensures PPTX export doesn't show scrollbars.
|
||||
4. **No new frontend** (frontend-engineer deactivated). v1.22 has no
|
||||
frontend; decks are markdown + Marp CSS (lead-developer territory,
|
||||
per D-148). The frontend-engineer persona stays deactivated.
|
||||
5. **No data-engineer** (no schema/DB changes). v1.22 is docs + scripts
|
||||
+ tests only.
|
||||
6. **Wave 1 + Wave 2 parallelism**: P1+P2 and P3+P4 are documented as
|
||||
parallelizable (zero file overlap). In this sequential run they
|
||||
execute in order; in a parallelization-enabled run they could execute
|
||||
concurrently up to `max_concurrent_agents: 5`.
|
||||
7. **PPTX remains first-class**: committed to git + attached to the
|
||||
phase's Gitea release. No change to this convention.
|
||||
|
||||
## GRILL verdicts (v1.22) — binding
|
||||
|
||||
> Adversarial review of the v1.22 plan. 8 axes reviewed. Overall
|
||||
> verdict: **PROCEED-WITH-REVISIONS** (confidence 0.85). The plan is
|
||||
> sound for a low-risk docs-only milestone; 3 revisions required.
|
||||
|
||||
### Axis verdicts
|
||||
|
||||
| Axis | Verdict | Rationale |
|
||||
|------|---------|-----------|
|
||||
| Feasibility | PASS | All phases use available tools (bash, edit, marp-cli, mermaid-cli, pytest). No hidden dependencies. |
|
||||
| Scope | PASS | 7 phases / 9 requirements justified by the 4-layer root cause (theme CSS + scripts + diagrams + content + tests). Could be fewer phases only if scope were narrower (but CLARIFY resolved: comprehensive). |
|
||||
| Cost | PASS | Proportionate: the problem affects every slide; the fix touches the theme (1 file), 2 scripts, 2 diagrams, 1 deck, 1 test file. 7 phases is the natural decomposition. |
|
||||
| Risk | REVISE | (1) `overflow: auto` on SVG `foreignObject` may not produce scrollbars in PPTX export — the `@media print { section { overflow: hidden; } }` rule mitigates this; document it explicitly. (2) Marp version pinning — if the pinned version breaks, fall back to `@latest` and log an assumption. (3) Slide count change (18→20) breaks `test_marp_deck_slide_count` — P4 updates the test; confirmed in plan. |
|
||||
| Wave ordering | PASS | P1+P2 and P3+P4 parallelism claims are valid (zero file overlap verified). |
|
||||
| Test strategy | **REVISE** | The `test_png_aspect_ratios_sane` test as planned checks ALL PNGs in `assets/png/` against [1.2, 2.5]. **15 of 19 PNGs are OUT OF BOUNDS** — most are legacy/unused diagrams (developer-experience-*, platform-works-*) not referenced in the current `nova-autonomous-cloud-delivery-marp.md` deck. Only 2 PNGs are referenced in the current deck (platform-pipeline.png, telemetry-live-ops.png). **Revision: scope the test to only PNGs referenced in the current marp deck** (parse `` references from the marp deck and check only those). The [1.2, 2.5] bounds are correct for 16:9 slides. |
|
||||
| Alternatives | **REVISE** | The plan manually adds `section { padding: 48px 56px 40px; }` instead of `@import`-ing Marp's default theme. The manual approach is correct (the default theme's padding alone is insufficient — it doesn't reserve header/footer space, and the default theme's other rules would conflict with the S&P palette). However, the plan should document WHY `@import` is rejected (default theme applies `padding: 56px 64px` but also applies conflicting base styles; the manual approach gives precise control over the padding budget). **Revision: add a note to P1 explaining the `@import` rejection.** |
|
||||
| Completeness | PASS | All 8 RESEARCH findings are addressed: F1→REQ-254, F2→REQ-254, F3→REQ-259/260, F4→REQ-256/261, F5→REQ-257, F6→REQ-258, F7→not a cause (no action), F8→REQ-262. |
|
||||
|
||||
### Revisions applied (binding)
|
||||
|
||||
1. **P5 `test_png_aspect_ratios_sane`** — scope to only PNGs referenced in
|
||||
the current marp deck (parse `` from
|
||||
`nova-autonomous-cloud-delivery-marp.md`). Legacy/unused PNGs are not
|
||||
checked. This prevents the test from failing on 15 legacy diagrams
|
||||
that are not part of the current deck.
|
||||
2. **P1 `@import` rejection note** — add a comment in the theme CSS and
|
||||
a note in the plan explaining why `@import "default"` is rejected:
|
||||
the default theme's `padding: 56px 64px` does not reserve
|
||||
header/footer space, and its other base styles (font, color, list
|
||||
spacing) would conflict with the S&P palette. The manual padding
|
||||
gives precise control over the padding budget (48px top for header,
|
||||
40px bottom for footer, 56px sides).
|
||||
3. **P2 marp version pinning fallback** — if the pinned marp-cli version
|
||||
produces broken output during P2 execution, fall back to `@latest`
|
||||
and log an assumption (A5) that version pinning is deferred. Do not
|
||||
block the pipeline on version pinning.
|
||||
|
||||
**Overall: PROCEED-WITH-REVISIONS.** The 3 revisions are incorporated
|
||||
into the phase tasks above (P1, P2, P5). No blocking issues. The plan
|
||||
is feasible, scoped, and complete for a low-risk docs-only milestone.
|
||||
@@ -1419,3 +1419,116 @@ wrong commit standard, wrong repo.
|
||||
| D-145 | Trigger = manual-only (`--release` / `RELEASE_CONFIRMED=1`). | The 2nd release is a deliberate human action, not a CI side-effect. The gate guarantees it can never fire from Gitea Actions, GitHub Actions, or accidental invocation. | Script exits 2 without `--release`. |
|
||||
| D-146 | Domain grouping = 13 fixed-order domains by path prefix; messages map positionally over CHANGED domains only. | Avoids the kitchen-sink commit; gives `~/nova` a reviewable, conventional history tailored to platform consumers. Positional-over-changed mapping lets the human supply exactly the messages needed, in domain order, without padding for unchanged domains. | `--list-domains` prints order; `--dry-run` previews; count-mismatch errors clearly. |
|
||||
| D-147 | coreci / Atelier review gate = deferred this milestone. | The vendored Atelier (`mcp/atelier/vendor`) could review the synced tree before commit and block on P0, but that's an additive hardening step, not part of establishing the pipeline. Deferred to a future milestone. | Sync ships consumer contents as-is; no review gate. |
|
||||
|
||||
### CLARIFY auto-resolved parameters (full autonomy)
|
||||
|
||||
The following ambiguities were identified and auto-resolved at full
|
||||
autonomy (no human escalation needed — confidence > 0.6 threshold):
|
||||
|
||||
1. **Fix scope** — comprehensive (theme CSS + render scripts + mermaid
|
||||
re-layout + deck content + tests) vs. minimal. **Resolved: comprehensive.**
|
||||
The root cause spans all four layers; a theme-only fix would leave
|
||||
the extreme-aspect-ratio diagrams and the stale `render_deck.sh`
|
||||
unfixed. Confidence: 0.95.
|
||||
|
||||
2. **Pipeline depth** — full pipeline (SPECIFY→CLARIFY→RESEARCH→PLAN→
|
||||
GRILL→EXECUTE→VERIFY→SHIP) vs. lighter path. **Resolved: full pipeline.**
|
||||
This is a new milestone (v1.22); the full pipeline ensures the plan
|
||||
is grilled and the audit trail is complete. Confidence: 0.9.
|
||||
|
||||
3. **Mermaid diagram fixes** — re-layout to LR + re-render vs. CSS-only
|
||||
fix. **Resolved: re-layout to LR + re-render at 2x transparent.**
|
||||
The `telemetry-live-ops.mmd` uses `flowchart TB` (produced a 1024×1628
|
||||
PNG — aspect 0.63); the README (line 168) explicitly says to use
|
||||
horizontal layouts for wide diagrams. CSS-only cannot fix the aspect
|
||||
ratio. Confidence: 0.95.
|
||||
|
||||
4. **`render_deck.sh` disposition** — fix (add `--theme`) vs. delete.
|
||||
**Resolved: delete.** The README already documents `render_slides.sh`
|
||||
as canonical; `render_deck.sh` is unreferenced by the build-commands
|
||||
section and is a footgun (produces unthemed output). Confidence: 0.9.
|
||||
|
||||
5. **Slide count change** — keep 18 main + 1 appendix vs. split
|
||||
overflowing slides. **Resolved: split slides 3 and 8** (18 → 20 main
|
||||
+ 1 appendix). The `test_marp_deck_slide_count` test + README
|
||||
convention are updated to match. Confidence: 0.85.
|
||||
|
||||
No human escalation. All decisions logged with confidence scores above
|
||||
the 0.6 threshold.
|
||||
|
||||
## Objective for Milestone v1.22 (active — Nova Deck Layout Fix)
|
||||
|
||||
v1.22 fixes the systemic layout/formatting problems in the Nova
|
||||
presentation deck that made every slide look "out of whack" after the
|
||||
v1.21 P5 re-render. A full investigation determined the root cause is
|
||||
**not a P5 regression** — the `nova-sp-theme.css` has had zero `section`
|
||||
padding since it was authored (it declares `/* @theme nova-sp */` as a
|
||||
comment, not the `@theme` directive, and does not `@import` Marp's
|
||||
default theme, so Marp's default `section { padding: 56px 64px }` never
|
||||
applies). Combined with `overflow:hidden` (silent clip), a blunt
|
||||
`img { max-height: 320px }` rule, header+footer chrome on every slide,
|
||||
and two new P5 diagrams with extreme aspect ratios (13.52× and 0.63×),
|
||||
8 of 19 slides overflow and the rest look jammed against the edges.
|
||||
|
||||
This milestone is a **comprehensive fix** across four layers: (1) the
|
||||
theme CSS (padding, overflow handling, aspect-ratio-aware image rules,
|
||||
title-slide chrome suppression, paragraph/list/table spacing); (2) the
|
||||
render scripts (delete the stale unthemed `render_deck.sh`, pin
|
||||
marp-cli/mermaid-cli versions, add 2x scale + transparent bg to
|
||||
mermaid); (3) the two problematic mermaid diagrams (re-layout to LR +
|
||||
2-row wrap); (4) the deck content (trim/split the 8 overflowing slides,
|
||||
remove the redundant `header:` from frontmatter). It also adds the
|
||||
**layout/aspect-ratio/theme-structural tests** that were missing — the
|
||||
gap that let this regression through undetected.
|
||||
|
||||
**Milestone type:** NFR (all phases are fix/docs/test — no feat/breaking).
|
||||
Tags run on the **v1.21.x** patch line (previous minor per
|
||||
branch-strategy): `v1.21.0` (P0) → `v1.21.1..v1.21.5` (P1–P5) →
|
||||
`v1.21.6` (P6 final = milestone release).
|
||||
|
||||
**Phase count:** 7 (P0 pre-execution + 5 execution + 1 final).
|
||||
|
||||
**Wave ordering:**
|
||||
- Wave 1 (P1 + P2, parallel): theme CSS + render scripts — no
|
||||
interdependency. P1 establishes the padding/overflow/image budget that
|
||||
P4's content trimming relies on; P2 fixes the render pipeline that P3's
|
||||
PNG re-render depends on.
|
||||
- Wave 2 (P3 + P4, parallel): mermaid re-layout + deck content. P3
|
||||
depends on P2 (2x scale flag); P4 depends on P1 (padding budget).
|
||||
- Wave 3 (P5): re-render HTML + PPTX + add tests. Depends on all above.
|
||||
- Wave 4 (P6): final review + audit + milestone ship.
|
||||
|
||||
**Hard constraints:**
|
||||
- DO NOT change the deck narrative or the 4-beat arc (Problem → Solution
|
||||
→ Proof → Roadmap + Ask) — only fix layout/formatting.
|
||||
- DO NOT re-introduce badges, version strings, or internal citations
|
||||
(D-###/REQ-###/.py paths) that v1.21 removed.
|
||||
- The slide count may change from 18 main + 1 appendix to 20 main + 1
|
||||
appendix (splitting slides 3 and 8 to relieve overflow). The
|
||||
`test_marp_deck_slide_count` test + README "18 main + 1 appendix"
|
||||
convention must be updated to match.
|
||||
- PPTX remains a first-class committed artifact + release attachment.
|
||||
- No code changes outside `docs/presentations/`, `scripts/render*.sh`,
|
||||
and `tests/test_slides_pipeline.py`.
|
||||
|
||||
### Requirements
|
||||
|
||||
New requirements REQ-254..REQ-262 — see `REQUIREMENTS.md` §v1.22. Summary:
|
||||
|
||||
- **REQ-254:** Theme CSS — add `section` padding + overflow handling.
|
||||
- **REQ-255:** Theme CSS — aspect-ratio-aware image rules (replace blunt
|
||||
`max-height:320px`).
|
||||
- **REQ-256:** Theme CSS — title-slide chrome suppression + paragraph/
|
||||
list/table spacing tightening.
|
||||
- **REQ-257:** Render scripts — delete `render_deck.sh` (or fix `--theme`);
|
||||
pin marp-cli/mermaid-cli versions.
|
||||
- **REQ-258:** `render_slides.sh` — add `-s 2 -b transparent` to mermaid-cli
|
||||
(README spec).
|
||||
- **REQ-259:** Re-layout `telemetry-live-ops.mmd` from `flowchart TB` →
|
||||
`flowchart LR`; re-render PNG at 2x transparent.
|
||||
- **REQ-260:** Re-layout `platform-pipeline.mmd` to 2-row subgraph wrap;
|
||||
re-render PNG at 2x transparent.
|
||||
- **REQ-261:** Trim/split 8 overflowing slides (3, 5, 6, 8, 9, 12, 15,
|
||||
A1) + remove redundant `header:` from frontmatter.
|
||||
- **REQ-262:** Re-render HTML + PPTX + add layout/aspect-ratio/theme-
|
||||
structural tests.
|
||||
|
||||
@@ -1716,3 +1716,191 @@ release; attach the PPTX.
|
||||
| REQ-251 | P3 | complete |
|
||||
| REQ-252 | P2 | complete |
|
||||
| REQ-253 | P5 | complete |
|
||||
|
||||
## v1.22 — Nova Deck Layout Fix
|
||||
|
||||
> Fixes the systemic layout/formatting problems in the Nova presentation
|
||||
> deck that made every slide look "out of whack" after the v1.21 P5
|
||||
> re-render. Root cause (per investigation): `nova-sp-theme.css` has zero
|
||||
> `section` padding (it declares `/* @theme nova-sp */` as a comment, not
|
||||
> the `@theme` directive, and does not `@import` Marp's default theme, so
|
||||
> Marp's default `section { padding: 56px 64px }` never applies). Combined
|
||||
> with `overflow:hidden` (silent clip), a blunt `img { max-height: 320px }`
|
||||
> rule, header+footer chrome on every slide, and two new P5 diagrams with
|
||||
> extreme aspect ratios (13.52× and 0.63×), 8 of 19 slides overflow and
|
||||
> the rest look jammed against the edges. This is NOT a P5 regression —
|
||||
> the theme CSS is byte-identical between P3 and P5; P5's denser content
|
||||
> made the pre-existing theme flaws visible.
|
||||
>
|
||||
> Comprehensive fix across four layers: theme CSS, render scripts, mermaid
|
||||
> diagrams, deck content. Adds the layout/aspect-ratio/theme-structural
|
||||
> tests that were missing (the gap that let this through).
|
||||
>
|
||||
> Tags run on the v1.21.x line (milestone v1.22 → tags v1.21.0, v1.21.1, …).
|
||||
|
||||
### REQ-254 — Theme CSS: section padding + overflow handling
|
||||
|
||||
`docs/presentations/assets/nova-sp-theme.css` adds a `section` padding
|
||||
rule so content is not jammed against the slide edges. The padding
|
||||
reserves space for the header (top) and footer (bottom) chrome: e.g.
|
||||
`section { padding: 48px 56px 40px; }`. The theme also adds explicit
|
||||
overflow handling on `section` so dense content is not silently clipped
|
||||
by the marpit base `overflow:hidden` — either `overflow: auto` as an
|
||||
authoring-time signal, or a documented shrink-to-fit rule. The fix does
|
||||
NOT re-introduce Marp's default theme via `@import` (the theme remains
|
||||
standalone); it explicitly sets the padding the default would have
|
||||
provided.
|
||||
|
||||
### REQ-255 — Theme CSS: aspect-ratio-aware image rules
|
||||
|
||||
The blunt `img { max-height: 320px }` rule is replaced with an
|
||||
aspect-ratio-aware rule that does not break the Marp `w:`/`h:` directives:
|
||||
`img { max-width: 100%; max-height: 380px; object-fit: contain; }`. A
|
||||
`.wide` / `.tall` class convention is added for diagrams (wide diagrams:
|
||||
`max-height: 280px`; tall diagrams: `max-height: 480px`) so authors can
|
||||
opt into the right bound per diagram instead of fighting a single blunt
|
||||
rule. The `w:900` directive on a tall image (slide 9) no longer gets
|
||||
silently overridden by `max-height`.
|
||||
|
||||
### REQ-256 — Theme CSS: title-slide chrome + spacing tightening
|
||||
|
||||
- `section.title header, section.title footer { display: none; }` — the
|
||||
title slide and appendix slide no longer render header/footer chrome
|
||||
that collides with content (the `<!-- _class: title -->` +
|
||||
`<!-- _paginate: false -->` directives only suppress the page number,
|
||||
not the chrome).
|
||||
- `section h2 + p { margin-top: 0.2em; }` — tightens the spacing between
|
||||
the `## Slide N — Title` heading and the bold lead paragraph that
|
||||
follows it on every content slide (reclaims ~22px per slide).
|
||||
- `section p { margin: 0.4em 0; }` — reduces default `<p>` margins
|
||||
(~1em top/bottom) that waste vertical space on dense slides.
|
||||
- `ol` styling added (matches `ul`/`li`).
|
||||
- Table cell padding reduced to `4px 8px` for tables with ≥8 rows (via
|
||||
a `table.dense` class or a `:nth-child` heuristic) so 10-13 row tables
|
||||
(slides 8, 12, A1) fit.
|
||||
- `@media print` overrides added for PPTX export fidelity.
|
||||
|
||||
### REQ-257 — Render scripts: delete render_deck.sh + pin CLI versions
|
||||
|
||||
`scripts/render_deck.sh` is **deleted** (it omits `--theme`, relying on
|
||||
the frontmatter `theme: nova-sp` which Marp cannot resolve as a custom
|
||||
theme without `--theme-set` — it falls back to the default theme,
|
||||
producing unthemed output). The README already documents
|
||||
`render_slides.sh` as the canonical script. Both `render_slides.sh` and
|
||||
the deleted `render_deck.sh` references are removed from any docs/tests.
|
||||
`render_slides.sh` pins marp-cli and mermaid-cli to specific versions
|
||||
(replace `@latest` with pinned versions) to prevent uncontrolled
|
||||
boilerplate-CSS drift like the P3→P5 HTML diff.
|
||||
|
||||
### REQ-258 — render_slides.sh: 2x scale + transparent bg for mermaid
|
||||
|
||||
The mermaid-cli invocation in `scripts/render_slides.sh` (lines 51-55)
|
||||
adds `-s 2 -b transparent` to match the README spec (line 193). This
|
||||
produces crisp 2x PNGs with transparent backgrounds instead of the
|
||||
current 1x renders (e.g. `platform-pipeline.png` is only 1568px wide
|
||||
instead of the 3136px a 2x render would produce).
|
||||
|
||||
### REQ-259 — Re-layout telemetry-live-ops.mmd to LR
|
||||
|
||||
`docs/presentations/assets/mmd/telemetry-live-ops.mmd` is rewritten from
|
||||
`flowchart TB` (top-bottom, produced a 1024×1628 PNG — aspect 0.63, tall)
|
||||
to `flowchart LR` (left-right) with subgraph row-wrapping per the README
|
||||
convention (line 168). The re-rendered PNG (at 2x transparent, per
|
||||
REQ-258) has an aspect ratio in [1.2, 2.5] suitable for a 16:9 slide.
|
||||
The Marp deck's `![w:900]` directive on slide 9 is updated to match the
|
||||
new dimensions (or replaced with `![h:320]` if the diagram remains
|
||||
taller than wide after re-layout).
|
||||
|
||||
### REQ-260 — Re-layout platform-pipeline.mmd to 2-row wrap
|
||||
|
||||
`docs/presentations/assets/mmd/platform-pipeline.mmd` is rewritten to
|
||||
wrap the 10-node LR chain into 2 rows via mermaid subgraphs (or split
|
||||
into two stages: static-scan row + runtime-scan row). The current
|
||||
1568×116 PNG (aspect 13.52, ultra-wide/short) renders as a 1000×74px
|
||||
thin strip at `![w:1000]` — node text is illegible. The re-rendered
|
||||
PNG (at 2x transparent) has an aspect ratio in [1.2, 2.5] suitable for
|
||||
a 16:9 slide.
|
||||
|
||||
### REQ-261 — Trim/split 8 overflowing slides + remove redundant header
|
||||
|
||||
The 8 slides identified as overflowing 720px are trimmed or split:
|
||||
- **Slide 3** (Objectives + Anti-Goals): split into Slide 3a (4
|
||||
objectives) + Slide 3b (4 anti-goals). Main slide count 18 → 19.
|
||||
- **Slide 5** (RACI): apply `table.dense` class (from REQ-256) to
|
||||
reduce cell padding; keep 8 rows.
|
||||
- **Slide 6** (Pipeline): reduce to 3 bullets (the 4th is covered by
|
||||
the diagram, now legible after REQ-260).
|
||||
- **Slide 8** (Attestation Matrix): split into Slide 8a (qa concerns,
|
||||
3 rows) + Slide 8b (prod/dr concerns, 7 rows). Main slide count
|
||||
19 → 20.
|
||||
- **Slide 9** (Telemetry): reduce to 3 bullets; image now legible
|
||||
after REQ-259.
|
||||
- **Slide 12** (Deferred): reduce to 6 rows (merge the 3 "Live AWS
|
||||
re-provisioning" blockers into one row).
|
||||
- **Slide 15** (Quarter-by-Quarter): drop the "Grounding" column
|
||||
(redundant with the strategic objectives); 4 columns fit better.
|
||||
- **Appendix A1** (Glossary): apply `table.dense` class (16px font);
|
||||
keep 13 rows.
|
||||
|
||||
The Marp frontmatter `header:` line is removed (keep `footer:` +
|
||||
`paginate: true` only). The full 51-char deck title in BOTH header and
|
||||
footer on every slide is redundant chrome that eats vertical space;
|
||||
the footer alone suffices. The title slide and appendix already use
|
||||
`<!-- _class: title -->` which (after REQ-256) suppresses chrome.
|
||||
|
||||
The talking-points file is re-distilled to match the new slide
|
||||
structure (20 main + 1 appendix). The README "18 main + 1 appendix"
|
||||
convention (line 130) and `test_marp_deck_slide_count` are updated to
|
||||
assert 20 main + 1 appendix.
|
||||
|
||||
### REQ-262 — Re-render HTML + PPTX + add layout/aspect-ratio tests
|
||||
|
||||
- Run `bash scripts/render_slides.sh nova-autonomous-cloud-delivery` →
|
||||
re-render all mermaid PNGs (2x transparent) + HTML + PPTX. Verify
|
||||
slide count (20 main + 1 appendix = 21) and media embedding.
|
||||
- Add tests to `tests/test_slides_pipeline.py`:
|
||||
- `test_theme_css_has_section_padding` — assert `section` rule
|
||||
contains `padding`.
|
||||
- `test_theme_css_suppresses_title_chrome` — assert
|
||||
`section.title header` / `section.title footer` `display: none`.
|
||||
- `test_png_aspect_ratios_sane` — for every PNG in `assets/png/`,
|
||||
assert aspect ratio ∈ [1.2, 2.5] (catches the 13.52× and 0.63×
|
||||
outliers).
|
||||
- `test_render_slides_has_2x_scale` — assert `render_slides.sh`
|
||||
contains `-s 2` and `-b transparent`.
|
||||
- `test_render_deck_removed` — assert `render_deck.sh` does not
|
||||
exist.
|
||||
- `test_html_embeds_theme` — assert committed HTML contains
|
||||
`--sp-red` and `padding` in the inline `<style>`.
|
||||
- `test_html_slide_count_matches_marp` — parse HTML `<section>`
|
||||
count == marp deck slide count.
|
||||
- Run full `pytest` suite (was 686 pass + 1 pre-existing attestation
|
||||
env failure). `run_platform.sh --check-only` exits 0.
|
||||
- Milestone ship: tag the final phase on the v1.21.x line; create a
|
||||
release; attach the PPTX.
|
||||
|
||||
### Out of Scope (v1.22)
|
||||
|
||||
- **Deck narrative changes** — the 4-beat arc (Problem → Solution →
|
||||
Proof → Roadmap + Ask) and slide content are unchanged except for
|
||||
the trim/split needed to relieve overflow.
|
||||
- **Re-introduction of badges, version strings, or internal citations**
|
||||
— v1.21 removed these; v1.22 does not re-add them.
|
||||
- **Live pilot estate activation** — still deferred.
|
||||
- **ML anomaly-forecasting service** — still deferred.
|
||||
- **Multi-cloud (Azure/GCP) implementation** — still deferred.
|
||||
- **Tamper-evident ledger (S3 Object Lock + JWS)** — still deferred.
|
||||
|
||||
### v1.22 Traceability
|
||||
|
||||
| REQ | Phase | Status |
|
||||
|-----|-------|--------|
|
||||
| REQ-254 | P1 | pending |
|
||||
| REQ-255 | P1 | pending |
|
||||
| REQ-256 | P1 | pending |
|
||||
| REQ-257 | P2 | pending |
|
||||
| REQ-258 | P2 | pending |
|
||||
| REQ-259 | P3 | pending |
|
||||
| REQ-260 | P3 | pending |
|
||||
| REQ-261 | P4 | pending |
|
||||
| REQ-262 | P5 | pending |
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
],
|
||||
"active_project": "acdl",
|
||||
"active_projects": ["acdl"],
|
||||
"active_milestone": "v1.21",
|
||||
"active_milestone": "v1.22",
|
||||
"autonomy": {
|
||||
"level": "full",
|
||||
"escalation_hooks": ["deploy", "delete_data", "merge_to_main"],
|
||||
|
||||
Reference in New Issue
Block a user