Compare commits

...

26 Commits

Author SHA1 Message Date
CIAgent 20cdec8fab merge(phase/01): v1.31 P1 deck-polish complete (REQ-373.1..4, D-247)
Nova Slides Render / render (push) Failing after 25s
2026-08-20 14:58:56 +00:00
CIAgent c179c3e09a docs(milestone): complete v1.31 Leadership Deck Polish II (release v1.30.2)
---ci---
project: acdl
phase: 1
milestone: v1.31
status: complete
requirements:
  covered: [REQ-373.1, REQ-373.2, REQ-373.3, REQ-373.4]
  partial: []
---/ci---
2026-08-20 14:58:52 +00:00
CIAgent a112d6f143 docs(P01): verify complete — smoke test PASS (REQ-373.1..4)
---ci---
project: acdl
phase: 1
milestone: v1.31
status: verify
---/ci---
2026-08-20 14:58:25 +00:00
CIAgent ad280b181b feat(P01): polish leadership deck visible prose + layout (v1.31, D-247)
Enrich on-slide body wording on all 7 slides (slides 2-6 were sparse,
43-67 visible words; now 97-168). Re-balance layout: title -> frame ->
body -> diagram -> closing italic benefit. Invariants preserved:
7 slides, S&P theme tokens, speaker-note bands, [1] citations 3/5/7,
diagram PNGs, footer string. PPTX re-rendered. Smoke test PASS.

REQ-373.1 visible prose density enriched
REQ-373.2 layout improved (renderer block vocabulary unchanged)
REQ-373.3 invariants preserved (D-247)
REQ-373.4 PPTX re-rendered; check_leadership_deck.sh exits 0

---ci---
project: acdl
phase: 1
milestone: v1.31
status: execute
---/ci---
2026-08-20 14:58:18 +00:00
CIAgent 2ea9fb4e51 merge(phase/00): v1.31 P0 pre-execution complete (specify+clarify+research+plan)
Nova Slides Render / render (push) Failing after 28s
2026-08-20 14:57:00 +00:00
CIAgent 52b16bbef1 docs(P00): clarify + research + plan — D-247 invariants locked
---ci---
project: acdl
phase: 0
milestone: v1.31
status: plan
---/ci---
2026-08-20 14:56:53 +00:00
CIAgent 68908d7f6a docs(init): validate specification
---ci---
project: acdl
phase: 0
milestone: v1.31
status: specify
---/ci---
2026-08-20 14:56:47 +00:00
CIAgent 85cc962fda merge(phase/05): complementary mermaid diagrams — relationships + stack positioning
acdl-ci / Lint (push) Successful in 11s
acdl-ci / Test (push) Failing after 21s
acdl-ci / Platform check-only (offline) (push) Successful in 24s
nova-release / Compute semver + update tags (push) Failing after 24s
Nova Slides Render / render (push) Failing after 10m11s
nova-publish / Build + push kj ECR image (KJ-STATIC, D-239) (push) Failing after 10m20s
acdl-ci / forge_parity_disabled (push) Failing after 11m30s
nova-publish / Publish wheel + Lambda layer + Lambda zip + Release (push) Has been skipped
---ci---
project: acdl
phase: 5
milestone: v1.30
status: complete
---/ci---
2026-08-20 14:46:31 +00:00
CIAgent ba28017f5b feat(P05): re-author 7 mermaid diagrams as complementary visuals
Diagrams now show relationships + stack positioning, not just restating
slide text:
- slide 1: the widening gap (velocity vs coordination surface) → Nova absorbs
- slide 2: Nova's position in the stack (SDLC/PDLC → contract → Nova → prod)
- slide 3: inheritance tree (two tenets → 6 architectural elements they shape)
- slide 4: confidence-threshold ladder (dev 0.50 → qa 0.75 → prod 0.90 → dr 0.95 + escalation)
- slide 5: stack layers with the contract as the dividing line (above/below)
- slide 6: the arc with what each milestone unlocks + the constant contract surface
- slide 7: proven foundation → runway arc → ask → structural risk if not

Fixed: slide 4 node/subgraph naming collision (DR → DRENV);
slides 2 + 5 reworked to horizontal layout (were too tall for slides).

---ci---
project: acdl
phase: 5
milestone: v1.30
status: execute
---/ci---
2026-08-20 14:46:26 +00:00
CIAgent 17903973aa chore(compress): archive v1.30 phase files — active root 17 → 8 files
acdl-ci / Lint (push) Successful in 9s
acdl-ci / forge_parity_disabled (push) Successful in 11s
acdl-ci / Platform check-only (offline) (push) Successful in 19s
nova-release / Compute semver + update tags (push) Failing after 11m15s
acdl-ci / Test (push) Failing after 11m26s
Archived (snapshotted to .ciagent/archive/, removed from active root):
- CLARIFY.md → CLARIFY-v1.30.md (D-241..D-246)
- RESEARCH.md → RESEARCH-v1.30.md (render pipeline, mermaid, vision)
- GRILL.md → GRILL-v1.30.md (PROCEED 0.88, G-1..G-4)
- PLAN.md → PLAN-v1.30.md (P1 4 waves + P3 polish)
- PERSONAS.md → PERSONAS-v1.30.md (lead+backend+ci-doc+ci-cli)
- IDEATE.md → IDEATE-v1.27.md (stale)
- IAM_POLICY.md → IAM_POLICY-v1.28.md (stale)
- REGRESSION_REPORT.{md,json} → REGRESSION_REPORT-v1.26.{md,json} (stale)

Active root (8 persistent files):
PROJECT.md, REQUIREMENTS.md, ROADMAP.md, STATE.md, ARCHITECTURE.md,
NORTH_STAR.md, config.json, CHECKPOINT.json

---ci---
project: acdl
phase: 4
milestone: v1.30
status: complete
action: compress
---/ci---
2026-08-20 14:36:15 +00:00
CIAgent 6dfde4b785 docs(milestone): complete v1.30 Single-shot Leadership Deck (polished, release v1.29.5)
acdl-ci / Lint (push) Successful in 11s
acdl-ci / Test (push) Failing after 23s
acdl-ci / Platform check-only (offline) (push) Successful in 20s
nova-release / Compute semver + update tags (push) Successful in 41s
acdl-ci / forge_parity_disabled (push) Failing after 14m45s
---ci---
project: acdl
phase: 4
milestone: v1.30
status: complete
requirements:
  covered: [REQ-372.1,REQ-372.2,REQ-372.3,REQ-372.4,REQ-372.5,REQ-372.6,REQ-372.7,REQ-372.8,REQ-372.9,REQ-372.10,REQ-372.11,REQ-372.12]
  partial: []
---/ci---
2026-08-20 14:28:16 +00:00
CIAgent 13ee34b5a7 merge(milestone): v1.30 Single-shot Leadership Deck (polished) to main (release v1.29.5)
acdl-ci / Lint (push) Successful in 12s
acdl-ci / Test (push) Failing after 25s
Nova Slides Render / render (push) Failing after 22s
nova-release / Compute semver + update tags (push) Failing after 10m33s
acdl-ci / Platform check-only (offline) (push) Failing after 10m42s
acdl-ci / forge_parity_disabled (push) Failing after 11m7s
---ci---
project: acdl
phase: 4
milestone: v1.30
status: complete
tag: v1.29.5
milestone_release: true
merged_to_main: true
---/ci---
2026-08-20 14:26:55 +00:00
CIAgent ac791c7d23 merge(phase/04): v1.30 P4 final review + milestone ship
---ci---
project: acdl
phase: 4
milestone: v1.30
status: complete
tag: v1.29.5
milestone_release: true
---/ci---
2026-08-20 14:26:55 +00:00
CIAgent bc31c54940 docs(P04): final review + audit — PASS (polish + diagrams verified)
nova-publish / Build + push kj ECR image (KJ-STATIC, D-239) (push) Failing after 21s
nova-publish / Publish wheel + Lambda layer + Lambda zip + Release (push) Has been skipped
Nova Slides Render / render (push) Failing after 15m5s
---ci---
project: acdl
phase: 4
milestone: v1.30
status: review
---/ci---
2026-08-20 14:26:49 +00:00
CIAgent eda7e827b9 merge(phase/03): v1.30 P3 deck-polish complete (D-244/D-245/D-246, 7 diagrams)
---ci---
project: acdl
phase: 3
milestone: v1.30
status: complete
tag: v1.29.4
---/ci---
2026-08-20 14:26:04 +00:00
CIAgent 4c547780e5 docs(ship): P3 verify complete → v1.29.4 (v1.30 deck-polish)
---ci---
project: acdl
phase: 3
milestone: v1.30
status: complete
tag: v1.29.4
---/ci---
2026-08-20 14:26:04 +00:00
CIAgent 0c4f5582f3 feat(P03): render PPTX + F5(b) inline bold de-emphasize — all checks pass
---ci---
project: acdl
phase: 3
milestone: v1.30
status: verify
wave: 4
persona: backend-engineer
---/ci---
2026-08-20 14:25:53 +00:00
CIAgent b85da0471b docs(P03): deck source polish — cover slide, slide 7 what-works-now, 7 diagrams
---ci---
project: acdl
phase: 3
milestone: v1.30
status: execute
wave: 3
persona: ci-doc-writer
---/ci---
2026-08-20 14:22:51 +00:00
CIAgent b51dfb1c03 feat(P03): 7 S&P-themed mermaid diagrams + render helper (D-246)
---ci---
project: acdl
phase: 3
milestone: v1.30
status: execute
wave: 2
persona: ci-doc-writer + backend-engineer
---/ci---
2026-08-20 14:21:31 +00:00
CIAgent 246c0e93b3 feat(P03): render_pptx.py polish F1-F5 (balance, autofit, bullets, footer, blockquote/slide6)
---ci---
project: acdl
phase: 3
milestone: v1.30
status: execute
wave: 1
persona: backend-engineer
---/ci---
2026-08-20 14:19:51 +00:00
CIAgent 50a8089e27 docs(P03): clarify — D-244 (cover), D-245 (slide 7 content), D-246 (mermaid diagrams)
---ci---
project: acdl
phase: 3
milestone: v1.30
status: clarify
decisions: [D-244, D-245, D-246]
---/ci---
2026-08-20 14:18:32 +00:00
CIAgent 9e578a29e0 docs(milestone): complete v1.30 Single-shot Leadership Deck (release v1.29.3)
acdl-ci / forge_parity_disabled (push) Successful in 17s
acdl-ci / Lint (push) Successful in 12s
acdl-ci / Test (push) Failing after 23s
acdl-ci / Platform check-only (offline) (push) Successful in 19s
nova-release / Compute semver + update tags (push) Successful in 40s
---ci---
project: acdl
phase: 2
milestone: v1.30
status: complete
requirements:
  covered: [REQ-372.1,REQ-372.2,REQ-372.3,REQ-372.4,REQ-372.5,REQ-372.6,REQ-372.7,REQ-372.8,REQ-372.9,REQ-372.10,REQ-372.11,REQ-372.12]
  partial: []
---/ci---
2026-08-20 13:27:14 +00:00
CIAgent 96765fe020 merge(milestone): v1.30 Single-shot Leadership Deck to main (release v1.29.3)
acdl-ci / forge_parity_disabled (push) Successful in 10s
acdl-ci / Platform check-only (offline) (push) Successful in 23s
nova-release / Compute semver + update tags (push) Successful in 44s
Nova Slides Render / render (push) Failing after 10m31s
acdl-ci / Test (push) Failing after 11m34s
acdl-ci / Lint (push) Failing after 11m46s
REQ-372.1..REQ-372.12 complete. 7-slide PPTX leadership deck for
Infrastructure & Operations (August 2026, November 2026 runway).
CAP-042. D-241 (discrete artifact), D-242 (render extension),
D-243 (date anchor). Tags: v1.29.1 (P0), v1.29.2 (P1), v1.29.3 (P2 = milestone release).

---ci---
project: acdl
phase: 2
milestone: v1.30
status: complete
tag: v1.29.3
milestone_release: true
merged_to_main: true
---/ci---
2026-08-20 13:26:11 +00:00
CIAgent bf07fe49d0 merge(phase/02): v1.30 P2 final review + audit + milestone ship
---ci---
project: acdl
phase: 2
milestone: v1.30
status: complete
tag: v1.29.3
milestone_release: true
---/ci---
2026-08-20 13:26:08 +00:00
CIAgent 6d5fa85e63 docs(P02): final review + audit — PASS (no P0/P1 issues)
nova-publish / Build + push kj ECR image (KJ-STATIC, D-239) (push) Failing after 25s
nova-publish / Publish wheel + Lambda layer + Lambda zip + Release (push) Has been skipped
Nova Slides Render / render (push) Failing after 26s
Review: 7 slides match Slide Content Map (REQ-372.7); smoke test exits 0;
footer on every slide; citizen deck unmodified; no secrets; no CI gate
wiring; no publish.yml integration.

Audit: 14/14 commits have ---ci--- blocks; 11 .ciagent/ files present;
phase/01 deleted; tags v1.29.1+v1.29.2 exist; REQ-372.1..12 in
REQUIREMENTS.md; CAP-042 in STATE.md; D-241 in PROJECT.md.

---ci---
project: acdl
phase: 2
milestone: v1.30
status: review
---/ci---
2026-08-20 13:26:00 +00:00
CIAgent f584330f40 merge(phase/01): v1.30 P1 leadership-deck complete (REQ-372.1..12, CAP-042, D-241)
Nova Slides Render / render (push) Failing after 30s
---ci---
project: acdl
phase: 1
milestone: v1.30
status: complete
tag: v1.29.2
---/ci---
2026-08-20 13:24:42 +00:00
34 changed files with 905 additions and 133 deletions
+15 -14
View File
@@ -1,27 +1,28 @@
{
"phase": 1,
"stage": "verify",
"milestone": "v1.30",
"milestone": "v1.31",
"phase_role": "execution",
"attempts": 0,
"updated_at": "2026-08-20T14:25:00Z",
"updated_at": "2026-08-20T16:35:00Z",
"project": "acdl",
"projects": ["acdl", "nova-blockchain-exchange"],
"active_milestone": "v1.30",
"milestone_branch": "milestone/v1.30-leadership-deck",
"phase_branch": "phase/01-leadership-deck",
"tag_line": "v1.29.x",
"phase_name": "leadership-deck",
"milestone_type": "feature",
"reqs_covered": ["REQ-372.1","REQ-372.2","REQ-372.3","REQ-372.4","REQ-372.5","REQ-372.6","REQ-372.7","REQ-372.8","REQ-372.9","REQ-372.10","REQ-372.11","REQ-372.12"],
"active_milestone": "v1.31",
"milestone_branch": "milestone/v1.31-leadership-deck-polish",
"phase_branch": "acdl/phase/01-deck-polish",
"tag_line": "v1.30.x",
"phase_name": "deck-polish",
"milestone_type": "nfr",
"reqs_covered": ["REQ-373.1","REQ-373.2","REQ-373.3","REQ-373.4"],
"reqs_partial": [],
"previous_milestone": {
"milestone": "v1.29",
"tag": "v1.28.6",
"milestone": "v1.30",
"tag": "v1.29.5",
"complete": true,
"merged_to_main": "9dc5669",
"merged_to_main": "13ee34b",
"branches_deleted": true,
"releases_created": true
"releases_created": true,
"release_ids": [811,813,814,818]
},
"notes": "v1.30 P1 VERIFY complete. 38/38 checks passed across 4 layers (structural, behavioral, security, quality). All 12 REQs verified. Smoke test exits 0. PPTX 7 slides + footer on every slide. Citizen deck unmodified. Next: SHIP (v1.29.2)."
"notes": "v1.31 P1 VERIFY PASS. check_leadership_deck.sh: ALL CHECKS PASSED. (a) source exists, (b) slide count=7, (c) speaker-note word counts in band, (d) footer present, (e) only S&P theme colors, (f) PPTX exists. [1] citations confirmed on slides 3/5/7. Visible prose density enriched (slides 2-6: 43-67 -> 97-168 words). REQ-373.1..4 all complete."
}
+109 -3
View File
@@ -689,8 +689,8 @@ New requirements REQ-354..REQ-369 + REQ-371 + REQ-363b — full text in
### v1.30 ID allocations (no collisions with shipped history)
- **Decisions:** `D-241..D-243` (3 decisions, authored in CLARIFY).
Max existing D = D-240 (v1.29). Next free: D-244.
- **Decisions:** `D-241..D-246` (6 decisions, authored in CLARIFY
across P0 + P3). Max existing D = D-240 (v1.29). Next free: D-247.
- **D-241** — Leadership deck is a single-shot, discrete, hand-
authored artifact (NOT a compression of the existing citizen-
developer pitch `nova-autonomous-cloud-delivery-marp.md`).
@@ -707,6 +707,18 @@ New requirements REQ-354..REQ-369 + REQ-371 + REQ-363b — full text in
- **D-243** — Date anchor discipline: August 2026 is a month-only
presentation anchor (no specific day); November 2026 is the
runway anchor (~90 days).
- **D-244** — Slide 1 becomes a black-background cover (overrides
grill G-1). Visual treatment only; on-slide text unchanged.
- **D-245** — Slide 7 "What works now" content addition. New
on-slide block before the ask. Records: 13 L1 + 2 L2 live
(confidence 0.800), next-steps arc (greenfield pilots → promote
to prod → SPGE constitutional library → infra layer). "sandbox"
is colloquial for the dev AWS account `581513795199`; "SPGE
constitutional library" is external/unverified-in-repo.
- **D-246** — 7 S&P-themed mermaid diagrams, one per slide,
rendered via local mmdc with vendored Chromium libs (24 Debian
bookworm .deb packages fetched, `.so` files extracted). `.mmd`
sources + PNGs committed for reproducibility.
- **Capabilities:** `CAP-042` (1 capability, appended at ship).
Max existing CAP = CAP-041 (v1.29). Next free: CAP-043.
@@ -1032,4 +1044,98 @@ Infrastructure & Operations leadership in August 2026." Asks for
architecture endorsement and runway to next milestone by November
2026. Velocity framing with **60% goal as internal directional
target, not sourced claim**. Closes with "Use the runway to land the
architecture endorsement."
architecture endorsement."
## v1.31 — Leadership Deck Polish II (active milestone)
> **NFR/refinement milestone — polish pass on the v1.30 leadership
> deck.** A single refinement phase that enriches the visible on-slide
> prose, improves the slide layout, and re-renders the PPTX — without
> altering the S&P visual theme, the 7-slide structure, the speaker-note
> word-count bands, the vision `[1]` grounding, or the diagram PNGs.
> The v1.30 deck shipped with sparse visible wording (slides 26
> averaged 4367 visible words, leaning on diagrams); v1.31 makes each
> slide stand on its own as a readable artifact while a presenter
> speaks, so the deck reads cleanly both live and as a leave-behind.
>
> This is a **refinement-only** milestone (no new features, no new
> slides, no theme change, no schema change). Tags run on the
> **v1.30.x** line (previous minor): `v1.30.0` (P0) → `v1.30.1` (P1
> execution = milestone release). Milestone branch:
> `milestone/v1.31-leadership-deck-polish`. Authoritative resume
> state: `.ciagent/CHECKPOINT.json`.
>
> **Source spec:** REQ-373 v1.0 (locked 2026-08-20). Full requirement
> text in `.ciagent/REQUIREMENTS.md` §v1.31.
### v1.31 ID allocations (no collisions with shipped history)
- **Decisions:** `D-247` (1 decision, authored in CLARIFY).
- **D-247** — Polish is **refinement-only and theme-preserving**.
The S&P theme tokens (`#D6002A`, `#1B1B1B`, `#FFFFFF`, `#F0F0F0`),
the 7-slide count, the per-slide speaker-note word-count bands
(1/2/4/6: 150300; 3/5: 250400; 7: 200300), the vision `[1]`
citations on slides 3/5/7, the 7 mermaid diagram PNGs, and the
footer string are all **invariants** of this milestone — they must
not change. Polish is confined to: (a) denser, better-structured
visible body prose on each slide, (b) layout improvement within
the existing `render_pptx.py` block vocabulary (lead/quote/plain/
bullet/ordered/image/table/benefit), and (c) re-rendering the
PPTX. No new slides, no new diagrams, no theme tokens, no new
speaker-note bands. The citizen-developer deck
(`nova-autonomous-cloud-delivery-marp.md`) remains untouched
(D-241 still holds).
- **Capabilities:** none new (CAP-042 is refined in place; no new CAP
allocated). Next free CAP remains CAP-043.
### v1.31 Scope (CLARIFY-grounded, full autonomy)
Refinement of `docs/presentations/nova-leadership-deck-marp.md`:
- Enrich the **visible on-slide prose** on every slide so the deck
reads as a standalone artifact (current slides 26 average 4367
visible words; target a denser, well-structured body that does not
crowd the diagram or overflow the slide).
- Improve **slide layout** using the existing renderer's block
vocabulary — re-balance the order of lead/quote/plain/benefit
blocks so each slide has a clear title, a framing line, the body,
the diagram, and a closing italic benefit line where present.
- Preserve all invariants (D-247): theme tokens, slide count = 7,
speaker-note bands, `[1]` citations on 3/5/7, the 7 diagram PNGs,
the footer string.
- Re-render `docs/presentations/nova-leadership-deck.pptx` via
`scripts/render_pptx.py`; the smoke test
`scripts/check_leadership_deck.sh` must still exit 0.
### v1.31 Hard constraints (invariants — D-247)
- Slide count stays exactly 7.
- S&P theme tokens are the only colors.
- Speaker-note word counts stay in band per REQ-372.4 bands.
- `[1]` citations remain present in slides 3, 5, 7 speaker notes.
- The 7 diagram PNGs (`assets/png/leadership-slide-N.png`) are reused
unchanged; `.mmd` sources are not modified.
- Footer string `Nova Platform - Infrastructure & Operations` unchanged.
- `scripts/render_pptx.py` is not modified (no new renderer features
needed — polish uses the existing block vocabulary).
- The citizen-developer deck is not touched.
### v1.31 Requirements
Full text in `.ciagent/REQUIREMENTS.md` §v1.31. Summary:
- **REQ-373.1** — Visible prose density: every slide's on-slide body
(excluding speaker notes + images) is enriched to a richer, well-
structured wording that reads as a standalone artifact.
- **REQ-373.2** — Layout improvement: each slide uses the renderer's
block vocabulary to balance title → frame → body → diagram → benefit.
- **REQ-373.3** — Invariants preserved (D-247): theme, 7 slides,
note bands, `[1]` citations, diagram PNGs, footer.
- **REQ-373.4** — PPTX re-rendered; smoke test exits 0.
### v1.31 phase status (live — tag `v1.30.2` = the milestone release)
| Phase | Status | Tag |
|-------|--------|-----|
| P0 pre-execution | complete | v1.30.1 |
| P1 polish | complete | v1.30.2 (milestone release) |
+93 -12
View File
@@ -1025,15 +1025,96 @@ principles, anti-goals, and integration-boundary claims to
| REQ | Phase | Status |
|-----|-------|--------|
| REQ-372.1 | P1 | planned |
| REQ-372.2 | P1 | planned |
| REQ-372.3 | P1 | planned |
| REQ-372.4 | P1 | planned |
| REQ-372.5 | P1 | planned |
| REQ-372.6 | P1 | planned |
| REQ-372.7 | P1 | planned (visual review) |
| REQ-372.8 | P1 | planned |
| REQ-372.9 | P1 | planned |
| REQ-372.10 | P1 | planned |
| REQ-372.11 | P1 | planned |
| REQ-372.12 | P1 | planned |
| REQ-372.1 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.2 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.3 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.4 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.5 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.6 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.7 | P1/P3 | complete (v1.29.5, polished + diagrams) |
| REQ-372.8 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.9 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.10 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.11 | P1/P3 | complete (v1.29.5, polished) |
| REQ-372.12 | P1/P3 | complete (v1.29.5, polished) |
## v1.31 — Leadership Deck Polish II (active milestone)
> **Refinement-only NFR milestone — polish pass on the v1.30 leadership
> deck.** Enriches visible on-slide prose + improves layout, then
> re-renders the PPTX. No new features, no new slides, no theme change,
> no diagram change (D-247). Tags run on the **v1.30.x** line (previous
> minor): `v1.30.0` (P0) → `v1.30.1` (P1 = milestone release). The
> v1.30 requirements (REQ-372.1..12) remain complete and are NOT
> re-opened; v1.31 adds REQ-373.1..4 as a refinement layer over the
> same artifact.
### Decisions (locked in CLARIFY, full autonomy — load-bearing for v1.31)
- **D-247 (refinement-only, theme-preserving):** The polish is
confined to visible prose density + layout. The following are
**invariants** and must not change: the S&P theme tokens
(`#D6002A`, `#1B1B1B`, `#FFFFFF`, `#F0F0F0`); the 7-slide count; the
per-slide speaker-note word-count bands (1/2/4/6: 150300; 3/5:
250400; 7: 200300, per REQ-372.4); the `[1]` citations on slides
3/5/7 (per REQ-372.12); the 7 mermaid diagram PNGs and their `.mmd`
sources; the footer string `Nova Platform - Infrastructure &
Operations`. No new slides, no new diagrams, no renderer changes.
The citizen-developer deck is untouched (D-241 still holds).
### Requirements
#### REQ-373.1 — Visible prose density enriched per slide
**Priority:** High · **Journey:** J1
**Given** the v1.30 deck shipped with sparse visible wording (slides
26 averaged 4367 visible words, leaning on diagrams), **when** the
polished source markdown is inspected, **then** every slide's on-slide
body (excluding speaker-note HTML comments and image references)
carries richer, well-structured wording that lets the slide read as a
standalone artifact — a title, a framing line, a body, and (where
present) a closing italic benefit — without crowding the diagram or
overflowing the 16:9 slide. Verified by visual review against the
Slide Content Map and by the smoke test still passing.
#### REQ-373.2 — Layout improved within the renderer block vocabulary
**Priority:** High · **Journey:** J1
**Given** the existing `scripts/render_pptx.py` block vocabulary
(lead/quote/plain/bullet/ordered/image/table/benefit) is not modified,
**when** the polished PPTX is rendered, **then** each slide balances
its blocks so the reading order is clear (title → frame → body →
diagram → benefit) and the diagram remains the visual anchor. No new
renderer features are added.
#### REQ-373.3 — v1.30 invariants preserved (D-247)
**Priority:** High · **Journey:** J1
**Given** the D-247 invariants, **when** the polished source + PPTX
are validated, **then**: slide count = 7; the only hex colors are the
four S&P tokens; per-slide speaker-note word counts remain in band per
REQ-372.4; `[1]` citations remain in slides 3, 5, 7 speaker notes; the
7 diagram PNGs are reused unchanged; the footer string is unchanged.
The smoke test enforces (a)(f) and must exit 0.
#### REQ-373.4 — PPTX re-rendered; smoke test exits 0
**Priority:** High · **Journey:** J1
**Given** the polished source markdown, **when**
`scripts/render_pptx.py docs/presentations/nova-leadership-deck-marp.md
--output docs/presentations/nova-leadership-deck.pptx` is invoked,
**then** the PPTX is written with 7 slides and python-pptx raises no
exceptions, **and** `bash scripts/check_leadership_deck.sh` exits 0.
### v1.31 Traceability (live — see CHECKPOINT.json for authoritative state)
| REQ | Phase | Status |
|-----|-------|--------|
| REQ-373.1 | P1 | complete (v1.30.2) |
| REQ-373.2 | P1 | complete (v1.30.2) |
| REQ-373.3 | P1 | complete (v1.30.2) |
| REQ-373.4 | P1 | complete (v1.30.2) |
+37
View File
@@ -146,6 +146,43 @@
10 NFR constraints. Tags: `v1.28.0` (P0) → `v1.28.1..v1.28.5` (P1..P5)
`v1.28.6` (P6 final = milestone release).
- **v1.30 (complete, tag `v1.29.5` = the v1.30 release, merged to main
2026-08-20):** Single-shot Leadership Deck (polished). Feature
milestone. A hand-authored 7-slide PPTX deck for Infrastructure &
Operations leadership (CTO + VP Technology + Product Management),
presented August 2026, securing architecture endorsement and a
November 2026 runway. The deck is a **discrete artifact** (D-241:
NOT a compression of the existing citizen-developer pitch
`nova-autonomous-cloud-delivery-marp.md`, which remains unmodified).
Authored as Marp markdown, rendered via the existing
`scripts/render_pptx.py` (narrowly extended per D-242: path arg +
`--output` + per-slide footer textbox + leading-comment skip +
auto-fit + vertical balance + bullet-marker fix). **Polished in P3**
(D-244: slide 1 → black cover; D-245: slide 7 "What works now" block
— L1/L2 stacks live at confidence 0.800, next steps: greenfield
pilots → promote to prod → SPGE constitutional library → infra
layer; D-246: 7 S&P-themed mermaid diagrams, one per slide, rendered
via local mmdc with vendored Chromium libs). Smoke test
`scripts/check_leadership_deck.sh` (on-demand, NOT a CI gate). Vision
`[1]` grounding in slides 3/5/7 speaker notes (resolve to
`docs/vision.md`). 12 requirements (REQ-372.1..12), 1 capability
(CAP-042), 6 decisions (D-241..D-246). Tags: `v1.29.1` (P0) →
`v1.29.2` (P1 first draft) → `v1.29.3` (P2 first-draft final) →
`v1.29.4` (P3 polish) → `v1.29.5` (P4 polished final = milestone
release).
- **v1.31 (complete, tag `v1.30.2` = the v1.31 release):** Leadership
Deck Polish II — refinement-only NFR milestone. Enriches the v1.30
deck's visible on-slide prose and improves slide layout, then
re-renders the PPTX. Preserves all v1.30 invariants (D-247): S&P
theme tokens, 7-slide count, speaker-note word-count bands, `[1]`
citations on slides 3/5/7, the 7 mermaid diagram PNGs, and the
footer string. No new slides, no new diagrams, no renderer changes;
the citizen-developer deck is untouched. Visible prose density
raised (slides 26: 4367 → 97168 visible words). 4 requirements
(REQ-373.1..4), 1 decision (D-247). Tags ran on the v1.30.x line:
`v1.30.1` (P0) → `v1.30.2` (P1 = milestone release).
> **Full v1.0v1.24 phase detail, wave ordering, success criteria, and
> decision cross-references:** `.ciagent/archive/ROADMAP-v1.0-v1.24.md`.
+18 -2
View File
@@ -11,7 +11,23 @@
> *why*, read `NORTH_STAR.md`. For *how*, read `ARCHITECTURE.md`. For
> *what was decided*, read `PROJECT.md` load-bearing decisions.
>
> **Last milestone ship:** v1.29 (`v1.28.6`, 2026-08-20) — Reposplit +
> **Last milestone ship:** v1.31 (`v1.30.2`, 2026-08-20) — Leadership
> Deck Polish II. Refinement-only NFR milestone: enriched the v1.30
> leadership deck's visible on-slide prose (slides 26: 4367 → 97168
> visible words) and improved slide layout (title → frame → body →
> diagram → closing italic benefit), then re-rendered the PPTX. All
> v1.30 invariants preserved (D-247): S&P theme tokens (`#D6002A`,
> `#1B1B1B`, `#FFFFFF`, `#F0F0F0`), 7-slide count, speaker-note word-
> count bands, `[1]` citations on slides 3/5/7, the 7 mermaid diagram
> PNGs, the footer string. No new slides, no new diagrams, no
> renderer changes; the citizen-developer deck untouched. Smoke test
> `scripts/check_leadership_deck.sh` PASS. 4 requirements (REQ-
> 373.1..4), 1 decision (D-247). Tags ran on the v1.30.x line:
> `v1.30.1` (P0) → `v1.30.2` (P1 = milestone release). 7 S&P-themed
> mermaid diagrams reused unchanged. 2 Gitea releases: 819 (P0),
> 820 (P1 milestone).
>
> **Previous milestone ship:** v1.29 (`v1.28.6`, 2026-08-20) — Reposplit +
> Identity Layer Bring-Live. Feature milestone: platform operations
> extracted to a Gitea-private Terraform repo (`nova-platform-ops`,
> OPER-PRIV); `acdl/acdl` standardized on GitHub (D-232, `.gitea/`
@@ -357,7 +373,7 @@
| CAP-039 | Platform ops reposplit | v1.29 / `v1.28.6` | `nova-platform-ops` (out-of-band), `docs/operator-guide-platform-ops.md`, `docs/archive/nova-idp-cfn-v1.28.md` | REQ-369, REQ-OPS-GUIDE, D-232, D-235 | covered-reference | engineering (`acdl/acdl`, GitHub) ends at the artifact; operations (`nova-platform-ops`, Gitea-private, OPER-PRIV) begins at the live platform; tag-pin handoff; CFN archived; covered-reference REQs tracked via cutover gates |
| CAP-040 | KJ substrate lockstep | v1.29 / `v1.28.6` | `nova-platform-ops` (out-of-band), `platform/abac/kj-version.txt`, `.github/workflows/publish.yml` | REQ-371, REQ-363, REQ-363b, D-238, D-239 | covered-reference | one ECR image digest shared by Lambda `image_uri` + Fargate task `image`; `lifecycle.precondition` on both resources at `terraform plan`; KJ-STATIC (`CGO_ENABLED=0`, `file(1)` asserts `statically linked`); no second pipeline, no second SHA pin |
| CAP-041 | JWKS edge-only | v1.29 / `v1.28.6` | `nova-platform-ops` (out-of-band), `docs/operator-guide-platform-ops.md` | REQ-364, REQ-365, REQ-366, INV-18, D-233 | covered-reference | JWKS is the only public read surface; CloudFront + OAC (`AuthType: AWS_IAM`, NOT `NONE`, `OriginAccessControlOriginType: lambda`, `SigningBehavior: always`); direct Function URL → 403, via-CloudFront → 200; WAF rate-limit 3000/5min + AWSManagedRulesCommonRuleSet; ACM DNS-validated in us-east-1; Route53 A-alias |
| CAP-042 | Leadership presentation deck (single-shot) | v1.30 / `v1.29.3` | `docs/presentations/nova-leadership-deck-marp.md`, `docs/presentations/nova-leadership-deck.pptx`, `scripts/check_leadership_deck.sh` | REQ-372.1..REQ-372.12, D-241, D-242, D-243 | local | Single-shot 7-slide PPTX deck for Infrastructure & Operations leadership (CTO + VP Technology + Product Management); presented August 2026; November 2026 runway anchor; discrete hand-authored artifact (NOT a compression of the citizen-developer pitch per D-241); rendered via existing `scripts/render_pptx.py` (narrowly extended per D-242); smoke test on-demand (NOT a CI gate); vision `[1]` grounding in slides 3/5/7 |
| CAP-042 | Leadership presentation deck (single-shot, polished) | v1.30 / `v1.29.5` | `docs/presentations/nova-leadership-deck-marp.md`, `docs/presentations/nova-leadership-deck.pptx`, `scripts/check_leadership_deck.sh`, `scripts/render_leadership_diagrams.sh`, `docs/presentations/assets/mmd/leadership-slide-{1..7}.mmd`, `docs/presentations/assets/png/leadership-slide-{1..7}.png` | REQ-372.1..REQ-372.12, D-241..D-246 | local | Single-shot 7-slide PPTX deck for Infrastructure & Operations leadership (CTO + VP Technology + Product Management); presented August 2026; November 2026 runway anchor; discrete hand-authored artifact (NOT a compression of the citizen-developer pitch per D-241); rendered via existing `scripts/render_pptx.py` (narrowly extended per D-242); polished in P3 (D-244 cover slide, D-245 slide 7 "What works now" block, D-246 7 S&P-themed mermaid diagrams); smoke test on-demand (NOT a CI gate); vision `[1]` grounding in slides 3/5/7 |
## Archive pointers
@@ -206,8 +206,118 @@ at the v1.30 ship wave (CAP-042 row + intake assumption correction).
---
## Polish-phase decisions (D-244, D-245, D-246 — full autonomy)
The first draft (v1.29.3) passed all 12 REQs but the rendered PPTX
has 7 polish issues (vertical imbalance, text clipping, double bullet
markers, no visual variety, near-invisible footer, slide-6 red wall,
blockquote grey). The user requested: (1) polish all 7 issues, (2)
add a "What works now" emphasis to slide 7, (3) generate mermaid
diagrams for every slide. These decisions record the deviations from
prior binding decisions.
### D-244 — Slide 1 becomes a black-background cover (overrides grill G-1)
**Polish issue #4.** Grill G-1 locked "all 7 slides as white content
slides." The user approved making slide 1 a black-background cover
(strong opener for a live leadership presentation) while keeping
slides 2-7 as white content slides. The on-slide body text from the
Slide Content Map is preserved verbatim — only the visual treatment
(background + text color) changes. REQ-372.7's "deviation requires
CLARIFY" clause applies to *content* deviations; this is a
presentation polish, not a content change. The source change: slide
1's `## The friction...``# The friction...` (H1) + `<!-- _class:
title -->` directive, which triggers `render_title_slide` (black bg,
red top bar, white text).
**Confidence:** 1.0 (user-confirmed).
### D-245 — Slide 7 "What works now" content addition (deviation from Slide Content Map)
**User request.** A new "What works now" block is added to slide 7's
on-slide body, before the existing "What we ask" block. This is a
*content* deviation — the Slide Content Map specifies slide 7 as:
What we ask / Why now / What comes back + closer. The new block
emphasizes what's proven today (L1/L2 stack deployment works, live
apply to the sandbox/dev AWS account, confidence 0.800) and the
next-steps arc (ingest greenfield pilot projects → promote from
sandbox to production → integrate with the SPGE constitutional
library → serve as the infrastructure layer).
**Factual grounding (verified in RESEARCH):**
- 13 L1 primitives + 2 L2 modules in `modules/registry.json` (all at
`1.0.0`): alb, cloudfront, dynamodb, ecr, ecs-cluster, ecs-service,
iam-role, kms-key, rds, s3, uptime, vpc, waf + microservice, static-
assets.
- CAP-031: live `terraform apply` against AWS account `581513795199`
(the dev environment, `mode: full`, dev-only per D-209), producing
real ARNs (ALB, ECS, DynamoDB, S3, KMS) at confidence 0.800. This is
a **live AWS apply**, NOT "tested locally" and NOT a "sandbox"
account (the codebase has no sandbox account; the pilot-readiness
policy D-208 blocks placeholder accounts).
**"sandbox" colloquial term note:** The user explicitly chose to keep
"sandbox" as a colloquial term for the dev AWS account after I flagged
that the codebase fact is "dev account `581513795199`, live apply."
The slide uses "sandbox" (colloquial); the speaker notes carry the
precise facts (dev account, live apply, confidence 0.800).
**"SPGE constitutional library" unverified-in-repo note:** "SPGE"
and "constitutional library" appear nowhere in the codebase (0
matches across all `.md`/`.py`/`.json`/`.yml`). The user confirmed it
is an external system the audience recognizes. The slide includes it
as a named next-step integration target, not as a current capability.
The speaker notes do not assert it exists in the codebase.
The Slide Content Map in PROJECT.md is updated to reflect the new
slide 7 structure.
**Confidence:** 0.90.
### D-246 — Mermaid diagrams on all 7 slides
**User request.** Each of the 7 slides gets a leader-friendly,
non-technical mermaid diagram covering its core concept. Different
mermaid shapes per slide for visual variety.
**Render path (verified):** The local `mmdc` (mermaid-cli) is blocked
by missing Chromium shared libraries (10+ system libs absent, no
root). Resolution: 24 Debian bookworm `.deb` packages fetched from the
Debian mirror, `.so` files extracted to `/home/opencode/tmp/so2/`,
`LD_LIBRARY_PATH` set to include them. Chromium (puppeteer cache at
`/home/opencode/.cache/puppeteer/chrome/.../chrome`) launches with
the vendored libs; `mmdc` renders with the S&P theme (`sp-theme.json`)
+ 2x scale + transparent background. Verified: test diagram renders
to a valid PNG with all 4 S&P colors present. The `.mmd` source files
+ rendered PNGs are committed for reproducibility; a future
environment with system Chromium can re-render via the existing
`scripts/render_slides.sh` mermaid step.
**Theme:** Inline `%%{init: {...}}%%` directive in each `.mmd` with
S&P theme variables (`primaryColor:#1B1B1B`, `primaryBorderColor:
#D6002A`, `primaryTextColor:#fff`, `secondaryColor:#fff`,
`tertiaryColor:#F0F0F0`, `lineColor:#1B1B1B`) — only the 4 S&P tokens.
Transparent background. No component names, no technical jargon —
concepts only (leader-friendly).
**Diagram-type-per-slide mapping:**
1. flowchart LR — 3 frictions → Nova absorbs them
2. flowchart TB — Central IT golden image → Nova one layer up
3. flowchart LR with subgraphs — two principles → everything inherits
4. flowchart LR (3 columns) — Live · Attested · Stays human
5. flowchart LR (two halves) — In Nova's lane / Outside Nova's lane
6. timeline — the 18-month shape (α→β→γ→δ)
7. flowchart LR — what works now → next steps arc
The Slide Content Map in PROJECT.md is updated to include a "Diagram"
field per slide.
**Confidence:** 0.88.
---
## Requirements impact
No requirements are added, removed, or re-scoped by these decisions.
D-241D-243 are load-bearing context for executing REQ-372.1.12 as
written. The spec is locked (v1.0, 2026-08-20); no spec text changes.
No requirements are added, removed, or re-scoped by D-241D-243.
D-244D-246 are polish-phase decisions that record deviations from
prior binding decisions (G-1) and the Slide Content Map (slide 7).
The spec is locked (v1.0, 2026-08-20); no spec text changes. The
Slide Content Map in PROJECT.md is updated to reflect D-245 (slide 7
structure) and D-246 (diagram field per slide).
+10 -2
View File
@@ -8,8 +8,8 @@ state for offline agent loading.
## Why archive
The active milestone is v1.27 (PO State Catalog & Ciagent Compression).
The `.ciagent/` root was compressed twice:
The active milestone is v1.30 (Single-shot Leadership Deck, complete).
The `.ciagent/` root was compressed three times:
1. **v1.26 P2 compression** (~11,164 lines → ~5,232): the
completed-milestone narratives (v1.0v1.24) were relocated. Per the
@@ -22,6 +22,14 @@ The `.ciagent/` root was compressed twice:
+ COST (predates v1.26 pilot) were relocated. The 4 pre-execution
files (CLARIFY/GRILL/IDEATE/RESEARCH) were rewritten by v1.27 P0
and stay active through v1.27.
3. **v1.30 post-milestone compression** (17 → 8 files): the v1.30
phase-specific pre-execution files (CLARIFY/RESEARCH/GRILL/PLAN/
PERSONAS) were snapshotted to the archive and removed from the
active root — they are regenerated fresh each milestone. The stale
IDEATE (v1.27), IAM_POLICY (v1.28), and REGRESSION_REPORT (v1.26)
were also archived. The persistent files (PROJECT, REQUIREMENTS,
ROADMAP, STATE, ARCHITECTURE, NORTH_STAR, config, CHECKPOINT)
remain in the active root.
## Contents
+146 -37
View File
@@ -2,21 +2,28 @@
"projects": [
{
"slug": "acdl",
"name": "Nova The New Dawn of DevSecOps",
"name": "Nova \u2014 The New Dawn of DevSecOps",
"default": true
},
{
"slug": "nova-blockchain-exchange",
"name": "Nova Pilot Consumer Blockchain Stock Exchange",
"name": "Nova Pilot Consumer \u2014 Blockchain Stock Exchange",
"default": false
}
],
"active_project": "acdl",
"active_projects": ["acdl", "nova-blockchain-exchange"],
"active_milestone": "v1.30",
"active_projects": [
"acdl",
"nova-blockchain-exchange"
],
"active_milestone": "v1.31",
"autonomy": {
"level": "full",
"escalation_hooks": ["deploy", "delete_data", "merge_to_main"],
"escalation_hooks": [
"deploy",
"delete_data",
"merge_to_main"
],
"clarify_budget": 10,
"decision_confidence_threshold": 0.6,
"max_revision_iterations": 3,
@@ -42,35 +49,72 @@
"escalate_high_severity": true,
"bash_allowlist": {
"allowed_commands": [
"git", "ls", "cat", "head", "tail", "wc",
"echo", "mkdir", "cp", "mv", "rm", "touch",
"pwd", "which", "env", "printenv",
"python3", "pytest", "pip",
"terraform", "checkov",
"curl", "wget",
"docker", "docker-compose"
"git",
"ls",
"cat",
"head",
"tail",
"wc",
"echo",
"mkdir",
"cp",
"mv",
"rm",
"touch",
"pwd",
"which",
"env",
"printenv",
"python3",
"pytest",
"pip",
"terraform",
"checkov",
"curl",
"wget",
"docker",
"docker-compose"
],
"max_output_bytes": 1048576,
"timeout_ms": 30000,
"blocked_env_vars": [
"HOME", "PATH", "USER", "SHELL",
"AWS_*", "*_TOKEN", "*_KEY", "*_SECRET",
"*_PASSWORD", "*_CREDENTIAL",
"GITHUB_TOKEN", "GITHUB_API_KEY",
"OPENAI_API_KEY", "ANTHROPIC_API_KEY",
"HOME",
"PATH",
"USER",
"SHELL",
"AWS_*",
"*_TOKEN",
"*_KEY",
"*_SECRET",
"*_PASSWORD",
"*_CREDENTIAL",
"GITHUB_TOKEN",
"GITHUB_API_KEY",
"OPENAI_API_KEY",
"ANTHROPIC_API_KEY",
"OLLAMA_CLOUD_API_KEY"
]
}
},
"git": {
"branching_strategy": "flat",
"_branching_strategy_note": "Nova uses flat workflow (committed directly to main per established convention since v1.0; renamed ACDLNova in v1.15). The 'phase' strategy is advisory; CIAgent uses milestone/phase branches for v1.14 but the project convention is flat.",
"_branching_strategy_note": "Nova uses flat workflow (committed directly to main per established convention since v1.0; renamed ACDL\u2192Nova in v1.15). The 'phase' strategy is advisory; CIAgent uses milestone/phase branches for v1.14 but the project convention is flat.",
"auto_commit": true,
"auto_push": true
},
"secrets": {
"sources": [".env", ".env.secrets", ".env.*"],
"disallow": ["shell_env", "netrc", "keychain", "rc_files", "global_config"],
"sources": [
".env",
".env.secrets",
".env.*"
],
"disallow": [
"shell_env",
"netrc",
"keychain",
"rc_files",
"global_config"
],
"scopes": {
"forge": "NOVA_FORGE_TOKEN",
"gitea": "NOVA_FORGE_TOKEN",
@@ -112,10 +156,18 @@
"backend": {
"provider": "auto",
"agent_backends": {
"opencode": { "enabled": true },
"codex": { "enabled": true },
"claude-code": { "enabled": true },
"hermes": { "enabled": true }
"opencode": {
"enabled": true
},
"codex": {
"enabled": true
},
"claude-code": {
"enabled": true
},
"hermes": {
"enabled": true
}
},
"llm_backends": {
"openai": {
@@ -148,7 +200,13 @@
},
"ideation": {
"enabled": true,
"categories": ["security", "quality", "architecture", "coverage", "improvement"],
"categories": [
"security",
"quality",
"architecture",
"coverage",
"improvement"
],
"confidence_threshold": 0.6,
"max_ideas": 20,
"external_signals": {
@@ -162,7 +220,11 @@
},
"chaos": {
"enabled": true,
"scenarios": ["backend_unavailable", "requirement_change", "test_coverage_drop"]
"scenarios": [
"backend_unavailable",
"requirement_change",
"test_coverage_drop"
]
}
},
"sessions": {
@@ -178,30 +240,77 @@
"name": "lead-developer",
"domain": "coordination",
"frameworks": [],
"constraints": ["pragmatic", "battle-tested defaults"],
"constraints": [
"pragmatic",
"battle-tested defaults"
],
"territory": []
},
{
"name": "data-engineer",
"domain": "data",
"frameworks": ["drizzle", "postgresql"],
"constraints": ["schema-first", "type-safe ORM", "migration-driven"],
"territory": ["**/migrations/**", "**/schema/**", "**/models/**", "**/db/**", "prisma/schema.prisma", "drizzle/**", "**/*.sql"]
"frameworks": [
"drizzle",
"postgresql"
],
"constraints": [
"schema-first",
"type-safe ORM",
"migration-driven"
],
"territory": [
"**/migrations/**",
"**/schema/**",
"**/models/**",
"**/db/**",
"prisma/schema.prisma",
"drizzle/**",
"**/*.sql"
]
},
{
"name": "backend-engineer",
"domain": "backend",
"frameworks": ["fastify", "hono"],
"constraints": ["api-first", "strict-typing", "dependency-injection"],
"territory": ["**/api/**", "**/routes/**", "**/services/**", "**/middleware/**", "**/controllers/**", "**/auth/**"]
"frameworks": [
"fastify",
"hono"
],
"constraints": [
"api-first",
"strict-typing",
"dependency-injection"
],
"territory": [
"**/api/**",
"**/routes/**",
"**/services/**",
"**/middleware/**",
"**/controllers/**",
"**/auth/**"
]
},
{
"name": "frontend-engineer",
"domain": "frontend",
"active": false,
"frameworks": ["react", "next.js"],
"constraints": ["component-first", "server-components", "minimal-client-js"],
"territory": ["**/components/**", "**/pages/**", "**/hooks/**", "**/styles/**", "**/*.tsx", "**/*.css", "**/*.vue"],
"frameworks": [
"react",
"next.js"
],
"constraints": [
"component-first",
"server-components",
"minimal-client-js"
],
"territory": [
"**/components/**",
"**/pages/**",
"**/hooks/**",
"**/styles/**",
"**/*.tsx",
"**/*.css",
"**/*.vue"
],
"reason": "ACDL has no frontend (no package.json); decks are markdown (lead-developer territory). Deactivated per PERSONAS.md:80."
}
]
@@ -220,4 +329,4 @@
"engine": "kyverno-json",
"policy_root": "adapters/kyverno-json/policies"
}
}
}
@@ -0,0 +1,33 @@
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#1B1B1B','primaryBorderColor':'#D6002A','primaryTextColor':'#fff','secondaryColor':'#fff','secondaryBorderColor':'#D6002A','secondaryTextColor':'#1B1B1B','tertiaryColor':'#F0F0F0','lineColor':'#1B1B1B','fontFamily':'"Helvetica Neue","Arial",sans-serif'}}}%%
flowchart LR
subgraph TODAY["Today — the gap is widening"]
direction TB
V["Delivery velocity<br/>↑ rising fast"]
C["Coordination surface<br/>↑↑ rising faster"]
V -.-|"gap"| C
end
subgraph COST["The cost of the gap"]
direction TB
R1["Remediation<br/>cycles"]
R2["Gate fatigue<br/>& morale loss"]
R3["Compliance<br/>found late"]
end
TODAY -->|"absorbs"| NOVA
subgraph NOVA["Nova closes the gap"]
direction TB
N1["Owned primitives<br/>= no per-team infra authoring"]
N2["Attested up front<br/>= no late compliance"]
N3["Policy-bounded<br/>= no manual gating"]
end
COST -->|"absorbs"| NOVA
style TODAY fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style COST fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style NOVA fill:#1B1B1B,color:#fff,stroke:#D6002A
style V fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style C fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style R1 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style R2 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style R3 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style N1 fill:#1B1B1B,color:#fff,stroke:#D6002A
style N2 fill:#1B1B1B,color:#fff,stroke:#D6002A
style N3 fill:#1B1B1B,color:#fff,stroke:#D6002A
@@ -0,0 +1,25 @@
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#1B1B1B','primaryBorderColor':'#D6002A','primaryTextColor':'#fff','secondaryColor':'#fff','secondaryBorderColor':'#D6002A','secondaryTextColor':'#1B1B1B','tertiaryColor':'#F0F0F0','lineColor':'#1B1B1B','fontFamily':'"Helvetica Neue","Arial",sans-serif'}}}%%
flowchart LR
SDLC["SDLC<br/>code authored,<br/>built, tested"]
PDLC["PDLC<br/>product backlog,<br/>release planning"]
CONTRACT["The<br/>contract"]
INGEST["Contract<br/>ingestor"]
RESOLVE["Resolve<br/>→ L1/L2 stack"]
POLICY["Policy +<br/>confidence<br/>enforcement"]
APPLY["Reconcile<br/>→ live cloud"]
PROD["Running,<br/>observable,<br/>attested infra"]
SDLC --> CONTRACT
PDLC --> CONTRACT
CONTRACT -->|"validated<br/>boundary"| INGEST
INGEST --> RESOLVE
RESOLVE --> POLICY
POLICY --> APPLY
APPLY -->|"production-grade<br/>by construction"| PROD
style SDLC fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style PDLC fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style CONTRACT fill:#fff,color:#D6002A,stroke:#D6002A
style INGEST fill:#1B1B1B,color:#fff,stroke:#D6002A
style RESOLVE fill:#1B1B1B,color:#fff,stroke:#D6002A
style POLICY fill:#1B1B1B,color:#fff,stroke:#D6002A
style APPLY fill:#1B1B1B,color:#fff,stroke:#D6002A
style PROD fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
@@ -0,0 +1,22 @@
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#1B1B1B','primaryBorderColor':'#D6002A','primaryTextColor':'#fff','secondaryColor':'#fff','secondaryBorderColor':'#D6002A','secondaryTextColor':'#1B1B1B','tertiaryColor':'#F0F0F0','lineColor':'#1B1B1B','fontFamily':'"Helvetica Neue","Arial",sans-serif'}}}%%
flowchart TB
ROOT["Two tenets<br/>discipline everything"]
SB["Sovereign boundary<br/>govern the delivery lifecycle<br/>do not reach upstream"]
LA["Lower autonomous<br/>higher attested<br/>compute: platform<br/>choice: human"]
ROOT --> SB
ROOT --> LA
SB -->|"shapes"| FM["4-layer model<br/>artifact → contract →<br/>infra → runtime"]
SB -->|"shapes"| CS["Contract schema<br/>the only integration<br/>surface to SDLC/PDLC"]
SB -->|"shapes"| PE["Policy envelope<br/>confidence, NFRs,<br/>boundaries enforced"]
LA -->|"shapes"| HITL["HITL gates<br/>named approver ≠ PR author<br/>at qa, prod, dr"]
LA -->|"shapes"| CONF["Confidence signal<br/>0.50 → 0.75 → 0.90 → 0.95<br/>escalation below threshold"]
LA -->|"shapes"| AUDIT["Audit lineage<br/>every action → one owner<br/>→ one evidence entry"]
style ROOT fill:#1B1B1B,color:#fff,stroke:#D6002A
style SB fill:#1B1B1B,color:#fff,stroke:#D6002A
style LA fill:#1B1B1B,color:#fff,stroke:#D6002A
style FM fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style CS fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style PE fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style HITL fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style CONF fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style AUDIT fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
@@ -0,0 +1,17 @@
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#1B1B1B','primaryBorderColor':'#D6002A','primaryTextColor':'#fff','secondaryColor':'#fff','secondaryBorderColor':'#D6002A','secondaryTextColor':'#1B1B1B','tertiaryColor':'#F0F0F0','lineColor':'#1B1B1B','fontFamily':'"Helvetica Neue","Arial",sans-serif'}}}%%
flowchart LR
DEV["dev<br/>autonomous<br/>conf ≥ 0.50<br/>zero-touch"]
QA["qa<br/>HITL gate<br/>conf ≥ 0.75<br/>named approver<br/>≠ PR author"]
PROD["prod<br/>HITL gate<br/>conf ≥ 0.90<br/>named approver<br/>≠ PR author"]
DRENV["dr<br/>HITL gate<br/>conf ≥ 0.95<br/>named approver<br/>≠ PR author"]
DEV -->|"promotion"| QA
QA -->|"promotion"| PROD
PROD -->|"promotion"| DRENV
ESC["Escalation:<br/>below threshold<br/>→ human judgment"] -.->|"triggers"| QA
ESC -.->|"triggers"| PROD
ESC -.->|"triggers"| DRENV
style DEV fill:#1B1B1B,color:#fff,stroke:#D6002A
style QA fill:#1B1B1B,color:#fff,stroke:#D6002A
style PROD fill:#1B1B1B,color:#fff,stroke:#D6002A
style DRENV fill:#1B1B1B,color:#fff,stroke:#D6002A
style ESC fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
@@ -0,0 +1,29 @@
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#1B1B1B','primaryBorderColor':'#D6002A','primaryTextColor':'#fff','secondaryColor':'#fff','secondaryBorderColor':'#D6002A','secondaryTextColor':'#1B1B1B','tertiaryColor':'#F0F0F0','lineColor':'#1B1B1B','fontFamily':'"Helvetica Neue","Arial",sans-serif'}}}%%
flowchart LR
subgraph ABOVE["Above the contract — upstream, not Nova"]
APP["Application<br/>business logic"]
IDE["IDE · sprint ·<br/>author workflows"]
APPSEC["AppSec · dependency<br/>review · runtime security"]
VM["VM · bare-metal ·<br/>OS lifecycles<br/>consumed, not maintained"]
end
CONTRACT["the contract<br/>━━━━━━━━━<br/>declared intent<br/>validated, published"]
subgraph BELOW["Below the contract — Nova's lane"]
L1["L1 primitives<br/>S3 · RDS · Lambda<br/>ECS · KMS · DynamoDB"]
L2["L2 compositions<br/>microservice ·<br/>static-assets"]
GUARD["Guardrails<br/>confidence · policy<br/>attestation · audit"]
end
RT["Production<br/>runtime"]
ABOVE -.->|"declares via"| CONTRACT
CONTRACT -->|"validated boundary"| BELOW
BELOW -->|"reconciles to"| RT
style ABOVE fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style BELOW fill:#1B1B1B,color:#fff,stroke:#D6002A
style APP fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style IDE fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style APPSEC fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style VM fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style CONTRACT fill:#fff,color:#D6002A,stroke:#D6002A
style L1 fill:#1B1B1B,color:#fff,stroke:#D6002A
style L2 fill:#1B1B1B,color:#fff,stroke:#D6002A
style GUARD fill:#1B1B1B,color:#fff,stroke:#D6002A
style RT fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
@@ -0,0 +1,32 @@
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#1B1B1B','primaryBorderColor':'#D6002A','primaryTextColor':'#fff','secondaryColor':'#fff','secondaryBorderColor':'#D6002A','secondaryTextColor':'#1B1B1B','tertiaryColor':'#F0F0F0','lineColor':'#1B1B1B','fontFamily':'"Helvetica Neue","Arial",sans-serif'}}}%%
flowchart LR
subgraph NOW["Now"]
A["α — operating model<br/>named platform-ops body<br/>SLAs on every L2"]
end
subgraph Q1["Q1 2027"]
B["β — infra observability<br/>auto-published on apply<br/>no per-team dashboards"]
end
subgraph Q2["Q2 2027"]
G["γ — runbook generation<br/>from observed patterns<br/>SREs start, not blank"]
end
subgraph Q4["Q3-Q4 2027"]
D["δ — audit ledger<br/>S3 Object Lock + JWS<br/>externally verifiable"]
end
A -->|"unlocks"| B
B -->|"builds on"| G
G -->|"matures to"| D
NOW -.->|"governance<br/>is the unlock"| B
subgraph UNCHANGED["Stays constant across the arc"]
C["The contract surface<br/>remains the only<br/>SDLC/PDLC integration"]
end
D -.->|"exits to"| UNCHANGED
style NOW fill:#1B1B1B,color:#fff,stroke:#D6002A
style Q1 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style Q2 fill:#1B1B1B,color:#fff,stroke:#D6002A
style Q4 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style UNCHANGED fill:#fff,color:#1B1B1B,stroke:#D6002A
style A fill:#1B1B1B,color:#fff,stroke:#D6002A
style B fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style G fill:#1B1B1B,color:#fff,stroke:#D6002A
style D fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style C fill:#fff,color:#1B1B1B,stroke:#D6002A
@@ -0,0 +1,40 @@
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#1B1B1B','primaryBorderColor':'#D6002A','primaryTextColor':'#fff','secondaryColor':'#fff','secondaryBorderColor':'#D6002A','secondaryTextColor':'#1B1B1B','tertiaryColor':'#F0F0F0','lineColor':'#1B1B1B','fontFamily':'"Helvetica Neue","Arial",sans-serif'}}}%%
flowchart TB
subgraph PROVEN["Proven today — the foundation"]
direction LR
L1L2["13 L1 + 2 L2<br/>live in registry"]
PILOT["Pilot live-apply<br/>confidence 0.800<br/>dev AWS account"]
L1L2 --- PILOT
end
subgraph ARC["The runway arc — next steps"]
direction LR
N1["Ingest greenfield<br/>pilot projects"]
N2["Promote<br/>dev → prod<br/>activate qa, prod, dr"]
N3["Integrate SPGE<br/>constitutional library<br/>at the contract surface"]
N4["Serve as the<br/>infrastructure layer<br/>beneath every app"]
N1 --> N2 --> N3 --> N4
end
subgraph ASK["The ask"]
ENDORSE["Architecture<br/>endorsement"]
RUNWAY["Runway to next<br/>milestone by Nov 2026"]
ENDORSE --- RUNWAY
end
subgraph RISK["If we don't — the structural risk"]
GAP["Delivery acceleration<br/>vs operational absorption<br/>gap widens through 2027"]
end
PROVEN -->|"foundation enables"| ARC
ARC -->|"lands at"| ASK
ASK -.->|"without it"| RISK
style PROVEN fill:#1B1B1B,color:#fff,stroke:#D6002A
style ARC fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style ASK fill:#1B1B1B,color:#fff,stroke:#D6002A
style RISK fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style L1L2 fill:#1B1B1B,color:#fff,stroke:#D6002A
style PILOT fill:#1B1B1B,color:#fff,stroke:#D6002A
style N1 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style N2 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style N3 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style N4 fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
style ENDORSE fill:#1B1B1B,color:#fff,stroke:#D6002A
style RUNWAY fill:#1B1B1B,color:#fff,stroke:#D6002A
style GAP fill:#F0F0F0,color:#1B1B1B,stroke:#D6002A
Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

+54 -36
View File
@@ -14,6 +14,11 @@
Vision grounding: [1] citations in slides 3, 5, 7 speaker notes
resolve to docs/vision.md (the spec's acdl-vision.md reference).
Diagrams: 7 S&P-themed mermaid diagrams (D-246), one per slide,
rendered via scripts/render_leadership_diagrams.sh (mmdc + vendored
Chromium libs). Sources: assets/mmd/leadership-slide-N.mmd.
PNGs: assets/png/leadership-slide-N.png.
Render: python3 scripts/render_pptx.py docs/presentations/nova-leadership-deck-marp.md \
--output docs/presentations/nova-leadership-deck.pptx
Smoke test: bash scripts/check_leadership_deck.sh
@@ -42,16 +47,21 @@ style: |
@media print { section { overflow: hidden; } }
---
## The friction every delivery team lives today
<!-- _class: title -->
<!-- _paginate: false -->
# The friction every delivery team lives today
> *Velocity is up; the coordination surface around each change is up faster.*
- → Infrastructure is authored by people who don't specialize in infrastructure.
- → Every change is gated because one misconfiguration can expose the entire estate.
- → Compliance, security, and NFRs are checked late — fueling remediation cycles that erode delivery cadence and team morale.
- → Infrastructure is authored by people who don't specialize in infrastructure — the platform team is not standing behind every bucket, every instance, every key.
- → Every change is gated because one misconfiguration can expose the entire estate — so every change is reviewed, every change is manual, and the cost of getting it wrong is account-wide.
- → Compliance, security, and NFRs are checked late — after the PR, after the merge, sometimes after the deploy — fueling remediation cycles that erode delivery cadence and team morale.
> *Nova absorbs all three — owned building blocks, separation of concerns, attested compliance up front.*
![diagram](assets/png/leadership-slide-1.png)
<!--
Three patterns drive the friction every delivery team lives today, and all three trace back to one binding constraint: software delivery scales with the coordination surface around it, not the engineering inside it [1]. That is the claim the vision document opens with, and it is the lens for everything Nova does.
@@ -70,13 +80,15 @@ Nova absorbs all three. Owned building blocks, separation of concerns, attested
> *You already recognize this pattern.*
Every Central IT team curates a golden image for Windows, for Linux, for macOS. They own it. They patch it. They ship it. Consumers consume it without thinking about what's inside.
Every Central IT team curates a golden image for Windows, for Linux, for macOS. They own it, they patch it, they ship it — and consumers consume it without thinking about what is inside. That trade — per-application control for uniform operability — is one every enterprise has already made at the OS layer.
Nova plays the same role one layer up for everything that runs your cloud. S3 buckets with SSE-KMS posture. RDS instances with deletion protection and PITR. Lambda containers with static ABAC binaries. ALBs, ECS services, KMS keys, DynamoDB tables. Each one is owned by the platform team, patched by the platform team, attested by the platform team, and consumed by anyone who declares a contract.
Nova plays the same role one layer up: for everything that runs your cloud. S3 buckets with SSE-KMS posture. RDS instances with deletion protection and PITR. Lambda containers with static ABAC binaries. ALBs, ECS services, KMS keys, DynamoDB tables. Each primitive is owned by the platform team, patched by the platform team, attested by the platform team, and consumed by anyone who declares a contract.
The difference: every primitive is versioned, tested across its entire lifecycle, and bounded by policy before any consumer ever touches it.
The difference is rigor: every primitive is versioned, tested across its entire lifecycle, and bounded by policy before any consumer ever touches it.
> *Nova's lane is the infrastructure beneath the application. AppSec, dependency review, and runtime application security stay where they have always been — with the application team.*
> *Nova's lane is the infrastructure beneath the application. AppSec stays with the application team.*
![diagram](assets/png/leadership-slide-2.png)
<!--
The Central IT golden-image pattern is one every leadership team already recognizes. Central IT curates the Windows image, the Linux image, the macOS image. They own it, they patch it, they ship it, and consumers consume it without thinking about what is inside. That trade — per-application control for uniform operability — is a trade every enterprise has already made at the OS layer.
@@ -92,14 +104,16 @@ And the lane stays narrow. Nova's lane is the infrastructure beneath the applica
## Two principles that organize everything else
> *The architecture is principled, not improvised. Two tenets discipline every other decision.*
> *Two tenets discipline every other decision.*
**Sovereign boundary.** Nova governs the delivery lifecycle; it does not reach upstream into product or software development [1]. Integration with SDLC and PDLC partners happens exclusively through the validated, published contract surface. What lives outside the contract is not Nova's domain.
**Sovereign boundary** Nova governs the delivery lifecycle; it does not reach upstream into product or software development [1]. Integration with SDLC and PDLC partners — the IDE, the sprint tool, the author workflow, the agent harness — happens exclusively through the validated, published contract surface. What lives outside the contract is not Nova's domain.
**Lower autonomous · higher attested.** Lower environments proceed through agentic automation. Promotion to higher environments requires deliberate human attestation — not as a rubber stamp, but as policy-mandated accountability [1]. The compute the platform makes; the choice the human keeps.
**Lower autonomous · higher attested** — lower environments proceed through agentic, zero-touch automation; promotion to qa, prod, and dr requires deliberate human attestation [1]. Not a rubber stamp a policy-mandated act of accountability by a named human distinct from the PR author. The compute the platform makes; the choice the human keeps.
> *Everything else in the architecture inherits from these two.*
![diagram](assets/png/leadership-slide-3.png)
<!--
The architecture is principled, not improvised. Two tenets discipline every other decision the platform makes, and both come straight from the vision document [1].
@@ -114,14 +128,13 @@ And the point for this room: these two tenets are not aspirational. They are loa
## Live · Attested · Stays human
**Live today**
41 capabilities across 12 domains. Contract ingestor, audit outbox, state buckets, and the live pilot run have been operating in our AWS estate since v1.7; pilot evidence at v1.26 returned confidence 0.800. DORA + adoption + policy-conformance metrics flow to PowerBI from the same audit stream as the lineage. Every finding carries one owner, one patch state, one audit entry — one pane, no second source of truth. A POC is production-grade by construction: there is no "POC that became prod" surprise.
**Live today** — 41 capabilities across 12 domains; pilot confidence 0.800. The contract ingestor, the audit outbox, the state buckets, and the live pilot run have operated in our AWS estate since v1.7. DORA, adoption, and policy-conformance metrics flow to PowerBI from the same audit stream as the lineage — one pane, no second source of truth. Every finding carries one owner, one patch state, one audit entry.
**Attested on promotion**
qa, prod, and dr require a named human approver distinct from the PR author. Rubber stamps cannot be silently issued.
**Attested on promotion** — qa, prod, and dr require a named human approver distinct from the PR author. Rubber stamps cannot be silently issued; the attestation is a policy-mandated act of accountability.
**Stays human — by design**
Confidence below the autonomy threshold at qa, prod, or dr triggers human escalation [1]. Some categories of decision are preserved for human judgment, and the platform says so out loud.
**Stays human — by design** — confidence below the autonomy threshold at qa, prod, or dr triggers human escalation [1]. Some categories of decision are preserved for human judgment, and the platform says so out loud.
![diagram](assets/png/leadership-slide-4.png)
<!--
Three columns, three claims, one disambiguation. The claims are real, observable, and disciplined — and the distinction matters for this room.
@@ -140,17 +153,21 @@ Disciplined: attested on promotion, stays human by design. qa, prod, and dr requ
> *Nova stays where it belongs.*
**In Nova's lane**
- → Infrastructure primitives: S3, RDS, Lambda, ECS, DynamoDB, KMS, CloudFront.
- → Operational guardrails: confidence, policy, attestation, audit lineage.
- → CVE response at the infrastructure layer.
**Outside Nova's lane**
- → Application business logic.
- → IDE, sprint, author workflows [1].
- → Application-layer security: AppSec, dependency review, runtime threat modeling.
- → VM, bare-metal, OS lifecycles [1].
> *The line is the contract. Everything below the contract is Nova. Everything above it stays where it has always been.*
- → Application business logic.
- → IDE, sprint, and author workflows [1].
- → Application-layer security: AppSec, dependency review, runtime threat modeling.
- → VM, bare-metal, and OS lifecycles [1].
> *The line is the contract. Everything below it is Nova. Everything above it stays where it has always been.*
![diagram](assets/png/leadership-slide-5.png)
<!--
The boundary is not a defensive posture. It is an operating principle — and it is the principle that keeps the architecture honest [1].
@@ -168,16 +185,18 @@ The line is the contract. Everything below the contract is Nova. Everything abov
> *Where CDLC meets SDLC + PDLC — through the contract surface, not above it.*
**α (now → Q4'26) — Operating model + federated governance.** A named platform-ops body owns the platform; SLAs on every L2 are ratifiable by platform + consumer. The operating model is published; integration surfaces for SDLC and PDLC harnesses are documented at the contract boundary.
**α (now → Q4'26) — Operating model + federated governance.** A named platform-ops body owns the platform; SLAs on every L2 are ratifiable by platform and consumer. The operating model is published; integration surfaces for SDLC and PDLC harnesses are documented at the contract boundary.
**β (Q1'27) — Auto-published infra observability.** Every consumer stack ships with CloudWatch dashboards, uptime-kuma monitors, and alert routing on apply — infrastructure primitives publish observability as a property, no per-team authoring required.
**β (Q1'27) — Auto-published infra observability.** Every consumer stack ships with CloudWatch dashboards, uptime-kuma monitors, and alert routing on apply — infrastructure observability as a property, no per-team authoring required.
**γ (Q2'27) — Runbook generation from telemetry.** Every L1 primitive ships with an auto-generated incident runbook derived from observed patterns. SREs get a starting runbook, not a blank page.
**δ (Q3'27 → Q4'27) — Audit ledger, tamper-resistant + externally addressable.** The SQLite hash-evidence stream migrates to S3 Object Lock + JWS signatures. External counsel verifies any production change back to a named human attestation.
**δ (Q3'27 → Q4'27) — Audit ledger, tamper-resistant.** The SQLite hash-evidence stream migrates to S3 Object Lock + JWS signatures. External counsel verifies any production change back to a named human attestation.
> *Nova absorbs no IDE, no editor, no sprint tool, no agent harness.*
![diagram](assets/png/leadership-slide-6.png)
<!--
The 18-month shape is a boundary-respecting integration arc, not an expansion arc. Four milestones, each disciplined by the sovereign-boundary tenet [1]: Nova meets SDLC and PDLC through the contract surface, not above it.
@@ -196,23 +215,22 @@ Nova absorbs no IDE, no editor, no sprint tool, no agent harness. The contract s
## What we ask · What comes back
**What we ask.**
Architecture endorsement. Runway to the next milestone.
**What works now.** Deploying L1 & L2 stacks works today in the sandbox AWS account — 13 L1 primitives and 2 L2 modules, live-applied at confidence 0.800. Next steps: ingest greenfield pilot projects, promote from sandbox to production, integrate with the SPGE constitutional library, and serve as the infrastructure layer.
**Why now.**
Agentic SDLC is reshaping the delivery curve. What is barely keepable today — incident response, compliance reconciliation, security remediation — does not compress at the same rate as the velocity it has to keep pace with. By the end of 2027, the gap between delivery acceleration and operational absorption is the structural risk.
**What we ask.** Architecture endorsement. Runway to the next milestone.
**What comes back.**
The infrastructure foundation that absorbs the velocity. Metrics that tell us where to push next. Audit lineage that closes the regulatory question. The next milestone, **by November 2026**.
**Why now.** Agentic SDLC is reshaping the delivery curve. What is barely keepable today — incident response, compliance reconciliation, security remediation — does not compress at the same rate as the velocity it has to keep pace with. By the end of 2027, the gap between delivery acceleration and operational absorption is the structural risk.
**What comes back.** The infrastructure foundation that absorbs the velocity. Metrics that tell us where to push next. Audit lineage that closes the regulatory question. The next milestone, **by November 2026**.
> *What we do not ask for: an IDE, a sprint tool, an author workflow, an upstream pipeline. Nova stays in its lane [1].*
![diagram](assets/png/leadership-slide-7.png)
<!--
This is presented to Infrastructure and Operations leadership in August 2026. The ask is two things: architecture endorsement, and runway to the next milestone by November 2026.
This is presented to Infrastructure and Operations leadership in August 2026. What works now: deploying L1 and L2 stacks works today. 13 L1 primitives and 2 L2 modules are live in the registry; the pilot ran a live terraform apply against the dev AWS account at v1.26 and returned confidence 0.800 — a measured number, not a forecast. We refer to the dev account colloquially as the sandbox. Next steps: ingest greenfield pilot projects (greenfield consumers with no legacy to reconcile), promote from sandbox to production (the promotion path with HITL gates exists; the pilot was dev-only, so activating qa, prod, dr is the next step), integrate with the SPGE constitutional library (an external governance system the audience recognizes; the platform meets it at the contract surface), and serve as the infrastructure layer.
Why now. Agentic SDLC is reshaping the delivery curve. The velocity is up, and it is going to keep going up. What is barely keepable today — incident response, compliance reconciliation, security remediation — does not compress at the same rate as the velocity it has to keep pace with. The operational absorption side of the curve is steeper than the delivery acceleration side, and the gap between them is the structural risk. By the end of 2027, that gap is the thing that breaks cadence. Internal directional target: a 60% reduction in the operational absorption gap is the goal we are holding ourselves to — not a sourced claim, a directional target, and the metrics the platform already produces will tell us whether we are closing it.
The ask is architecture endorsement and runway to the next milestone by November 2026. Why now: agentic SDLC is reshaping the delivery curve. What is barely keepable today — incident response, compliance reconciliation, security remediation — does not compress at the same rate as the velocity. By end of 2027, the gap between delivery acceleration and operational absorption is the structural risk. Internal directional target: a 60% reduction in that gap — not a sourced claim, a directional target the platform's metrics will track.
What comes back. The infrastructure foundation that absorbs the velocity. Metrics that tell us where to push next. Audit lineage that closes the regulatory question. And the next milestone, by November 2026. That is the runway ask: not a budget, not a headcount, not a re-org. Runway to land the architecture endorsement and demonstrate the next milestone.
What we do not ask for: an IDE, a sprint tool, an author workflow, an upstream pipeline. Nova stays in its lane [1]. The sovereign boundary is the discipline that makes the ask small and the return large. Use the runway to land the architecture endorsement.
What comes back: the infrastructure foundation that absorbs the velocity, metrics that tell us where to push next, audit lineage that closes the regulatory question, and the next milestone by November 2026. Not a budget, not a headcount — runway to land the architecture endorsement. What we do not ask for: an IDE, a sprint tool, an author workflow, an upstream pipeline. Nova stays in its lane [1]. The sovereign boundary makes the ask small and the return large.
-->
Binary file not shown.
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# render_leadership_diagrams.sh — render the 7 leadership-deck mermaid
# diagrams to PNG via mmdc. Single-shot helper (NOT a CI gate, per
# D-241/D-246). Uses vendored Chromium shared libraries (D-246).
#
# Usage: bash scripts/render_leadership_diagrams.sh
set -euo pipefail
cd "$(git rev-parse --show-toplevel)"
MMD_DIR="docs/presentations/assets/mmd"
PNG_DIR="docs/presentations/assets/png"
THEME_JSON="$MMD_DIR/sp-theme.json"
PUPPETEER_CFG="docs/presentations/assets/puppeteer-config.json"
# Vendored Chromium shared libraries (D-246) — extracted from Debian
# bookworm .deb packages to /home/opencode/tmp/so2/
VENDORED_SO="/home/opencode/tmp/so2"
export LD_LIBRARY_PATH="${VENDORED_SO}:${LD_LIBRARY_PATH:-}"
export CHROME_PATH="/home/opencode/.cache/puppeteer/chrome/linux-152.0.7977.42/chrome-linux64/chrome"
echo "=== Rendering leadership deck mermaid diagrams (S&P theme, 2x, transparent) ==="
for mmd in "$MMD_DIR"/leadership-slide-*.mmd; do
name="$(basename "$mmd" .mmd)"
png="$PNG_DIR/$name.png"
echo " $name.mmd → $name.png"
npx --yes @mermaid-js/mermaid-cli@11.16.0 \
--configFile "$THEME_JSON" \
--puppeteerConfigFile "$PUPPETEER_CFG" \
-s 2 -b transparent \
--input "$mmd" \
--output "$png" 2>&1 | grep -v "^$" || true
done
echo " Rendered $(ls "$PNG_DIR"/leadership-slide-*.png 2>/dev/null | wc -l) leadership PNGs."
+77 -24
View File
@@ -31,7 +31,7 @@ try:
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR, MSO_AUTO_SIZE
from pptx.oxml.ns import qn
except ImportError:
print("ERROR: python-pptx not installed.", file=sys.stderr)
@@ -206,11 +206,13 @@ def _add_title_bar(slide):
return bar
def _add_footer(slide, text: str):
def _add_footer(slide, text: str, dark_bg: bool = False):
"""Right-aligned footer textbox at the bottom of every slide.
REQ-372.5 / D-242: the python-pptx path does not read the Marp
`footer:` directive, so the footer is rendered as a textbox.
F4 polish: dark text on white content slides, light text on the
black cover slide.
"""
if not text:
return None
@@ -225,7 +227,7 @@ def _add_footer(slide, text: str):
r.text = text
r.font.name = FONT_NAME
r.font.size = Pt(10)
r.font.color.rgb = GREY_HEADER
r.font.color.rgb = GREY_HEADER if dark_bg else BODY_TEXT
return tb
@@ -308,9 +310,15 @@ def _strip_inline_emphasis(text: str) -> str:
return text
def _inline_runs(p, text: str, *, size: int = 18, base_color: RGBColor = BODY_TEXT):
"""Add inline runs to paragraph `p`, rendering **bold** as red strong,
`code` as monospace, *italic* as italic. Other text is plain."""
def _inline_runs(p, text: str, *, size: int = 18, base_color: RGBColor = BODY_TEXT,
bold_color: RGBColor = None):
"""Add inline runs to paragraph `p`, rendering **bold** as strong,
`code` as monospace, *italic* as italic. Other text is plain.
F5(b): bold_color defaults to RED (legacy behavior) but can be
overridden to base_color to de-emphasize bold on slides with many
bold sections (avoids a red wall)."""
if bold_color is None:
bold_color = RED
# Tokenize on `**...**`, `*...*`, `` `...` ``
tokens = re.split(r"(\*\*[^*]+\*\*|`[^`]+`|\*[^*]+\*)", text)
for tok in tokens:
@@ -322,7 +330,7 @@ def _inline_runs(p, text: str, *, size: int = 18, base_color: RGBColor = BODY_TE
r.font.name = FONT_NAME
r.font.size = Pt(size)
r.font.bold = True
r.font.color.rgb = RED
r.font.color.rgb = bold_color
elif tok.startswith("`") and tok.endswith("`"):
r = p.add_run()
r.text = tok[1:-1]
@@ -586,7 +594,7 @@ def parse_slide(slide_src: str):
}
def render_title_slide(prs, slide_data, footer_text: str = ""):
def render_title_slide(prs, slide_data, deck_dir: Path, footer_text: str = ""):
slide = prs.slides.add_slide(prs.slide_layouts[6]) # blank
_set_bg(slide, BLACK)
# red top bar
@@ -635,7 +643,12 @@ def render_title_slide(prs, slide_data, footer_text: str = ""):
r_b.font.italic = True
r_b.font.color.rgb = WHITE
cur_top += Inches(0.85)
_add_footer(slide, footer_text)
elif kind == "image":
# image on title slide (D-246 diagrams on cover)
img_path = deck_dir / item[1]
_add_picture(slide, img_path, top=cur_top)
cur_top += Inches(3.6)
_add_footer(slide, footer_text, dark_bg=True)
def render_content_slide(prs, slide_data, deck_dir: Path, footer_text: str = ""):
@@ -644,63 +657,102 @@ def render_content_slide(prs, slide_data, deck_dir: Path, footer_text: str = "")
_add_title_bar(slide)
_add_title_text(slide, slide_data["title"], color=RED, size=28, top=0.25,
bold=True, height=0.7)
cur_top = Inches(1.05)
# F5(b): if a slide has >=4 lead/bold-prefixed blocks, de-emphasize
# them to black+bold (section labels) instead of red+bold (avoids a
# red wall on milestone-timeline slides like slide 6). Count both
# explicit lead blocks (**...** on own line) and plain blocks that
# start with **bold** inline.
def _is_bold_block(item):
if item[0] == "lead":
return True
if item[0] == "plain" and item[1].lstrip().startswith("**"):
return True
return False
bold_count = sum(1 for item in slide_data["body"] if _is_bold_block(item))
lead_color = BODY_TEXT if bold_count >= 4 else RED
# F1: vertical balance — pre-compute the content height to center
# the block between the title (bottom ~0.95") and the footer
# (top ~7.12"). Content starts at 1.05" by default; if the total
# content height is short, push it down to vertically center.
INC = {"lead": 0.50, "plain": 0.45, "quote": 0.55, "bullet": 0.40,
"ordered": 0.40, "image": 4.10, "table": 0.42, "code": 0.50,
"benefit": 0.75}
total_h = sum(INC.get(item[0], 0.40) for item in slide_data["body"])
content_start = 1.05
available = 7.12 - content_start # footer at 7.12
if total_h < available - 0.5 and total_h > 0:
offset = (available - total_h) / 2.0
offset = min(max(offset, 0), 1.2) # cap at +1.2"
content_start = round(content_start + offset, 2)
cur_top = Inches(content_start)
for item in slide_data["body"]:
kind = item[0]
if kind == "lead":
tb = slide.shapes.add_textbox(MARGIN_X, cur_top, CONTENT_W, Inches(0.5))
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
_inline_runs(p, item[1], size=18, base_color=RED)
# make the whole lead bold-strong-red
_inline_runs(p, item[1], size=18, base_color=lead_color,
bold_color=lead_color)
# make the whole lead bold
for r in p.runs:
r.font.bold = True
r.font.color.rgb = RED
cur_top += Inches(0.5)
r.font.color.rgb = lead_color
cur_top += Inches(0.50)
elif kind == "plain":
tb = slide.shapes.add_textbox(MARGIN_X, cur_top, CONTENT_W, Inches(0.4))
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
_inline_runs(p, item[1], size=18, base_color=BODY_TEXT)
cur_top += Inches(0.4)
_inline_runs(p, item[1], size=18, base_color=BODY_TEXT,
bold_color=lead_color)
cur_top += Inches(0.45)
elif kind == "quote":
tb = slide.shapes.add_textbox(
MARGIN_X + Inches(0.3), cur_top, CONTENT_W - Inches(0.3), Inches(0.6)
)
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
_inline_runs(p, item[1], size=18, base_color=GREY_TEXT)
_inline_runs(p, item[1], size=18, base_color=BODY_TEXT)
# italicize the whole blockquote
for r in p.runs:
r.font.italic = True
r.font.color.rgb = GREY_TEXT
cur_top += Inches(0.6)
r.font.color.rgb = BODY_TEXT
cur_top += Inches(0.55)
elif kind == "bullet":
# accumulate consecutive bullets into one text frame
# (handled below in a second pass; we render single here as fallback)
tb = slide.shapes.add_textbox(MARGIN_X, cur_top, CONTENT_W, Inches(0.35))
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
p.level = item[1]
r = p.add_run()
prefix = "" if item[1] == 0 else (" " if item[1] == 1 else "· ")
r.text = prefix + _strip_inline_emphasis(item[2])
# F3: if the bullet text starts with →, omit the bullet glyph
stripped_text = _strip_inline_emphasis(item[2])
if item[1] == 0:
prefix = "" if stripped_text.lstrip().startswith("") else ""
else:
prefix = " " if item[1] == 1 else "· "
r.text = prefix + stripped_text
r.font.name = FONT_NAME
r.font.size = Pt(18 if item[1] == 0 else 16)
r.font.color.rgb = BODY_TEXT
cur_top += Inches(0.35)
cur_top += Inches(0.40)
elif kind == "ordered":
tb = slide.shapes.add_textbox(MARGIN_X, cur_top, CONTENT_W, Inches(0.35))
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
r = p.add_run()
@@ -708,7 +760,7 @@ def render_content_slide(prs, slide_data, deck_dir: Path, footer_text: str = "")
r.font.name = FONT_NAME
r.font.size = Pt(18)
r.font.color.rgb = BODY_TEXT
cur_top += Inches(0.35)
cur_top += Inches(0.40)
elif kind == "image":
img_path = deck_dir / item[1]
_add_picture(slide, img_path, top=cur_top)
@@ -721,6 +773,7 @@ def render_content_slide(prs, slide_data, deck_dir: Path, footer_text: str = "")
tb = slide.shapes.add_textbox(MARGIN_X, cur_top, CONTENT_W, Inches(0.6))
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
r = p.add_run()
@@ -751,7 +804,7 @@ def render_deck(md_path: Path, pptx_path: Path):
is_title = (idx == 0) or data["is_title_class"] or data["title_is_h1"]
# The appendix is a content slide (rendered normally)
if idx == 0 and (data["title_is_h1"] or data["is_title_class"]):
render_title_slide(prs, data, footer_text=footer_text)
render_title_slide(prs, data, deck_dir, footer_text=footer_text)
elif data["is_title_class"] and not data["title_is_h1"] and idx != 0:
# Marp _class: title on a non-H1 slide (e.g., appendix) — render as
# content but with a title-style bar. Keep it simple: content slide.