"""Architecture diagram, revealed in four chunks aligned to intro beats i1..i4.""" C = "\033[36m"; B = "\033[1m"; D = "\033[2m"; G = "\033[32m"; Y = "\033[33m"; R = "\033[0m" CHUNKS = [ [ f" {B}{C}┌────────────────────────────────┐{R}", f" {B}{C}│{R} Developer / process owner {B}{C}│{R} {D}\"change this config\"{R}", f" {B}{C}└───────────────┬────────────────┘{R}", f" {B}{C} │{R}", f" {B}{C} ▼{R}", f" {B}{C}┌────────────────────────────────┐{R}", f" {B}{C}│{R} Business application on a VM {B}{C}│{R}", f" {B}{C}└───────────────┬────────────────┘{R}", ], [ f" {D} │ protected by{R}", f" {D} ▼{R}", f" {B}{G}┌────────────────────────────────┐{R} {D}┌───────────────────────────┐{R}", f" {B}{G}│{R} Zerto continuous protection {B}{G}│{R} vs {D}│ Nightly backup │{R}", f" {B}{G}│{R} {G}recovery point every few secs{R} {B}{G}│{R} {D}│ recovery point: hours old │{R}", f" {B}{G}└────────────────────────────────┘{R} {D}└───────────────────────────┘{R}", ], [ "", f" {B}{Y}┌────────────────────────────────┐{R}", f" {B}{Y}│{R} AI agent {B}{Y}│{R} 1. ask Zerto: is this protected?", f" {B}{Y}│{R} authorised to make the change {B}{Y}│{R} 2. tag a checkpoint in the journal", f" {B}{Y}└────────────────────────────────┘{R} 3. make the change, and test it", ], [ "", f" 4. {B}broken, and the agent cannot fix it{R}", f" recover the file, or the whole VM,", f" {G}from the checkpoint taken at step 2{R}", ], ] def frame(upto: int) -> str: """Everything revealed through chunk `upto` (1-based).""" out = ["\033[H\033[2J", f" {B}{C}ZERTO AI REWIND{R} {D}how it fits together{R}", ""] for chunk in CHUNKS[:upto]: out.extend(chunk) return "\n".join(out)