@trohde/earos 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -28
- package/assets/init/.agents/skills/earos-assess/SKILL.md +1 -0
- package/assets/init/.agents/skills/earos-assess/references/output-templates.md +2 -0
- package/assets/init/.agents/skills/earos-report/references/portfolio-template.md +6 -6
- package/assets/init/.agents/skills/earos-report/references/single-artifact-template.md +3 -3
- package/assets/init/docs/getting-started.md +4 -0
- package/assets/init/docs/onboarding/agent-assisted.md +2 -0
- package/assets/init/docs/onboarding/first-assessment.md +2 -0
- package/assets/init/docs/onboarding/governed-review.md +2 -0
- package/assets/init/docs/onboarding/overview.md +2 -0
- package/assets/init/docs/plans/2026-03-23-003-feat-excalidraw-diagrams-for-site-docs-plan.md +144 -0
- package/assets/init/docs/solutions/tools/excal-cli-excalidraw-diagrams.md +150 -0
- package/assets/init/examples/aws-event-driven-order-processing/artifact.yaml +60 -60
- package/assets/init/examples/aws-event-driven-order-processing/evaluation.yaml +19 -0
- package/assets/init/examples/example-solution-architecture.evaluation.yaml +5 -0
- package/assets/init/standard/EAROS.md +2 -0
- package/assets/init/standard/schemas/evaluation.schema.json +23 -1
- package/assets/init/templates/evaluation-record.template.yaml +1 -0
- package/dist/assets/{_basePickBy-BlC_TeV6.js → _basePickBy-HRglH9_D.js} +1 -1
- package/dist/assets/{_baseUniq-CVy7rcC1.js → _baseUniq-B-el2xiK.js} +1 -1
- package/dist/assets/{arc-Cd8wvd7z.js → arc-DCCiWvpS.js} +1 -1
- package/dist/assets/{architectureDiagram-2XIMDMQ5-D_f4_aMp.js → architectureDiagram-2XIMDMQ5-BLW1Psh0.js} +1 -1
- package/dist/assets/{blockDiagram-WCTKOSBZ-B-y6N5--.js → blockDiagram-WCTKOSBZ-76dKbaCe.js} +1 -1
- package/dist/assets/{c4Diagram-IC4MRINW-C3-v3oNT.js → c4Diagram-IC4MRINW-KvbJR2lT.js} +1 -1
- package/dist/assets/channel-CHnLOc20.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-CMPwQN83.js → chunk-4BX2VUAB-BkwFPK_x.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-Bdkfhvrr.js → chunk-55IACEB6-BJPQTA4l.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-ptKQX5uF.js → chunk-FMBD7UC4-BTOCpuFV.js} +1 -1
- package/dist/assets/{chunk-JSJVCQXG-DO0UU_OX.js → chunk-JSJVCQXG-82cdN1ai.js} +1 -1
- package/dist/assets/{chunk-KX2RTZJC-DRj2OZnD.js → chunk-KX2RTZJC-B5I2jJFP.js} +1 -1
- package/dist/assets/{chunk-NQ4KR5QH-C4Nsf7ww.js → chunk-NQ4KR5QH-DcLpiW0C.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-B1GO0Nwy.js → chunk-QZHKN3VN-guwO7UzN.js} +1 -1
- package/dist/assets/{chunk-WL4C6EOR-lFR6fjR8.js → chunk-WL4C6EOR-D-rebYeP.js} +1 -1
- package/dist/assets/classDiagram-VBA2DB6C-DBR69_yw.js +1 -0
- package/dist/assets/classDiagram-v2-RAHNMMFH-DBR69_yw.js +1 -0
- package/dist/assets/clone-DHq7LHTD.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-IpR9mVIO.js → cose-bilkent-S5V4N54A-B5vtg_ms.js} +1 -1
- package/dist/assets/{dagre-KLK3FWXG-B4YA6T7N.js → dagre-KLK3FWXG-hBk_bxjm.js} +1 -1
- package/dist/assets/{diagram-E7M64L7V-Do5l6es_.js → diagram-E7M64L7V-Bk-H_CVO.js} +1 -1
- package/dist/assets/{diagram-IFDJBPK2-D5MxfKVv.js → diagram-IFDJBPK2-BugehwKx.js} +1 -1
- package/dist/assets/{diagram-P4PSJMXO-Djr28EgW.js → diagram-P4PSJMXO-CNEv2a0x.js} +1 -1
- package/dist/assets/{erDiagram-INFDFZHY-BuM-rbCL.js → erDiagram-INFDFZHY-P0-yYcfO.js} +1 -1
- package/dist/assets/{flowDiagram-PKNHOUZH-By3WGI7Q.js → flowDiagram-PKNHOUZH-CSG3KYwj.js} +1 -1
- package/dist/assets/{ganttDiagram-A5KZAMGK-GLmBfK72.js → ganttDiagram-A5KZAMGK-B6I0izbI.js} +1 -1
- package/dist/assets/{gitGraphDiagram-K3NZZRJ6-BN0iXeIv.js → gitGraphDiagram-K3NZZRJ6-DU9SqHkb.js} +1 -1
- package/dist/assets/{graph-CDzuMtjV.js → graph-C65heg42.js} +1 -1
- package/dist/assets/{index-DoeSN_Oe.js → index-Q21gvgf4.js} +124 -124
- package/dist/assets/{infoDiagram-LFFYTUFH-C888gaFw.js → infoDiagram-LFFYTUFH-CkQ3Su5g.js} +1 -1
- package/dist/assets/{ishikawaDiagram-PHBUUO56-ChIO9DG-.js → ishikawaDiagram-PHBUUO56-CdxqubV5.js} +1 -1
- package/dist/assets/{journeyDiagram-4ABVD52K-CufMUDcs.js → journeyDiagram-4ABVD52K-OXhBQ3bn.js} +1 -1
- package/dist/assets/{kanban-definition-K7BYSVSG-BpsSVpX8.js → kanban-definition-K7BYSVSG-DP8duR41.js} +1 -1
- package/dist/assets/{layout-B8RWVBSF.js → layout-CvhKY5OS.js} +1 -1
- package/dist/assets/{linear-BJwxtq9r.js → linear-Dl7AA5z5.js} +1 -1
- package/dist/assets/{mindmap-definition-YRQLILUH-C6WPimbf.js → mindmap-definition-YRQLILUH-CRYTXa0H.js} +1 -1
- package/dist/assets/{pieDiagram-SKSYHLDU-DeCGMWf8.js → pieDiagram-SKSYHLDU-qo29I_dD.js} +1 -1
- package/dist/assets/{quadrantDiagram-337W2JSQ-D9TWaS83.js → quadrantDiagram-337W2JSQ-BJOPm7QN.js} +1 -1
- package/dist/assets/{requirementDiagram-Z7DCOOCP-DTnuXlAq.js → requirementDiagram-Z7DCOOCP-BYdv2aTu.js} +1 -1
- package/dist/assets/{sankeyDiagram-WA2Y5GQK-B2dplCgD.js → sankeyDiagram-WA2Y5GQK-C5iHU5yd.js} +1 -1
- package/dist/assets/{sequenceDiagram-2WXFIKYE-cBvgSSju.js → sequenceDiagram-2WXFIKYE-C0ED4Z5P.js} +1 -1
- package/dist/assets/{stateDiagram-RAJIS63D-Cwr7VtSX.js → stateDiagram-RAJIS63D-GLsrTY04.js} +1 -1
- package/dist/assets/stateDiagram-v2-FVOUBMTO-C5144TtB.js +1 -0
- package/dist/assets/{timeline-definition-YZTLITO2-Dkp163fK.js → timeline-definition-YZTLITO2-aqU_QdmO.js} +1 -1
- package/dist/assets/{treemap-KZPCXAKY-BUWHa5xU.js → treemap-KZPCXAKY-CWswAMrV.js} +1 -1
- package/dist/assets/{vennDiagram-LZ73GAT5-BihD66ma.js → vennDiagram-LZ73GAT5-C3b2ZyP2.js} +1 -1
- package/dist/assets/{xychartDiagram-JWTSCODW-Cw4lPbuZ.js → xychartDiagram-JWTSCODW-P0pbwSKC.js} +1 -1
- package/dist/index.html +1 -1
- package/export-docx.js +5 -2
- package/package.json +1 -1
- package/schemas/evaluation.schema.json +23 -1
- package/utils/criterion-questions.js +100 -0
- package/dist/assets/channel-BSC0F15G.js +0 -1
- package/dist/assets/classDiagram-VBA2DB6C-BHDWMOEz.js +0 -1
- package/dist/assets/classDiagram-v2-RAHNMMFH-BHDWMOEz.js +0 -1
- package/dist/assets/clone-BdN-3iAD.js +0 -1
- package/dist/assets/stateDiagram-v2-FVOUBMTO-B59h7VTZ.js +0 -1
package/README.md
CHANGED
|
@@ -29,21 +29,18 @@ Override download URLs with environment variables if needed:
|
|
|
29
29
|
|
|
30
30
|
## What `earos init` Creates
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
├── earos.manifest.yaml Single source of truth — inventory of all rubric files
|
|
45
|
-
└── AGENTS.md Project guide for AI agents (agent-agnostic)
|
|
46
|
-
```
|
|
32
|
+
| Path | Purpose |
|
|
33
|
+
|------|---------|
|
|
34
|
+
| `core/` | Core meta-rubric — universal foundation, 9 dimensions |
|
|
35
|
+
| `profiles/` | Artifact-specific profiles (5 bundled: solution-architecture, reference-architecture, adr, capability-map, roadmap) |
|
|
36
|
+
| `overlays/` | Cross-cutting overlays (3 bundled: security, data-governance, regulatory) |
|
|
37
|
+
| `standard/schemas/` | JSON schemas for rubrics, evaluations, and artifacts |
|
|
38
|
+
| `templates/` | Blank scaffolds for new profiles and evaluations |
|
|
39
|
+
| `evaluations/` | Your evaluation records go here |
|
|
40
|
+
| `calibration/` | Calibration artifacts and results |
|
|
41
|
+
| `.agents/skills/` | 10 EaROS skills for any AI coding agent |
|
|
42
|
+
| `earos.manifest.yaml` | Single source of truth — inventory of all rubric files |
|
|
43
|
+
| `AGENTS.md` | Project guide for AI agents (agent-agnostic) |
|
|
47
44
|
|
|
48
45
|
The workspace is **agent-agnostic** — the `.agents/skills/` directory works with any AI coding agent that reads skill files (Claude Code, Cursor, Copilot Workspace, and others).
|
|
49
46
|
|
|
@@ -116,19 +113,7 @@ See the [EaROS repository](https://github.com/ThomasRohde/EAROS) for full skill
|
|
|
116
113
|
|
|
117
114
|
EaROS uses a **three-layer model**:
|
|
118
115
|
|
|
119
|
-
|
|
120
|
-
┌─────────────────────────────────────────────────────┐
|
|
121
|
-
│ OVERLAYS — cross-cutting concerns │
|
|
122
|
-
│ security · data-governance · regulatory │
|
|
123
|
-
├─────────────────────────────────────────────────────┤
|
|
124
|
-
│ PROFILES — artifact-specific extensions │
|
|
125
|
-
│ solution-architecture · reference-architecture │
|
|
126
|
-
│ adr · capability-map · roadmap │
|
|
127
|
-
├─────────────────────────────────────────────────────┤
|
|
128
|
-
│ CORE — universal foundation (always applied) │
|
|
129
|
-
│ 9 dimensions · 10 criteria │
|
|
130
|
-
└─────────────────────────────────────────────────────┘
|
|
131
|
-
```
|
|
116
|
+

|
|
132
117
|
|
|
133
118
|
**Scoring** uses a 0–4 ordinal scale (0 = Absent → 4 = Strong) with explicit gate types that prevent weak scores from being hidden by weighted averages:
|
|
134
119
|
|
|
@@ -55,12 +55,14 @@ overall_score: [weighted average to 1 decimal place — e.g. 2.8]
|
|
|
55
55
|
|
|
56
56
|
gate_failures:
|
|
57
57
|
- criterion_id: [ID]
|
|
58
|
+
criterion_question: "[full question text from the rubric]"
|
|
58
59
|
severity: [critical | major]
|
|
59
60
|
effect: [what the gate failure causes]
|
|
60
61
|
# If no gate failures: gate_failures: []
|
|
61
62
|
|
|
62
63
|
criterion_results:
|
|
63
64
|
- criterion_id: [ID]
|
|
65
|
+
criterion_question: "[full question text from the rubric]"
|
|
64
66
|
# Use IDs from the rubric YAML, e.g. STK-01, SCP-01, TRC-01
|
|
65
67
|
score: [0 | 1 | 2 | 3 | 4 | "N/A"]
|
|
66
68
|
evidence_class: [observed | inferred | external]
|
|
@@ -72,9 +72,9 @@ Use this template when generating a report covering 2 or more EAROS evaluation r
|
|
|
72
72
|
|
|
73
73
|
[If gate failures present:]
|
|
74
74
|
|
|
75
|
-
| Criterion | Gate Severity | Artifacts Failed | Failure Rate | Status Effect |
|
|
76
|
-
|
|
77
|
-
| [ID] | [critical/major] | [N] ([list artifact names]) | [%] | [reject/cap at conditional_pass] |
|
|
75
|
+
| Criterion | Name | Gate Severity | Artifacts Failed | Failure Rate | Status Effect |
|
|
76
|
+
|-----------|------|--------------|-----------------|-------------|---------------|
|
|
77
|
+
| [ID] | [criterion question] | [critical/major] | [N] ([list artifact names]) | [%] | [reject/cap at conditional_pass] |
|
|
78
78
|
| ... | | | | |
|
|
79
79
|
|
|
80
80
|
**Systemic gate failures** (criterion failing in ≥30% of artifacts):
|
|
@@ -161,9 +161,9 @@ Use this template when generating a report covering 2 or more EAROS evaluation r
|
|
|
161
161
|
|
|
162
162
|
*Score distribution across all artifacts by criterion.*
|
|
163
163
|
|
|
164
|
-
| Criterion | Avg | [Art 1] | [Art 2] | [Art 3] | ... |
|
|
165
|
-
|
|
166
|
-
| [ID] | [avg] | [score] | [score] | [score] | |
|
|
164
|
+
| Criterion | Name | Avg | [Art 1] | [Art 2] | [Art 3] | ... |
|
|
165
|
+
|-----------|------|-----|---------|---------|---------|-----|
|
|
166
|
+
| [ID] | [criterion question] | [avg] | [score] | [score] | [score] | |
|
|
167
167
|
| ... | | | | | |
|
|
168
168
|
|
|
169
169
|
**Colour key:** 🟢 Score ≥3 | 🟡 Score 2 | 🟠 Score 1 | 🔴 Score 0 | — N/A
|
|
@@ -96,9 +96,9 @@ Actions are ordered by priority. Gate-related actions must be addressed before r
|
|
|
96
96
|
|
|
97
97
|
## Detailed Criterion Results
|
|
98
98
|
|
|
99
|
-
| Criterion | Dimension | Score | Conf. | Evidence Class | N/A Reason |
|
|
100
|
-
|
|
101
|
-
| [ID] | [dim] | [0-4/N/A] | [H/M/L] | [obs/inf/ext] | [if N/A: reason] |
|
|
99
|
+
| Criterion | Name | Dimension | Score | Conf. | Evidence Class | N/A Reason |
|
|
100
|
+
|-----------|------|-----------|-------|-------|---------------|------------|
|
|
101
|
+
| [ID] | [criterion question] | [dim] | [0-4/N/A] | [H/M/L] | [obs/inf/ext] | [if N/A: reason] |
|
|
102
102
|
| ... | | | | | |
|
|
103
103
|
|
|
104
104
|
---
|
|
@@ -32,6 +32,8 @@ If your artifact does not match any profile, apply only the core rubric. The cor
|
|
|
32
32
|
|
|
33
33
|
## Step 2: Select Your Rubric Set
|
|
34
34
|
|
|
35
|
+

|
|
36
|
+
|
|
35
37
|
Every assessment starts with the core and adds a profile, plus any applicable overlays.
|
|
36
38
|
|
|
37
39
|
**Minimum (core only):**
|
|
@@ -110,6 +112,8 @@ Gate criteria represent non-negotiable minimums on their respective concern. A c
|
|
|
110
112
|
|
|
111
113
|
## Step 7: Determine the Status
|
|
112
114
|
|
|
115
|
+

|
|
116
|
+
|
|
113
117
|
The scoring sheet calculates the weighted dimension average automatically. Read the status from the aggregation tab:
|
|
114
118
|
|
|
115
119
|
| Weighted Average | Status |
|
|
@@ -12,6 +12,8 @@ At Level 3, human reviewers follow the RULERS protocol with calibrated judgment.
|
|
|
12
12
|
|
|
13
13
|
Agent evaluations follow an 8-step directed acyclic graph (DAG). Each step must complete before the next begins. No steps may be skipped.
|
|
14
14
|
|
|
15
|
+

|
|
16
|
+
|
|
15
17
|
### The 8-Step DAG Evaluation Flow
|
|
16
18
|
|
|
17
19
|
**Step 1 — Structural Validation.** The agent confirms the artifact conforms to its declared type. Does it have the expected sections? Is it machine-readable or does it require OCR? Can the agent identify the artifact's scope and purpose?
|
|
@@ -110,6 +110,8 @@ In the core rubric, two criteria have **critical** gates: **SCP-01** (Scope and
|
|
|
110
110
|
|
|
111
111
|
## Interpreting Your Results
|
|
112
112
|
|
|
113
|
+

|
|
114
|
+
|
|
113
115
|
After scoring all criteria and checking gates, compute the weighted average across dimensions and apply the status thresholds:
|
|
114
116
|
|
|
115
117
|
| Status | Threshold |
|
|
@@ -77,6 +77,8 @@ Observed evidence is always preferred. If you find yourself relying heavily on i
|
|
|
77
77
|
|
|
78
78
|
## The Three Evaluation Types
|
|
79
79
|
|
|
80
|
+

|
|
81
|
+
|
|
80
82
|
EAROS distinguishes three distinct judgment types that should not be collapsed into a single opaque score:
|
|
81
83
|
|
|
82
84
|
| Type | Question It Answers | Example |
|
|
@@ -15,6 +15,8 @@ EAROS applies these lessons to a specific domain: architecture artifact evaluati
|
|
|
15
15
|
|
|
16
16
|
## The Five Levels
|
|
17
17
|
|
|
18
|
+

|
|
19
|
+
|
|
18
20
|
### Level 1 — Ad Hoc
|
|
19
21
|
|
|
20
22
|
No formal review process. Evaluation quality depends entirely on who happens to review the artifact. Different reviewers apply different mental models, and feedback is inconsistent and unreproducible.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Add Excalidraw diagrams to site documentation"
|
|
3
|
+
type: feat
|
|
4
|
+
status: tier1-complete
|
|
5
|
+
date: 2026-03-23
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Add Excalidraw diagrams to site documentation
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
The EaROS documentation site renders markdown content on GitHub Pages. Several key concepts — evaluation flows, rubric composition, gate logic, maturity levels — are abstract enough that text and tables alone leave readers to build their own mental model. Excalidraw SVG diagrams can make these concepts immediately visual without adding build complexity.
|
|
13
|
+
|
|
14
|
+
The `excal` CLI workflow is already established (see `docs/solutions/tools/excal-cli-excalidraw-diagrams.md`) and one diagram is live (`site/public/diagrams/earos-layers.svg`). This plan identifies the highest-value opportunities and sequences them.
|
|
15
|
+
|
|
16
|
+
## Approach
|
|
17
|
+
|
|
18
|
+
Create `.excalidraw` source files, render to SVG with `excal render --svg --no-background`, place in `site/public/diagrams/`, and embed in the relevant markdown via full GitHub Pages URL. Commit both source and rendered output.
|
|
19
|
+
|
|
20
|
+
All diagrams follow the established style: `roughness: 1` (handwritten), `fontFamily: 1` (Virgil), pastel fills, transparent backgrounds.
|
|
21
|
+
|
|
22
|
+
## Diagram Opportunities
|
|
23
|
+
|
|
24
|
+
### Tier 1 — Highest impact (abstract concepts, most benefit from visualisation)
|
|
25
|
+
|
|
26
|
+
These five diagrams address the most complex or frequently misunderstood parts of the framework.
|
|
27
|
+
|
|
28
|
+
#### 1. Eight-step DAG evaluation flow
|
|
29
|
+
- **Doc:** `docs/onboarding/agent-assisted.md` (lines 13–33)
|
|
30
|
+
- **What:** Eight sequential boxes with arrows showing the evaluation pipeline: Structural Validation → Content Extraction → Criterion Scoring → Cross-Reference Validation → Dimension Aggregation → Challenge Pass → Calibration → Status Determination.
|
|
31
|
+
- **Why:** This is the single most abstract concept in the docs. The sequential ordering and the "challenge pass bottleneck" are frequently misunderstood. A Mermaid version exists in the repo README but is not rendered on the site docs page.
|
|
32
|
+
- **Elements:** 8 rectangles (numbered), directional arrows, annotation callout on Challenge Pass ("most commonly skipped").
|
|
33
|
+
- **File:** `site/public/diagrams/dag-evaluation-flow.excalidraw`
|
|
34
|
+
|
|
35
|
+
#### 2. Status determination decision tree
|
|
36
|
+
- **Docs:** `standard/EAROS.md` (lines 238–259), `docs/getting-started.md` (lines 111–123), `docs/onboarding/first-assessment.md` (lines 111–122)
|
|
37
|
+
- **What:** Flowchart showing gate-first logic: check critical gates → if fail, Reject/Not Reviewable (stop). Otherwise compute weighted average → ≥ 3.2 Pass, 2.4–3.19 Conditional Pass, < 2.4 Rework Required.
|
|
38
|
+
- **Why:** The two-phase logic (gates first, then thresholds) is the core of the scoring model and is easy to get wrong from text alone.
|
|
39
|
+
- **Elements:** Diamond decision nodes for gate checks, rectangle outcome nodes colour-coded by status (green/yellow/orange/red), threshold labels on arrows.
|
|
40
|
+
- **File:** `site/public/diagrams/status-determination.excalidraw`
|
|
41
|
+
- **Reuse:** Embed in all three docs that describe status determination.
|
|
42
|
+
|
|
43
|
+
#### 3. Rubric composition model
|
|
44
|
+
- **Doc:** `docs/getting-started.md` (lines 33–57)
|
|
45
|
+
- **What:** Visual showing how Core + Profile + Overlays stack to form a complete rubric set. Example scenario: "Evaluating a payment service architecture" → Core (always) + Solution-Architecture profile + Security overlay + Regulatory overlay.
|
|
46
|
+
- **Why:** The three-layer concept is central to EaROS. The existing `earos-layers.svg` shows the layers but not how a practitioner *assembles* them for a specific evaluation.
|
|
47
|
+
- **Elements:** Three layer blocks (core at bottom, profile in middle, overlays on top), example artifact callout on the left, arrows showing selection.
|
|
48
|
+
- **File:** `site/public/diagrams/rubric-composition.excalidraw`
|
|
49
|
+
|
|
50
|
+
#### 4. Maturity progression with capability stacking
|
|
51
|
+
- **Doc:** `docs/onboarding/overview.md` (lines 16–64)
|
|
52
|
+
- **What:** Five levels shown as ascending blocks. Each level adds capabilities on top of the previous: Level 1 (Ad Hoc) → Level 2 (Rubric-Based: add core rubric, scoring, evidence) → Level 3 (Governed: add profiles, overlays, calibration) → Level 4 (Hybrid: add AI agents, challenge pass) → Level 5 (Optimised: add CI/CD, continuous calibration).
|
|
53
|
+
- **Why:** The site renders this as a stepper component, but the capability *accumulation* is invisible. A stacked diagram shows what's new at each level.
|
|
54
|
+
- **Elements:** 5 horizontal bars of increasing width, each labelled with what's added, arrow showing progression.
|
|
55
|
+
- **File:** `site/public/diagrams/maturity-levels.excalidraw`
|
|
56
|
+
|
|
57
|
+
#### 5. Three evaluation lenses
|
|
58
|
+
- **Doc:** `docs/onboarding/governed-review.md` (lines 78–90)
|
|
59
|
+
- **What:** Three overlapping circles (or three columns) showing: Artifact Quality (completeness, coherence, clarity), Architectural Fitness (soundness, quality attributes, risks), Governance Fit (compliance, controls, review expectations).
|
|
60
|
+
- **Why:** Reviewers often conflate these perspectives. A diagram showing them as distinct but complementary lenses sharpens evaluation quality.
|
|
61
|
+
- **Elements:** Three labelled regions with key concerns listed inside each.
|
|
62
|
+
- **File:** `site/public/diagrams/evaluation-lenses.excalidraw`
|
|
63
|
+
|
|
64
|
+
### Tier 2 — Medium impact (process flows, relationships)
|
|
65
|
+
|
|
66
|
+
#### 6. Calibration workflow loop
|
|
67
|
+
- **Doc:** `docs/onboarding/governed-review.md` (lines 94–122)
|
|
68
|
+
- **What:** 7-step calibration process with a feedback loop: Select artifacts → Score independently → Compare → Identify disagreements → Resolve → Compute κ → Update decision trees → (loop back).
|
|
69
|
+
- **File:** `site/public/diagrams/calibration-workflow.excalidraw`
|
|
70
|
+
|
|
71
|
+
#### 7. Hybrid evaluation model
|
|
72
|
+
- **Doc:** `docs/onboarding/agent-assisted.md` (lines 71–87)
|
|
73
|
+
- **What:** Side-by-side comparison: Human path (contextual judgment) ↔ AI path (consistency, coverage) → Reconciliation centre → Final evaluation record.
|
|
74
|
+
- **File:** `site/public/diagrams/hybrid-model.excalidraw`
|
|
75
|
+
|
|
76
|
+
#### 8. CI/CD integration pipeline
|
|
77
|
+
- **Doc:** `docs/onboarding/scaling-optimization.md` (lines 11–31)
|
|
78
|
+
- **What:** Pipeline diagram: Architecture artifact modified → PR/MR → EAROS evaluation triggered → colour-coded outcomes (red: blocked, yellow: conditional, green: clean merge).
|
|
79
|
+
- **File:** `site/public/diagrams/cicd-pipeline.excalidraw`
|
|
80
|
+
|
|
81
|
+
#### 9. Profile selection matrix
|
|
82
|
+
- **Doc:** `docs/onboarding/governed-review.md` (lines 17–33)
|
|
83
|
+
- **What:** Artifact type → profile mapping with visual callouts showing what each profile adds.
|
|
84
|
+
- **File:** `site/public/diagrams/profile-selection.excalidraw`
|
|
85
|
+
|
|
86
|
+
#### 10. Continuous calibration feedback loop
|
|
87
|
+
- **Doc:** `docs/onboarding/scaling-optimization.md` (lines 33–48)
|
|
88
|
+
- **What:** Circular flow: Evaluations → Score distribution tracking → Wasserstein distance → Threshold check → Recalibration (if needed) → (loop).
|
|
89
|
+
- **File:** `site/public/diagrams/continuous-calibration.excalidraw`
|
|
90
|
+
|
|
91
|
+
### Tier 3 — Clarification (helpful but lower priority)
|
|
92
|
+
|
|
93
|
+
#### 11. Nine dimensions grid
|
|
94
|
+
- **Doc:** `docs/onboarding/first-assessment.md` (lines 48–64)
|
|
95
|
+
- **What:** 3×3 visual grid of the 9 core dimensions, with gate indicators.
|
|
96
|
+
- **File:** `site/public/diagrams/nine-dimensions.excalidraw`
|
|
97
|
+
|
|
98
|
+
#### 12. Gate severity hierarchy
|
|
99
|
+
- **Doc:** `docs/onboarding/first-assessment.md` (lines 97–109)
|
|
100
|
+
- **What:** Three-level severity stack: Advisory → Major → Critical, with effects.
|
|
101
|
+
- **File:** `site/public/diagrams/gate-hierarchy.excalidraw`
|
|
102
|
+
|
|
103
|
+
#### 13. Evidence extraction workflow
|
|
104
|
+
- **Doc:** `docs/getting-started.md` (lines 81–99)
|
|
105
|
+
- **What:** 5-box flow: Find evidence → Record citation → Match to scoring guide → Assign score → Flag uncertainty.
|
|
106
|
+
- **File:** `site/public/diagrams/evidence-workflow.excalidraw`
|
|
107
|
+
|
|
108
|
+
#### 14. Overlay selection triggers
|
|
109
|
+
- **Doc:** `docs/onboarding/governed-review.md` (lines 35–49)
|
|
110
|
+
- **What:** Decision tree for when to apply each overlay (Security, Data Governance, Regulatory).
|
|
111
|
+
- **File:** `site/public/diagrams/overlay-selection.excalidraw`
|
|
112
|
+
|
|
113
|
+
#### 15. Profile creation workflow
|
|
114
|
+
- **Doc:** `docs/onboarding/scaling-optimization.md` (lines 51–69), `docs/profile-authoring-guide.md` (lines 14–22)
|
|
115
|
+
- **What:** 6-step design method selection with decision points.
|
|
116
|
+
- **File:** `site/public/diagrams/profile-creation.excalidraw`
|
|
117
|
+
|
|
118
|
+
## Acceptance Criteria
|
|
119
|
+
|
|
120
|
+
- [ ] Tier 1 diagrams (5) created, validated, rendered, and embedded in their docs
|
|
121
|
+
- [ ] Each diagram follows style conventions: roughness 1, Virgil font, pastel fills, transparent background
|
|
122
|
+
- [ ] Both `.excalidraw` source and `.svg` output committed for every diagram
|
|
123
|
+
- [ ] SVGs embedded via full GitHub Pages URL for cross-platform rendering
|
|
124
|
+
- [ ] Site deployed and diagrams verified on live pages
|
|
125
|
+
- [ ] Tier 2 diagrams (5) created and embedded
|
|
126
|
+
- [ ] Tier 3 diagrams (5) created and embedded (stretch)
|
|
127
|
+
|
|
128
|
+
## Implementation Notes
|
|
129
|
+
|
|
130
|
+
- All diagrams live in `site/public/diagrams/` so the Deploy Site workflow picks them up automatically.
|
|
131
|
+
- The status determination diagram (#2) is reused across 3 docs — embed the same SVG URL in each.
|
|
132
|
+
- The Deploy Site workflow triggers on `site/**` and `docs/**` changes, so pushing diagrams + updated docs in the same commit triggers a single deploy.
|
|
133
|
+
- For complex diagrams (DAG flow, decision tree), consider using frames in Excalidraw to group related elements.
|
|
134
|
+
- Run `excal validate` on every `.excalidraw` file before rendering.
|
|
135
|
+
|
|
136
|
+
## Sequencing
|
|
137
|
+
|
|
138
|
+
Start with Tier 1 in order (DAG flow first — highest value, most complex). Each diagram is independent, so they can be done in parallel if needed. Tier 2 and 3 follow once Tier 1 is verified on the live site.
|
|
139
|
+
|
|
140
|
+
## Sources
|
|
141
|
+
|
|
142
|
+
- Excal CLI learning: `docs/solutions/tools/excal-cli-excalidraw-diagrams.md`
|
|
143
|
+
- Existing example: `site/public/diagrams/earos-layers.excalidraw` / `.svg`
|
|
144
|
+
- Style conventions: roughness 1, fontFamily 1, `--no-background`, pastel palette (#a5d8ff, #b2f2bb, #ffec99, #fcc2d7, #dee2e6)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Creating Excalidraw diagrams with the excal CLI"
|
|
3
|
+
category: tools
|
|
4
|
+
date: 2026-03-23
|
|
5
|
+
tags:
|
|
6
|
+
- excalidraw
|
|
7
|
+
- excal-cli
|
|
8
|
+
- svg
|
|
9
|
+
- diagrams
|
|
10
|
+
- documentation
|
|
11
|
+
component: "diagrams / documentation"
|
|
12
|
+
problem_type: technique
|
|
13
|
+
severity: low
|
|
14
|
+
resolved: true
|
|
15
|
+
resolution_type: workflow
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Purpose
|
|
19
|
+
|
|
20
|
+
`excal` is an agent-first CLI for creating, validating, and rendering Excalidraw diagrams. It produces resolution-independent SVGs that render identically across GitHub Pages, npmjs, VS Code preview, and any browser — unlike unicode art or ASCII diagrams, which depend on font support.
|
|
21
|
+
|
|
22
|
+
Use it whenever documentation needs a visual: architecture layers, data flows, component relationships, deployment topologies.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
### 1. Create an Excalidraw scene
|
|
27
|
+
|
|
28
|
+
Write a `.excalidraw` JSON file:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"type": "excalidraw",
|
|
33
|
+
"version": 2,
|
|
34
|
+
"elements": [ ... ],
|
|
35
|
+
"appState": { "viewBackgroundColor": "#ffffff" },
|
|
36
|
+
"files": {}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Elements include rectangles, ellipses, diamonds, arrows, lines, text, and images. Run `excal skill` for the full element reference.
|
|
41
|
+
|
|
42
|
+
### 2. Bound text (labels inside shapes)
|
|
43
|
+
|
|
44
|
+
To place text inside a rectangle:
|
|
45
|
+
|
|
46
|
+
- Rectangle: `"boundElements": [{ "id": "text-id", "type": "text" }]`
|
|
47
|
+
- Text: `"containerId": "rectangle-id"`
|
|
48
|
+
- Text `x` = `container.x + padding` (e.g., 20px)
|
|
49
|
+
- Text `y` = `container.y + (container.height - textHeight) / 2`
|
|
50
|
+
- Text `width` = `container.width - (2 × padding)`
|
|
51
|
+
- `"textAlign": "center"`, `"verticalAlign": "middle"`
|
|
52
|
+
|
|
53
|
+
**Critical:** Text `x` must be the **left edge** of the text area, not the center point. `textAlign: "center"` handles horizontal centering within the text width. Setting `x` to the container center pushes text to the right.
|
|
54
|
+
|
|
55
|
+
### 3. Style conventions
|
|
56
|
+
|
|
57
|
+
| Property | Value | Notes |
|
|
58
|
+
|----------|-------|-------|
|
|
59
|
+
| `roughness` | `1` | Handwritten/sketchy (project standard) |
|
|
60
|
+
| `fontFamily` | `1` | Virgil — Excalidraw's handwritten font |
|
|
61
|
+
| `fillStyle` | `"solid"` | Solid background fills |
|
|
62
|
+
| `strokeWidth` | `2` | Visible but not heavy |
|
|
63
|
+
| `roundness` | `{ "type": 3 }` | Rounded corners on rectangles |
|
|
64
|
+
|
|
65
|
+
Pastel fill palette:
|
|
66
|
+
|
|
67
|
+
| Colour | Hex | Use |
|
|
68
|
+
|--------|-----|-----|
|
|
69
|
+
| Blue | `#a5d8ff` | Primary / top layer |
|
|
70
|
+
| Green | `#b2f2bb` | Secondary / middle layer |
|
|
71
|
+
| Yellow | `#ffec99` | Tertiary / foundation layer |
|
|
72
|
+
| Pink | `#fcc2d7` | Alerts / warnings |
|
|
73
|
+
| Gray | `#dee2e6` | Neutral / background |
|
|
74
|
+
|
|
75
|
+
### 4. Validate
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
excal validate diagram.excalidraw
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Returns structured JSON. Check `result.valid` is `true` before rendering. Also validates frame references, bound text bindings, and arrow connections.
|
|
82
|
+
|
|
83
|
+
### 5. Render to SVG
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
excal render diagram.excalidraw --svg --no-background --outDir ./output
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Key flags:
|
|
90
|
+
|
|
91
|
+
| Flag | Purpose |
|
|
92
|
+
|------|---------|
|
|
93
|
+
| `--svg` | SVG output (default) |
|
|
94
|
+
| `--png` | PNG output (requires Playwright) |
|
|
95
|
+
| `--no-background` | Transparent background — required for dark-mode compatibility |
|
|
96
|
+
| `--dark-mode` | Render with dark theme |
|
|
97
|
+
| `--scale <n>` | Scale factor for PNG (default: 2) |
|
|
98
|
+
| `--frame <id\|name>` | Export a single frame |
|
|
99
|
+
| `--padding <n>` | Padding in pixels (default: 20) |
|
|
100
|
+
| `--dry-run` | Validate pipeline without writing files |
|
|
101
|
+
|
|
102
|
+
### 6. Embed in markdown
|
|
103
|
+
|
|
104
|
+
Use the full published URL for cross-platform rendering:
|
|
105
|
+
|
|
106
|
+
```markdown
|
|
107
|
+

|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Full URLs work on GitHub Pages, npm README pages, and VS Code preview. Relative paths resolve inconsistently across platforms.
|
|
111
|
+
|
|
112
|
+
### 7. Commit and deploy
|
|
113
|
+
|
|
114
|
+
Commit both the `.excalidraw` source (for future edits) and the `.svg` output (for rendering). Place SVGs under a path the deploy workflow watches.
|
|
115
|
+
|
|
116
|
+
## CLI Reference
|
|
117
|
+
|
|
118
|
+
| Command | Purpose |
|
|
119
|
+
|---------|---------|
|
|
120
|
+
| `excal inspect <file>` | Element counts, bounds, metadata |
|
|
121
|
+
| `excal validate <file>` | Structural consistency check |
|
|
122
|
+
| `excal render <file>` | Render to SVG, PNG, or PDF |
|
|
123
|
+
| `excal guide` | Full CLI guide as markdown |
|
|
124
|
+
| `excal skill` | Excalidraw domain knowledge for agents |
|
|
125
|
+
|
|
126
|
+
All commands return a structured JSON envelope with `ok`, `result`, `warnings`, `errors`, and `metrics`.
|
|
127
|
+
|
|
128
|
+
## Checklist
|
|
129
|
+
|
|
130
|
+
When adding a diagram to documentation:
|
|
131
|
+
|
|
132
|
+
- [ ] Authored as `.excalidraw` source file
|
|
133
|
+
- [ ] `roughness: 1`, `fontFamily: 1` (handwritten style)
|
|
134
|
+
- [ ] Text centered: `textAlign: "center"`, `verticalAlign: "middle"`
|
|
135
|
+
- [ ] Validated with `excal validate`
|
|
136
|
+
- [ ] Rendered with `excal render --svg --no-background`
|
|
137
|
+
- [ ] Embedded using full URL
|
|
138
|
+
- [ ] Both `.excalidraw` and `.svg` committed
|
|
139
|
+
|
|
140
|
+
## Example
|
|
141
|
+
|
|
142
|
+
The EaROS three-layer model diagram:
|
|
143
|
+
|
|
144
|
+
- Source: `site/public/diagrams/earos-layers.excalidraw`
|
|
145
|
+
- Rendered: `site/public/diagrams/earos-layers.svg`
|
|
146
|
+
- Embedded in: `tools/editor/README.md`
|
|
147
|
+
|
|
148
|
+
## Origin
|
|
149
|
+
|
|
150
|
+
Discovered while replacing unicode box-drawing diagrams that rendered poorly on GitHub Pages. Unicode characters like `─` (U+2500) are invisible in many web monospace fonts. The `excal` approach solves this and generalises to any diagram need.
|