--- id: visual-explainers title: Diagram, Chart and Infrastructure Explainers code: DE subtitle: Four local explainer projects. Run them, feed them, read their outputs and fix their errors. hue: 262 sources: projects/chart-storyboard-builder, projects/diagram-reading-companion, projects/infrastructure-plan-explainer, projects/service-ownership-navigator source_hash: 6fb01345df287c0d --- ## Four projects side by side type: comparison span: 3 from: projects/chart-storyboard-builder/README.md, projects/chart-storyboard-builder/solution/cli.py, projects/diagram-reading-companion/README.md, projects/diagram-reading-companion/solution/cli.ts, projects/infrastructure-plan-explainer/README.md, projects/infrastructure-plan-explainer/solution/cli.py, projects/service-ownership-navigator/README.md, projects/service-ownership-navigator/solution/cli.ts | Factor | Chart Storyboard Builder | Diagram Reading Companion | Infrastructure Plan Explainer | Service Ownership Navigator | |---|---|---|---|---| | Language | Python 3.10+ | Node 22.18 or newer | Python 3.10+ | Node 22.18 or newer | | Input | `csv`, `roles`, `periods`, `charts` | `svg`, `graph` | Terraform plan JSON | `catalog`, `path` | | Outputs | `chart-N.svg`, `chart-specs.json`, `storyboard.html` | `graph.json`, `analysis.json`, `report.html` | `change-brief.md`, `resource-impact.json`, `review.html` | `handoff.json`, `catalog.json`, `report.html` | | Review file | none | third argument, reviewed order | none | none | | Never does | Infer dates or causation | Read meaning from SVG geometry | Apply a plan | Send notifications | ## Run the reference type: command-table from: projects/chart-storyboard-builder/README.md, projects/infrastructure-plan-explainer/README.md, projects/diagram-reading-companion/README.md, projects/service-ownership-navigator/README.md, projects/diagram-reading-companion/solution/cli.ts | Command | What it does | |---|---| | `python3 cli.py samples/input.json --output demo-output` | Chart or infrastructure sample | | `node cli.ts sample.json output` | Diagram or ownership sample | | `node cli.ts ` | Diagram with your reviewed order | | `node cli.ts --help` | Prints the argument line | | `python3 scripts/project_test.py --all --solution --strict` | Grades the reference | | `python3 scripts/project_test.py --init ` | Makes a starter | ## Explain a real Terraform plan type: annotated-code lang: bash from: projects/infrastructure-plan-explainer/README.md, projects/infrastructure-plan-explainer/solution/cli.py ```bash terraform show -json saved.plan > input.json # saved plan as JSON python3 cli.py input.json --output review # never applies the plan # review/change-brief.md addresses with local anchors # review/resource-impact.json graph.edges and resources # review/review.html changes, edges, unresolved ``` ## Plan explainer pipeline type: flow from: projects/infrastructure-plan-explainer/API.md, projects/infrastructure-plan-explainer/solution/main.py 1. **load_plan**: accepts only format major 1. It keeps actions and masked `before` and `after`. 2. **load_plan**: shows sensitive values as `[sensitive]` and computed values as `[unknown]`. 3. **classify**: maps each exact action sequence to one action name. 4. **impact_graph**: links references and `depends_on` by the longest address prefix. 5. **impact_graph**: skips `var`, `local`, `path`, `count`, `each`, `terraform` and `self`. 6. **explain**: writes Markdown with one anchor per address and the declared dependencies. ## Action sequences type: command-table from: projects/infrastructure-plan-explainer/solution/main.py, projects/infrastructure-plan-explainer/API.md | Command | What it does | |---|---| | `["create"]` | create | | `["update"]` | update, in place | | `["delete", "create"]` | replace | | `["create", "delete"]` | replace | | `["delete"]` | delete | | `["read"]`, `["no-op"]`, `["forget"]` | read, no-op, forget | | any other list | `unsupported action sequence` | ## Diagram companion type: architecture from: projects/diagram-reading-companion/solution/main.ts, projects/diagram-reading-companion/solution/cli.ts ```arch node | in | 1,1 | sample.json | svg, graph | client node | load | 2,1 | loadDiagram() | node ids must be SVG ids | process node | an | 3,1 | analyzeGraph() | order, branches, cycles | process node | rev | 3,2 | reviewGraph() | order, reviewed | process node | graph | 2,2 | graph.json | reviewed manifest | store node | html | 1,2 | report.html | keyboard walkthrough | store edge | in | load | svg, graph edge | load | an | graph edge | an | rev | order edge | rev | graph | save edge | graph | html | render ``` ## Chart rules type: concepts from: projects/chart-storyboard-builder/API.md, projects/chart-storyboard-builder/solution/main.py, projects/chart-storyboard-builder/README.md - **roles**: `group`, `value` and `unit` name CSV columns and a display unit. - **Reducers**: `sum`, `mean` and `count`. Count uses nonblank values, unit `records`. - **Grammar**: `bar` for categories, `line` for ordered periods. - **Blank value**: it is missing, not zero. A line breaks there. - **periods**: set the order. An absent period plots as null. - **Axis**: always includes zero. - **Annotation**: needs a plotted point. The text gets the exact value and unit. ## Ownership rules type: concepts from: projects/service-ownership-navigator/solution/main.ts, projects/service-ownership-navigator/README.md - **Last match wins**: the last matching rule sets the effective owners. - **Anchored**: a pattern that starts with `/` or holds a `/` matches from the root. - **Wildcards**: `*` stays in one segment, `**/` spans folders, `?` is one character. - **Directory**: a trailing `/` matches the folder and all below it. - **Service**: the longest service `root` that holds the path. - **Owners**: `@user` or `@org/team` names only. - **Runbook links**: local links must point to a supplied runbook file. ## Defaults and limits type: defaults from: projects/chart-storyboard-builder/solution/main.py, projects/chart-storyboard-builder/solution/cli.py, projects/diagram-reading-companion/solution/main.ts, projects/service-ownership-navigator/solution/main.ts, projects/diagram-reading-companion/solution/cli.ts, projects/infrastructure-plan-explainer/solution/main.py | Setting | Default | Note | |---|---|---| | `reducer` | `sum` | Per chart in `charts` | | `grammar` | `bar` | Or `line` | | `schema_version` | 1 | Chart specs and plan brief | | SVG size | 500000 | Characters at most | | Rule source | `CODEOWNERS` | Name in the evidence rows | | Output folder | `output` | Second argument of the Node CLIs | | Chart width | 640 | Minimum SVG width in pixels | ## Error messages and fixes type: troubleshooting from: projects/infrastructure-plan-explainer/solution/main.py, projects/chart-storyboard-builder/solution/main.py, projects/diagram-reading-companion/solution/main.ts, projects/service-ownership-navigator/solution/main.ts | Symptom | Cause | Fix | |---|---|---| | `unsupported Terraform JSON format major` | Not a `terraform show -json` file | Export the saved plan as JSON | | `periods omit data or duplicate a group` | A data group is not in `periods` | List every group once | | `annotation needs a unique plotted point` | Note on a blank or unknown group | Annotate a point with a value | | `Node missing from SVG or duplicated` | Manifest id has no SVG `id` | Add the `id` to the SVG element | | `Unsupported SVG element` | Tag outside the safe subset | Use shapes, text, `g`, `title`, `desc` | | `Review order must contain every node exactly once` | Old or partial order | List each node id one time | | `Earlier matching rules name different owners; last matching rule wins` | Rules overlap | Check the last rule is right | | `Missing local runbook link` | Runbook links a file not supplied | Add the file to `runbooks` | ## Worked examples type: qa from: projects/chart-storyboard-builder/solution/samples/input.json, projects/chart-storyboard-builder/README.md, projects/infrastructure-plan-explainer/solution/samples/input.json, projects/infrastructure-plan-explainer/README.md, projects/service-ownership-navigator/solution/sample.json, projects/diagram-reading-companion/solution/sample.json - **What does W1 plot with sum?** 18. Its rows hold 8 and 10. - **What happens to W2 and W3?** W2 is blank and W3 is absent. Both plot as missing. - **Why is the database a replace?** Its actions are `delete` then `create`. - **What does the brief show for the password?** `[sensitive]`, also inside arrays. - **Who owns `services/images/cache/store.ts`?** `@fictional/cache`, from the last rule. - **Where does the diagram branch?** At `check`, to `share` and `clarify`. ## Tips type: tips from: projects/infrastructure-plan-explainer/README.md, projects/infrastructure-plan-explainer/API.md, projects/diagram-reading-companion/README.md, projects/chart-storyboard-builder/API.md, projects/service-ownership-navigator/README.md - Graph edges are declared dependencies, not the provider execution order. - The plan tool does not predict outage time, cost or full execution order. - A reading order is a candidate for review, not a proof of pedagogy. - Chart SVGs carry `title` and `desc` and no JavaScript. - The ownership format is a local subset, not the full CODEOWNERS format.