@trohde/earos 1.3.1 → 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.
Files changed (76) hide show
  1. package/README.md +13 -28
  2. package/assets/init/.agents/skills/earos-assess/SKILL.md +1 -0
  3. package/assets/init/.agents/skills/earos-assess/references/output-templates.md +2 -0
  4. package/assets/init/.agents/skills/earos-report/references/portfolio-template.md +6 -6
  5. package/assets/init/.agents/skills/earos-report/references/single-artifact-template.md +3 -3
  6. package/assets/init/docs/getting-started.md +4 -0
  7. package/assets/init/docs/onboarding/agent-assisted.md +2 -0
  8. package/assets/init/docs/onboarding/first-assessment.md +2 -0
  9. package/assets/init/docs/onboarding/governed-review.md +2 -0
  10. package/assets/init/docs/onboarding/overview.md +2 -0
  11. package/assets/init/docs/plans/2026-03-23-003-feat-excalidraw-diagrams-for-site-docs-plan.md +144 -0
  12. package/assets/init/docs/solutions/tools/excal-cli-excalidraw-diagrams.md +150 -0
  13. package/assets/init/examples/aws-event-driven-order-processing/artifact.yaml +60 -60
  14. package/assets/init/examples/aws-event-driven-order-processing/evaluation.yaml +19 -0
  15. package/assets/init/examples/example-solution-architecture.evaluation.yaml +5 -0
  16. package/assets/init/standard/EAROS.md +2 -0
  17. package/assets/init/standard/schemas/evaluation.schema.json +23 -1
  18. package/assets/init/templates/evaluation-record.template.yaml +1 -0
  19. package/dist/assets/{_basePickBy-BlC_TeV6.js → _basePickBy-HRglH9_D.js} +1 -1
  20. package/dist/assets/{_baseUniq-CVy7rcC1.js → _baseUniq-B-el2xiK.js} +1 -1
  21. package/dist/assets/{arc-Cd8wvd7z.js → arc-DCCiWvpS.js} +1 -1
  22. package/dist/assets/{architectureDiagram-2XIMDMQ5-D_f4_aMp.js → architectureDiagram-2XIMDMQ5-BLW1Psh0.js} +1 -1
  23. package/dist/assets/{blockDiagram-WCTKOSBZ-B-y6N5--.js → blockDiagram-WCTKOSBZ-76dKbaCe.js} +1 -1
  24. package/dist/assets/{c4Diagram-IC4MRINW-C3-v3oNT.js → c4Diagram-IC4MRINW-KvbJR2lT.js} +1 -1
  25. package/dist/assets/channel-CHnLOc20.js +1 -0
  26. package/dist/assets/{chunk-4BX2VUAB-CMPwQN83.js → chunk-4BX2VUAB-BkwFPK_x.js} +1 -1
  27. package/dist/assets/{chunk-55IACEB6-Bdkfhvrr.js → chunk-55IACEB6-BJPQTA4l.js} +1 -1
  28. package/dist/assets/{chunk-FMBD7UC4-ptKQX5uF.js → chunk-FMBD7UC4-BTOCpuFV.js} +1 -1
  29. package/dist/assets/{chunk-JSJVCQXG-DO0UU_OX.js → chunk-JSJVCQXG-82cdN1ai.js} +1 -1
  30. package/dist/assets/{chunk-KX2RTZJC-DRj2OZnD.js → chunk-KX2RTZJC-B5I2jJFP.js} +1 -1
  31. package/dist/assets/{chunk-NQ4KR5QH-C4Nsf7ww.js → chunk-NQ4KR5QH-DcLpiW0C.js} +1 -1
  32. package/dist/assets/{chunk-QZHKN3VN-B1GO0Nwy.js → chunk-QZHKN3VN-guwO7UzN.js} +1 -1
  33. package/dist/assets/{chunk-WL4C6EOR-lFR6fjR8.js → chunk-WL4C6EOR-D-rebYeP.js} +1 -1
  34. package/dist/assets/classDiagram-VBA2DB6C-DBR69_yw.js +1 -0
  35. package/dist/assets/classDiagram-v2-RAHNMMFH-DBR69_yw.js +1 -0
  36. package/dist/assets/clone-DHq7LHTD.js +1 -0
  37. package/dist/assets/{cose-bilkent-S5V4N54A-IpR9mVIO.js → cose-bilkent-S5V4N54A-B5vtg_ms.js} +1 -1
  38. package/dist/assets/{dagre-KLK3FWXG-B4YA6T7N.js → dagre-KLK3FWXG-hBk_bxjm.js} +1 -1
  39. package/dist/assets/{diagram-E7M64L7V-Do5l6es_.js → diagram-E7M64L7V-Bk-H_CVO.js} +1 -1
  40. package/dist/assets/{diagram-IFDJBPK2-D5MxfKVv.js → diagram-IFDJBPK2-BugehwKx.js} +1 -1
  41. package/dist/assets/{diagram-P4PSJMXO-Djr28EgW.js → diagram-P4PSJMXO-CNEv2a0x.js} +1 -1
  42. package/dist/assets/{erDiagram-INFDFZHY-BuM-rbCL.js → erDiagram-INFDFZHY-P0-yYcfO.js} +1 -1
  43. package/dist/assets/{flowDiagram-PKNHOUZH-By3WGI7Q.js → flowDiagram-PKNHOUZH-CSG3KYwj.js} +1 -1
  44. package/dist/assets/{ganttDiagram-A5KZAMGK-GLmBfK72.js → ganttDiagram-A5KZAMGK-B6I0izbI.js} +1 -1
  45. package/dist/assets/{gitGraphDiagram-K3NZZRJ6-BN0iXeIv.js → gitGraphDiagram-K3NZZRJ6-DU9SqHkb.js} +1 -1
  46. package/dist/assets/{graph-CDzuMtjV.js → graph-C65heg42.js} +1 -1
  47. package/dist/assets/{index-DoeSN_Oe.js → index-Q21gvgf4.js} +124 -124
  48. package/dist/assets/{infoDiagram-LFFYTUFH-C888gaFw.js → infoDiagram-LFFYTUFH-CkQ3Su5g.js} +1 -1
  49. package/dist/assets/{ishikawaDiagram-PHBUUO56-ChIO9DG-.js → ishikawaDiagram-PHBUUO56-CdxqubV5.js} +1 -1
  50. package/dist/assets/{journeyDiagram-4ABVD52K-CufMUDcs.js → journeyDiagram-4ABVD52K-OXhBQ3bn.js} +1 -1
  51. package/dist/assets/{kanban-definition-K7BYSVSG-BpsSVpX8.js → kanban-definition-K7BYSVSG-DP8duR41.js} +1 -1
  52. package/dist/assets/{layout-B8RWVBSF.js → layout-CvhKY5OS.js} +1 -1
  53. package/dist/assets/{linear-BJwxtq9r.js → linear-Dl7AA5z5.js} +1 -1
  54. package/dist/assets/{mindmap-definition-YRQLILUH-C6WPimbf.js → mindmap-definition-YRQLILUH-CRYTXa0H.js} +1 -1
  55. package/dist/assets/{pieDiagram-SKSYHLDU-DeCGMWf8.js → pieDiagram-SKSYHLDU-qo29I_dD.js} +1 -1
  56. package/dist/assets/{quadrantDiagram-337W2JSQ-D9TWaS83.js → quadrantDiagram-337W2JSQ-BJOPm7QN.js} +1 -1
  57. package/dist/assets/{requirementDiagram-Z7DCOOCP-DTnuXlAq.js → requirementDiagram-Z7DCOOCP-BYdv2aTu.js} +1 -1
  58. package/dist/assets/{sankeyDiagram-WA2Y5GQK-B2dplCgD.js → sankeyDiagram-WA2Y5GQK-C5iHU5yd.js} +1 -1
  59. package/dist/assets/{sequenceDiagram-2WXFIKYE-cBvgSSju.js → sequenceDiagram-2WXFIKYE-C0ED4Z5P.js} +1 -1
  60. package/dist/assets/{stateDiagram-RAJIS63D-Cwr7VtSX.js → stateDiagram-RAJIS63D-GLsrTY04.js} +1 -1
  61. package/dist/assets/stateDiagram-v2-FVOUBMTO-C5144TtB.js +1 -0
  62. package/dist/assets/{timeline-definition-YZTLITO2-Dkp163fK.js → timeline-definition-YZTLITO2-aqU_QdmO.js} +1 -1
  63. package/dist/assets/{treemap-KZPCXAKY-BUWHa5xU.js → treemap-KZPCXAKY-CWswAMrV.js} +1 -1
  64. package/dist/assets/{vennDiagram-LZ73GAT5-BihD66ma.js → vennDiagram-LZ73GAT5-C3b2ZyP2.js} +1 -1
  65. package/dist/assets/{xychartDiagram-JWTSCODW-Cw4lPbuZ.js → xychartDiagram-JWTSCODW-P0pbwSKC.js} +1 -1
  66. package/dist/index.html +1 -1
  67. package/export-docx.js +5 -2
  68. package/package.json +1 -1
  69. package/schemas/evaluation.schema.json +23 -1
  70. package/serve.js +1 -1
  71. package/utils/criterion-questions.js +100 -0
  72. package/dist/assets/channel-BSC0F15G.js +0 -1
  73. package/dist/assets/classDiagram-VBA2DB6C-BHDWMOEz.js +0 -1
  74. package/dist/assets/classDiagram-v2-RAHNMMFH-BHDWMOEz.js +0 -1
  75. package/dist/assets/clone-BdN-3iAD.js +0 -1
  76. package/dist/assets/stateDiagram-v2-FVOUBMTO-B59h7VTZ.js +0 -1
@@ -126,6 +126,10 @@
126
126
  "criterion_id": {
127
127
  "type": "string"
128
128
  },
129
+ "criterion_question": {
130
+ "type": "string",
131
+ "description": "Human-readable criterion question text from the rubric. Included for self-contained readability."
132
+ },
129
133
  "score": {
130
134
  "oneOf": [
131
135
  {
@@ -237,7 +241,25 @@
237
241
  "gate_failures": {
238
242
  "type": "array",
239
243
  "items": {
240
- "type": "object"
244
+ "type": "object",
245
+ "properties": {
246
+ "criterion_id": {
247
+ "type": "string"
248
+ },
249
+ "criterion_question": {
250
+ "type": "string",
251
+ "description": "Human-readable criterion question text from the rubric."
252
+ },
253
+ "gate_severity": {
254
+ "type": "string"
255
+ },
256
+ "failure_effect": {
257
+ "type": "string"
258
+ },
259
+ "actual_score": {
260
+ "type": "integer"
261
+ }
262
+ }
241
263
  }
242
264
  },
243
265
  "overall_status": {
package/serve.js CHANGED
@@ -55,7 +55,7 @@ export async function startServer(fileArg) {
55
55
  process.exit(1);
56
56
  }
57
57
  const app = express();
58
- app.use(express.json({ limit: '50mb' }));
58
+ app.use(express.json({ limit: '200mb' }));
59
59
  app.use((_req, res, next) => {
60
60
  res.setHeader('X-Content-Type-Options', 'nosniff');
61
61
  res.setHeader('X-Frame-Options', 'DENY');
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Static lookup maps for criterion questions and dimension names.
3
+ *
4
+ * Used as a fallback when evaluation records do not embed `criterion_question`.
5
+ * Built from the rubric YAML files (core + all profiles + all overlays).
6
+ */
7
+ // ── Criterion ID → question text ─────────────────────────────────────────────
8
+ export const CRITERION_QUESTIONS = {
9
+ // Core meta-rubric (EAROS-CORE-002) — 10 criteria
10
+ 'STK-01': 'Does the artifact explicitly identify intended stakeholders, decision purpose, and review context?',
11
+ 'STK-02': 'Are concerns mapped to the views or sections used in the artifact?',
12
+ 'SCP-01': 'Does the artifact define scope, boundaries, assumptions, and exclusions?',
13
+ 'CVP-01': 'Do the selected views and representations fit the stakeholder concerns and review purpose?',
14
+ 'TRC-01': 'Are business drivers, objectives, principles, or requirements traceably connected to the architecture content?',
15
+ 'CON-01': 'Are terms, structures, interfaces, and facts consistent across sections and views?',
16
+ 'RAT-01': 'Does the artifact identify key risks, assumptions, constraints, and tradeoffs relevant to the decision?',
17
+ 'CMP-01': 'Does the artifact show alignment to applicable architecture standards, policies, and mandatory controls?',
18
+ 'ACT-01': 'Can delivery and governance teams act on the artifact without major reinterpretation?',
19
+ 'MNT-01': 'Does the artifact identify ownership, update expectations, and change history or provenance?',
20
+ // Reference architecture (EAROS-REFARCH-001) — 9 criteria
21
+ 'RA-VIEW-01': 'Does the reference architecture include context, functional, deployment, and data flow views?',
22
+ 'RA-VIEW-02': 'Are architecture diagrams machine-readable or accompanied by structured element catalogs?',
23
+ 'RA-DEC-01': 'Are key architecture decisions documented with context, options considered, and rationale?',
24
+ 'RA-DEC-02': 'Does the reference architecture clearly define what is fixed, what is configurable, and where teams have discretion?',
25
+ 'RA-OPS-01': 'Does the reference architecture include monitoring, alerting, scaling, and disaster recovery guidance?',
26
+ 'RA-IMP-01': 'Does the reference architecture include infrastructure-as-code templates, API specifications, or starter kits?',
27
+ 'RA-IMP-02': 'Does the reference architecture include a clear getting-started guide or golden path for new adopters?',
28
+ 'RA-QA-01': 'Are quality attributes defined with measurable acceptance criteria and validation approaches?',
29
+ 'RA-REU-01': 'Is the reference architecture version-controlled with a clear evolution roadmap?',
30
+ // Solution architecture (EAROS-SOL-001) — 3 criteria
31
+ 'SOL-01': 'Does the artifact explain the chosen option and the rejected alternatives at a decision-useful level?',
32
+ 'SOL-02': 'Are key quality attributes and non-functional requirements translated into architectural mechanisms or constraints?',
33
+ 'SOL-03': 'Does the solution architecture describe implementation dependencies, operational ownership, and migration implications?',
34
+ // ADR (EAROS-ADR-001) — 3 criteria
35
+ 'ADR-01': 'Is the decision stated as a clear, testable, singular decision rather than a vague discussion topic?',
36
+ 'ADR-02': 'Does the ADR capture meaningful alternatives and the consequences of the chosen decision?',
37
+ 'ADR-03': 'Can a future reader understand why the decision was made and when it should be revisited?',
38
+ // Capability map (EAROS-CAP-001) — 3 criteria
39
+ 'CAP-01': 'Is the capability decomposition stable, non-overlapping, and expressed at a coherent level of abstraction?',
40
+ 'CAP-02': 'Does the map connect capabilities to business outcomes, ownership, and investment or maturity decisions?',
41
+ 'CAP-03': 'Can the capability map be reused over time for comparative analysis without frequent structural rework?',
42
+ // Roadmap (EAROS-ROAD-001) — 3 criteria
43
+ 'RD-DEP-01': 'Are dependencies between roadmap items identified and realistic?',
44
+ 'RD-TRN-01': 'Are intermediate states between current and target architecture defined?',
45
+ 'RD-OWN-01': 'Do roadmap items have owners, funding linkage, and measurable milestones?',
46
+ // Security overlay (EAROS-OVR-SEC-001) — 1 criterion
47
+ 'SEC-01': 'Does the artifact show material threats, required controls, and control ownership at a level suitable for the review?',
48
+ // Data governance overlay (EAROS-OVR-DATA-001) — 1 criterion
49
+ 'DAT-01': 'Does the artifact define key information objects, accountability, lifecycle concerns, and material data quality or privacy implications?',
50
+ // Regulatory overlay (EAROS-OVR-REG-001) — 2 criteria
51
+ 'REG-ID-01': 'Are applicable regulations and compliance requirements explicitly identified?',
52
+ 'REG-EV-01': 'Is compliance with identified regulations demonstrated with evidence?',
53
+ };
54
+ // ── Dimension prefix → human-readable name ───────────────────────────────────
55
+ // Keys match the groupByDimension heuristic in AssessmentViewer:
56
+ // 3-char prefix → parts[0] (e.g., STK-01 → STK)
57
+ // longer prefix → parts[0]-parts[1] (e.g., RA-VIEW-01 → RA-VIEW)
58
+ export const DIMENSION_NAMES = {
59
+ // Core
60
+ STK: 'Stakeholder and purpose fit',
61
+ SCP: 'Scope and boundary clarity',
62
+ CVP: 'Concern coverage and viewpoint appropriateness',
63
+ TRC: 'Traceability to drivers, requirements, and principles',
64
+ CON: 'Internal consistency and integrity',
65
+ RAT: 'Risks, assumptions, constraints, and tradeoffs',
66
+ CMP: 'Standards and policy compliance',
67
+ ACT: 'Actionability and implementation relevance',
68
+ MNT: 'Artifact maintainability and stewardship',
69
+ // Reference architecture
70
+ 'RA-VIEW': 'Architecture views and completeness',
71
+ 'RA-DEC': 'Prescriptiveness and decision guidance',
72
+ 'RA-OPS': 'Operational readiness',
73
+ 'RA-IMP': 'Implementation actionability',
74
+ 'RA-QA': 'Quality attribute specification',
75
+ 'RA-REU': 'Reusability and evolution',
76
+ // Solution architecture
77
+ SOL: 'Solution optioning and rationale',
78
+ // ADR
79
+ ADR: 'Decision clarity',
80
+ // Capability map
81
+ CAP: 'Decomposition quality',
82
+ // Roadmap
83
+ 'RD-DEP': 'Dependency realism',
84
+ 'RD-TRN': 'Transition-state clarity',
85
+ 'RD-OWN': 'Ownership and measurability',
86
+ // Overlays
87
+ SEC: 'Threat, control, and ownership treatment',
88
+ DAT: 'Information treatment and accountability',
89
+ 'REG-ID': 'Regulatory identification',
90
+ 'REG-EV': 'Compliance evidence',
91
+ };
92
+ // ── Helper ───────────────────────────────────────────────────────────────────
93
+ /**
94
+ * Returns the human-readable question for a criterion ID.
95
+ * Prefers the embedded `criterion_question` from the evaluation record;
96
+ * falls back to the static lookup.
97
+ */
98
+ export function getCriterionQuestion(criterionId, embedded) {
99
+ return embedded || CRITERION_QUESTIONS[criterionId] || '';
100
+ }
@@ -1 +0,0 @@
1
- import{aq as o,ar as n}from"./index-DoeSN_Oe.js";const t=(r,a)=>o.lang.round(n.parse(r)[a]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-WL4C6EOR-lFR6fjR8.js";import{_ as i}from"./index-DoeSN_Oe.js";import"./chunk-FMBD7UC4-ptKQX5uF.js";import"./chunk-JSJVCQXG-DO0UU_OX.js";import"./chunk-55IACEB6-Bdkfhvrr.js";import"./chunk-KX2RTZJC-DRj2OZnD.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-WL4C6EOR-lFR6fjR8.js";import{_ as i}from"./index-DoeSN_Oe.js";import"./chunk-FMBD7UC4-ptKQX5uF.js";import"./chunk-JSJVCQXG-DO0UU_OX.js";import"./chunk-55IACEB6-Bdkfhvrr.js";import"./chunk-KX2RTZJC-DRj2OZnD.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./_baseUniq-CVy7rcC1.js";var e=4;function a(o){return r(o,e)}export{a as c};
@@ -1 +0,0 @@
1
- import{s as t,b as r,a,S as s}from"./chunk-NQ4KR5QH-C4Nsf7ww.js";import{_ as i}from"./index-DoeSN_Oe.js";import"./chunk-55IACEB6-Bdkfhvrr.js";import"./chunk-KX2RTZJC-DRj2OZnD.js";var l={parser:a,get db(){return new s(2)},renderer:r,styles:t,init:i(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{l as diagram};