10 findings grounding the v1.23 milestone plan:
- Marp default theme + inline style block (exact CSS from ref deck)
- HTML passthrough confirmed; python-pptx API mapped; stdlib image
inlining sufficient; 12 tests need updating; attach script +
slides.yml + README structure documented; persona roster (same as
v1.22); 5 pitfalls identified.
---ci---
phase: 0
milestone: v1.23
status: research
decisions:
- id: D-163
decision: Inline Marp style block is lead-developer territory (not frontend-engineer)
rationale: Marp frontmatter CSS is a static stylesheet, not a React/Next.js component system (D-148 precedent from v1.22)
confidence: 0.95
alternatives: [frontend-engineer owns CSS, custom slides-engineer persona]
- id: D-164
decision: No new personas for v1.23
rationale: Work splits cleanly into lead-developer (markdown+CSS+README+metadata) and backend-engineer (Python+bash+tests+CI); python-pptx is backend
confidence: 0.90
alternatives: [custom docs/deck persona, pptx-engineer persona]
---/ci---
14 KiB
project, milestone, generated_at, generator, verification_toolchain
| project | milestone | generated_at | generator | verification_toolchain | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| acdl | v1.23 | 2026-08-11 | lead-developer |
|
ACDL — Persona Roster (v1.23 Nova Deck Cleanup & Python PPTX)
v1.23 roster. Two active personas + two deactivated. This is a docs/render/test NFR milestone: the work is deck markdown consolidation, Marp inline
style:CSS (reverting from the standalonenova-sp-theme.csstotheme: default+ inline block), two Python render scripts (inline_images.pystdlib image inlining +render_pptx.pystructured PPTX via python-pptx), test updates, CI YAML, README rewrite, and theattach_release_asset.pyextension to dual-PPTX. frontend-engineer stays deactivated (Marp CSS is a static stylesheet, not a React/Next.js component system — D-148 precedent). No data-engineer (no schema/DB/ORM changes).
Active personas
lead-developer
- Domain: coordination + deck content + inline CSS
- Active: true
- Phase-specific: false
- Frameworks: [] (no framework — owns process + narrative + Marp inline CSS + markdown + README)
- 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", "port the reference deck's exact inline style CSS (the clean look)"]
- Territory:
docs/presentations/nova-autonomous-cloud-delivery-marp.md(REQ-263..275 — deck consolidation: merge plain .md into -marp.md, trim word count, remove "penetrate")docs/presentations/nova-autonomous-cloud-delivery.md(DELETE — consolidated into -marp.md)docs/presentations/nova-autonomous-cloud-delivery-talking-points.md(sync to final slide structure)docs/presentations/README.md(rewrite 4-step → 3-step process for single-document + dual-PPTX pipeline)docs/presentations/assets/nova-sp-theme.css(RETIRE from render; keep as reference file).ciagent/**(PROJECT, ROADMAP, REQUIREMENTS, RESEARCH, PLAN, GRILL, PERSONAS, REVIEW, CHECKPOINT)
- Reason: Owns the deck markdown consolidation (plain
.md+-marp.md→ single-marp.mdwith speaker notes as HTML comments), the inlinestyle:CSS block (porting the reference deck's exact CSS — the "clean look"), the word-count trim, the "penetrate" removal, the talking-points sync, the README rewrite, and all CIAgent metadata. Is the only persona that touches.ciagent/**and the deck markdown/CSS. The inlinestyle:block is a Marp frontmatter stylesheet, not a frontend component system (D-148 precedent from v1.22). - Phase-specific flag: none (active for all of P0–P-final).
backend-engineer
- Domain: Python render scripts + bash + tests + CI
- Active: true
- Phase-specific: false
- Frameworks: ["python-pptx", "bash", "pytest", "marp-cli", "mermaid-cli", "base64/re/mimetypes (stdlib)"]
- Constraints: ["pin CLI versions (no @latest in workflows-src/slides.yml — currently unpinned, must fix)", "python-pptx>=0.6.23 minimum", "stdlib-only for inline_images.py (no external image lib)", "tests must catch the theme-default + inline-style regression (the gap that let v1.22's standalone-theme drift through)", "no raw curl with shell-env tokens"]
- Territory:
scripts/inline_images.py(NEW — stdlib base64 image inlining into rendered HTML)scripts/render_pptx.py(NEW — structured editable PPTX via python-pptx)scripts/render_slides.sh(update: drop --theme nova-sp-theme.css; add inline_images.py + render_pptx.py invocations)scripts/attach_release_asset.py(extend to accept multiple file paths: both .pptx + -python.pptx)tests/test_slides_pipeline.py(REQ-262 successor — invert theme tests, retarget CSS tests to inline style block, delete source-md tests, update slide count)workflows-src/slides.yml(add python-pptx install step; pin @latest → @4.5.0/@11.16.0; add -python.pptx to commit list)pyproject.toml(add python-pptx>=0.6.23 to [project.optional-dependencies] test)
- Reason: Owns the Python render scripts (
inline_images.pyis stdlib regex + base64;render_pptx.pyis python-pptx — a backend Python library, not a frontend framework). The render_slides.sh updates (drop--theme, add the two Python script invocations) and the CI YAML (add python-pptx install, pin versions, add -python.pptx to commit list) are backend/scripting tasks. The test suite updates (invert the theme-default test, retarget CSS tests to the inlinestyle:block, delete the source-md tests) are the gap that let v1.22's standalone-theme drift through — backend-engineer owns closing it. python-pptx is new to v1.23; backend-engineer's frameworks list gains it. - Phase-specific flag: none (active for P2 scripts, P5 tests; light touch on P0/P-final).
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.23)
- Reason: v1.23 has no frontend; decks are markdown + Marp inline
CSS (lead-developer territory); deactivated per PERSONAS.md
v1.17/v1.18/v1.22 precedent. The inline
style:block is a Marp frontmatter stylesheet (CSS rules in the markdown frontmatter), 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.23)
- Reason: v1.23 has no schema/DB/ORM changes. The milestone is docs + Python scripts + bash + tests + CI only. No reactivation trigger.
Roster decisions
D-163 (0.95): Inline Marp style: block is lead-developer territory, not frontend-engineer
The inline style: block in the Marp frontmatter is a static CSS
stylesheet (a block of CSS rules in the markdown frontmatter, applied
by Marp to the rendered slides), not a React/Next.js component system.
The v1.17/v1.18/v1.22 precedent (decks are markdown = lead-developer
territory; the theme CSS is a Marp stylesheet, not a frontend framework
— D-148) extends to the inline style: block. frontend-engineer's
frameworks (react, next.js) are irrelevant to Marp frontmatter CSS.
Decision: inline style: block stays lead-developer territory.
Confidence 0.95 — the only counter-argument is that CSS is "frontend,"
but Marp frontmatter CSS is a static stylesheet authored in the
markdown source, not a component system.
D-164 (0.90): No new personas for v1.23
The work is markdown + inline CSS + Python scripts + bash + tests + CI
YAML + README. All of this is within the two active personas' range
(lead-developer: markdown + CSS + README + metadata; backend-engineer:
Python + bash + tests + CI). Creating a separate "slides-engineer" or
"pptx-engineer" persona would fragment ownership of the deck markdown
(lead) and the render scripts (backend). The python-pptx work is
unambiguously backend (a Python library + script), even though the
slide layout decisions within render_pptx.py are co-owned with lead-
developer. Decision: no new personas. Confidence 0.90 — follows
v1.22 D-149 precedent.
Territory-overlap resolution (co-ownership)
| Path | Primary | Co-owner | Why |
|---|---|---|---|
scripts/render_pptx.py |
backend-engineer (Python code + python-pptx API) | lead-developer (slide layout decisions: which image where, font sizes, bullet structure) | The script is backend (Python); the slide-by-slide layout decisions within it are design decisions that reflect lead-developer's deck ownership. warn enforcement — cross-territory edits logged, not blocked. |
scripts/render_slides.sh |
backend-engineer (bash script) | lead-developer (the inline style: block content it renders) |
The script is backend; the CSS it renders is lead-developer's. |
tests/test_slides_pipeline.py |
backend-engineer (test code) | lead-developer (assertions reflect deck structure + inline CSS) | The test code is backend; the assertions (slide count, inline style rules, theme-default) reflect lead-developer's deck/CSS decisions. |
docs/presentations/README.md |
lead-developer (process narrative) | backend-engineer (build commands + render script invocations) | The process narrative is lead; the build commands + script names are backend. |
Domain priority (v1.23)
lead-developer → backend-engineer
Rationale: the deck markdown consolidation + inline CSS (lead) is the
binding constraint — the render scripts (backend) can't be finalized
until the deck structure is stable (slide count, inline style). The
inline style: block must be ported + verified before the render
pipeline (HTML + PPTX) is re-run. Backend (scripts + tests + CI)
follows once the deck + CSS are settled. The dual-PPTX pipeline is
wired last, once the deck renders clean with the inline style.
Historical rosters
v1.22 roster (Nova Deck Layout Fix) — superseded by v1.23
Active personas (v1.22)
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).
D-148 (v1.22): Theme CSS is lead-developer territory, not frontend-engineer
D-149 (v1.22): No new personas for v1.22
v1.18 roster (Citizen Developer & Production-Grade Guidance) — superseded
Active personas (v1.18)
lead-developer
- Domain: coordination
- Active: true
- Phase-specific: false
- Frameworks: [] (no framework — owns process + narrative, not code)
- Constraints: ["pragmatic", "battle-tested defaults", "no fabrication (NORTH_STAR honesty model)"]
- Territory:
docs/presentations/**(Step 1/2/4 markdown + the deck automation trigger).ciagent/**(PROJECT, ROADMAP, REQUIREMENTS, RESEARCH, PLAN, GRILL, PERSONAS, REVIEW, CHECKPOINT)PROJECT.md(RACI matrix + PDLC-scope statement, REQ-215/216)ROADMAP.mdREQUIREMENTS.mddocs/raci.md(REQ-215)docs/scope.md(REQ-216)docs/skills.md(REQ-222 — the index page, not the skill files themselves)docs/submission-readiness.md(REQ-219 — citizen-developer-facing copy; co-owned with backend-engineer for the reason-code catalog)
backend-engineer
- Domain: backend
- Active: true
- Phase-specific: false
- Frameworks: ["mcp (Python SDK v2)", "pydantic", "jsonschema", "urllib"]
- Territory:
mcp/atelier/server.py(REQ-223)mcp/atelier/plugins/**/*.py(REQ-223 — principles.py, validation.py)mcp/atelier/vendor/**(REQ-224 — vendored Atelier snapshot)mcp/atelier/VERSION.md+mcp/atelier/README.md(REQ-224)scripts/update_atelier_vendor.sh(REQ-224)core/submission_readiness.py(REQ-218)scripts/render_deck.sh(REQ-228)scripts/attach_release_asset.py(REQ-228)tests/test_atelier_mcp.py(REQ-225)tests/test_submission_readiness.py(REQ-220)
data-engineer
- Domain: data
- Active: true
- Frameworks: ["jsonschema", "dynamodb (item shape)"]
- Territory:
schemas/**(REQ-217)core/lambda/contract_ingestor.py(co-owned with backend-engineer)