Files
acdl/.ciagent/PERSONAS.md
T
Jon Chery f496dd9c24 docs(P00): research — v1.23 Nova Deck Cleanup & Python PPTX
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---
2026-08-11 23:54:47 +00:00

14 KiB
Raw Blame History

project, milestone, generated_at, generator, verification_toolchain
project milestone generated_at generator verification_toolchain
acdl v1.23 2026-08-11 lead-developer
typecheck test build note
python3 -m py_compile scripts/inline_images.py scripts/render_pptx.py tests/test_slides_pipeline.py pytest tests/test_slides_pipeline.py # REQ-263..275 bash scripts/render_slides.sh nova-autonomous-cloud-delivery # HTML + Marp PPTX; then python3 scripts/render_pptx.py # structured PPTX v1.23 is the Nova Deck Cleanup & Python PPTX — a docs/render/test NFR milestone. Two active personas: lead-developer (deck markdown consolidation + inline Marp style CSS + README + .ciagent metadata), backend-engineer (Python scripts inline_images.py + render_pptx.py via python-pptx + render_slides.sh updates + tests + CI YAML + attach_release_asset.py extension). frontend-engineer stays deactivated (decks are markdown + Marp CSS = lead-developer territory, per v1.17/v1.18/v1.22 precedent). No data-engineer (no schema/DB changes). No new personas (the work splits cleanly into narrative+CSS+docs and Python+bash+tests+CI).

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 standalone nova-sp-theme.css to theme: default + inline block), two Python render scripts (inline_images.py stdlib image inlining + render_pptx.py structured PPTX via python-pptx), test updates, CI YAML, README rewrite, and the attach_release_asset.py extension 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.md with speaker notes as HTML comments), the inline style: 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 inline style: 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 P0P-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.py is stdlib regex + base64; render_pptx.py is 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 inline style: 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 P0P6).

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.md
    • REQUIREMENTS.md
    • docs/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)

D-143 (v1.18): Fold mcp-engineer into backend-engineer