Files
acdl/.ciagent/PERSONAS.md
T
Jon Chery 0404988465 docs(P00): research findings — v1.22 deck layout root cause (REQ-254..262)
8 findings (all confidence >= 0.8):
- F1 (VERY HIGH): theme CSS has zero section padding (/* @theme */ is
  a comment, not the directive; no @import of Marp default).
- F2 (VERY HIGH): overflow:hidden silently clips dense content (8/19
  slides overflow).
- F3 (HIGH): image aspect-ratio catastrophe (platform-pipeline 13.52x,
  telemetry-live-ops 0.63x).
- F4 (HIGH): header+footer chrome on every slide (~70px lost).
- F5 (MEDIUM-HIGH): render_deck.sh omits --theme (unthemed output).
- F6 (HIGH): render_slides.sh missing -s 2 -b transparent (1x PNGs).
- F7 (LOW): P5 marp-cli version bump — NOT the cause (theme CSS byte-
  identical P3->P5).
- F8 (VERY HIGH): test coverage gaps — no layout/overflow/aspect-ratio
  tests; static-file-property tests only.

Persona roster (v1.22): lead-developer (theme CSS + deck markdown +
mermaid + .ciagent), backend-engineer (render scripts + tests).
frontend-engineer + data-engineer deactivated. D-148 (theme CSS is
lead-developer, not frontend), D-149 (no new personas).

---ci---
project: acdl
phase: 0
milestone: v1.22
status: research
---/ci---
2026-08-11 19:22:45 +00:00

13 KiB
Raw Blame History

project, milestone, generated_at, generator, verification_toolchain
project milestone generated_at generator verification_toolchain
acdl v1.22 2026-08-11 lead-developer
typecheck test build note
python3 -m py_compile tests/test_slides_pipeline.py pytest tests/test_slides_pipeline.py # REQ-254..262 bash scripts/render_slides.sh nova-autonomous-cloud-delivery # HTML + PPTX 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.22 Nova Deck Layout Fix)

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 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).

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

v1.18 roster (Citizen Developer & Production-Grade Guidance) — superseded by v1.22

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)
  • Reason: Owns CIAgent metadata, the milestone narrative, the RACI + PDLC-scope statements (REQ-215/216), the deck (21 slides, S&P theme regression check vs P1, CAP-024), the skills index page (REQ-222), and the citizen-developer-facing submission-readiness doc (REQ-219). Is the only persona that touches .ciagent/** and the deck markdown.
  • Phase-specific flag: none (active for all of P0P7).

backend-engineer

  • Domain: backend
  • Active: true
  • Phase-specific: false
  • Frameworks: ["mcp (Python SDK v2)", "pydantic", "jsonschema", "urllib"]
  • Constraints: ["api-first", "strict-typing", "plugin-registry extensible (D-140)", "stdio now / HTTP-ready (D-135)", "no stack traces to citizen developers (REQ-218)"]
  • 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 — the validator, invoked as contract_ingestor.py --check-readiness)
    • scripts/render_deck.sh (REQ-228 — HTML + PPTX render)
    • scripts/attach_release_asset.py (REQ-228 — Gitea release asset upload)
    • tests/test_atelier_mcp.py (REQ-225)
    • tests/test_submission_readiness.py (REQ-220)
    • docs/submission-readiness.md (REQ-219 — reason-code catalog section; co-owned with lead-developer for the narrative)
  • Reason: Owns the MCP server (plugin-registry, stdio, vendored Atelier), the submission-readiness validator (extends contract_ingestor.py --check-readiness, D-133), the render/attach scripts (D-142 trigger), and the two new test files. The MCP plugin-registry (D-140) is a backend pattern — no separate mcp-engineer persona is created; backend-engineer owns it.
  • Phase-specific flag: none (active for P1 deck-render, P3 validator, P5 MCP server, P6 scripts).

data-engineer

  • Domain: data
  • Active: true
  • Phase-specific: false
  • Frameworks: ["jsonschema", "dynamodb (item shape)"]
  • Constraints: ["schema-first", "superset-gate NOT duplicate (PROJECT.md hard constraint)", "W3.E per-env mandatory table is the source of truth"]
  • Territory:
    • schemas/** (REQ-217 — submission-readiness.schema.json is the new schema; existing schemas untouched)
    • core/lambda/contract_ingestor.py (the --check-readiness subcommand wiring, D-133 — the validator is in core/submission_readiness.py but the ingestor dispatches to it; co-owned with backend-engineer)
  • Reason: Owns the submission-readiness JSON Schema (REQ-217) — it is a schema artifact, data-engineer territory. The schema is a superset gate above contract.schema.json, not a duplicate (it references contract fields, does not redefine them). The per-env-mandatory table comes from W3.E (the locked decision). The ingestor wiring is co-owned with backend-engineer (the dispatch point is backend; the schema it validates against is data).
  • Phase-specific flag: none (active for P3 schema + ingestor wiring).

Deactivated personas (v1.18)

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.18)
  • Reason: v1.18 has no frontend; decks are markdown (lead-developer territory); deactivated per PERSONAS.md v1.17 precedent. v1.18's observability stays PowerBI / external (Out of Scope: "A Nova-built frontend / dashboard"). The MCP server exposes tools to an AI agent, not a web UI. No reactivation trigger in this milestone.

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 backend code pattern — Python modules, type hints, stdio transport, urllib for the Gitea asset API. It shares nothing with the data domain (schemas/DynamoDB) and is not a new engineering discipline. Creating a separate mcp-engineer persona would fragment ownership of the server + its tests + the render/attach scripts (all backend). Decision: fold into backend-engineer. backend-engineer's frameworks list gains mcp (Python SDK v2). Confidence 0.90 — the only counter-argument is that MCP is a distinct protocol skill, but the SDK v2 API surface (@mcp.tool() + type hints) is small and well within backend-engineer's range (it's the same Pydantic/FastAPI-style pattern the persona already knows).

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.