@trohde/earos 1.0.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 (135) hide show
  1. package/README.md +156 -0
  2. package/assets/init/.agents/skills/earos-artifact-gen/SKILL.md +106 -0
  3. package/assets/init/.agents/skills/earos-artifact-gen/references/interview-guide.md +313 -0
  4. package/assets/init/.agents/skills/earos-artifact-gen/references/output-guide.md +367 -0
  5. package/assets/init/.agents/skills/earos-assess/SKILL.md +212 -0
  6. package/assets/init/.agents/skills/earos-assess/references/calibration-benchmarks.md +160 -0
  7. package/assets/init/.agents/skills/earos-assess/references/output-templates.md +311 -0
  8. package/assets/init/.agents/skills/earos-assess/references/scoring-protocol.md +281 -0
  9. package/assets/init/.agents/skills/earos-calibrate/SKILL.md +153 -0
  10. package/assets/init/.agents/skills/earos-calibrate/references/agreement-metrics.md +188 -0
  11. package/assets/init/.agents/skills/earos-calibrate/references/calibration-protocol.md +263 -0
  12. package/assets/init/.agents/skills/earos-create/SKILL.md +257 -0
  13. package/assets/init/.agents/skills/earos-create/references/criterion-writing-guide.md +268 -0
  14. package/assets/init/.agents/skills/earos-create/references/dependency-rules.md +193 -0
  15. package/assets/init/.agents/skills/earos-create/references/rubric-interview-guide.md +123 -0
  16. package/assets/init/.agents/skills/earos-create/references/validation-checklist.md +238 -0
  17. package/assets/init/.agents/skills/earos-profile-author/SKILL.md +251 -0
  18. package/assets/init/.agents/skills/earos-profile-author/references/criterion-writing-guide.md +280 -0
  19. package/assets/init/.agents/skills/earos-profile-author/references/design-methods.md +158 -0
  20. package/assets/init/.agents/skills/earos-profile-author/references/profile-checklist.md +173 -0
  21. package/assets/init/.agents/skills/earos-remediate/SKILL.md +118 -0
  22. package/assets/init/.agents/skills/earos-remediate/references/output-template.md +199 -0
  23. package/assets/init/.agents/skills/earos-remediate/references/remediation-patterns.md +330 -0
  24. package/assets/init/.agents/skills/earos-report/SKILL.md +85 -0
  25. package/assets/init/.agents/skills/earos-report/references/portfolio-template.md +181 -0
  26. package/assets/init/.agents/skills/earos-report/references/single-artifact-template.md +168 -0
  27. package/assets/init/.agents/skills/earos-review/SKILL.md +130 -0
  28. package/assets/init/.agents/skills/earos-review/references/challenge-patterns.md +163 -0
  29. package/assets/init/.agents/skills/earos-review/references/output-template.md +180 -0
  30. package/assets/init/.agents/skills/earos-template-fill/SKILL.md +177 -0
  31. package/assets/init/.agents/skills/earos-template-fill/references/evidence-writing-guide.md +186 -0
  32. package/assets/init/.agents/skills/earos-template-fill/references/section-rubric-mapping.md +200 -0
  33. package/assets/init/.agents/skills/earos-validate/SKILL.md +113 -0
  34. package/assets/init/.agents/skills/earos-validate/references/fix-patterns.md +281 -0
  35. package/assets/init/.agents/skills/earos-validate/references/validation-checks.md +287 -0
  36. package/assets/init/.claude/CLAUDE.md +4 -0
  37. package/assets/init/AGENTS.md +293 -0
  38. package/assets/init/CLAUDE.md +635 -0
  39. package/assets/init/README.md +507 -0
  40. package/assets/init/calibration/gold-set/.gitkeep +0 -0
  41. package/assets/init/calibration/results/.gitkeep +0 -0
  42. package/assets/init/core/core-meta-rubric.yaml +643 -0
  43. package/assets/init/docs/consistency-report.md +325 -0
  44. package/assets/init/docs/getting-started.md +194 -0
  45. package/assets/init/docs/profile-authoring-guide.md +51 -0
  46. package/assets/init/docs/terminology.md +126 -0
  47. package/assets/init/earos.manifest.yaml +104 -0
  48. package/assets/init/evaluations/.gitkeep +0 -0
  49. package/assets/init/examples/aws-event-driven-order-processing/artifact.yaml +2056 -0
  50. package/assets/init/examples/aws-event-driven-order-processing/evaluation.yaml +973 -0
  51. package/assets/init/examples/aws-event-driven-order-processing/report.md +244 -0
  52. package/assets/init/examples/example-solution-architecture.evaluation.yaml +136 -0
  53. package/assets/init/examples/multi-cloud-data-analytics/artifact.yaml +715 -0
  54. package/assets/init/overlays/data-governance.yaml +94 -0
  55. package/assets/init/overlays/regulatory.yaml +154 -0
  56. package/assets/init/overlays/security.yaml +92 -0
  57. package/assets/init/profiles/adr.yaml +225 -0
  58. package/assets/init/profiles/capability-map.yaml +223 -0
  59. package/assets/init/profiles/reference-architecture.yaml +426 -0
  60. package/assets/init/profiles/roadmap.yaml +205 -0
  61. package/assets/init/profiles/solution-architecture.yaml +227 -0
  62. package/assets/init/research/architecture-assessment-rubrics-research.docx +0 -0
  63. package/assets/init/research/architecture-assessment-rubrics-research.md +566 -0
  64. package/assets/init/research/reference-architecture-research.md +751 -0
  65. package/assets/init/standard/EAROS.md +1426 -0
  66. package/assets/init/standard/schemas/artifact.schema.json +1295 -0
  67. package/assets/init/standard/schemas/artifact.uischema.json +65 -0
  68. package/assets/init/standard/schemas/evaluation.schema.json +284 -0
  69. package/assets/init/standard/schemas/rubric.schema.json +383 -0
  70. package/assets/init/templates/evaluation-record.template.yaml +58 -0
  71. package/assets/init/templates/new-profile.template.yaml +65 -0
  72. package/bin.js +188 -0
  73. package/dist/assets/_basePickBy-BVu6YmSW.js +1 -0
  74. package/dist/assets/_baseUniq-CWRzQDz_.js +1 -0
  75. package/dist/assets/arc-CyDBhtDM.js +1 -0
  76. package/dist/assets/architectureDiagram-2XIMDMQ5-BH6O4dvN.js +36 -0
  77. package/dist/assets/blockDiagram-WCTKOSBZ-2xmwdjpg.js +132 -0
  78. package/dist/assets/c4Diagram-IC4MRINW-BNmPRFJF.js +10 -0
  79. package/dist/assets/channel-CiySTNoJ.js +1 -0
  80. package/dist/assets/chunk-4BX2VUAB-DGQTvirp.js +1 -0
  81. package/dist/assets/chunk-55IACEB6-DNMAQAC_.js +1 -0
  82. package/dist/assets/chunk-FMBD7UC4-BJbVTQ5o.js +15 -0
  83. package/dist/assets/chunk-JSJVCQXG-BCxUL74A.js +1 -0
  84. package/dist/assets/chunk-KX2RTZJC-H7wWZOfz.js +1 -0
  85. package/dist/assets/chunk-NQ4KR5QH-BK4RlTQF.js +220 -0
  86. package/dist/assets/chunk-QZHKN3VN-0chxDV5g.js +1 -0
  87. package/dist/assets/chunk-WL4C6EOR-DexfQ-AV.js +189 -0
  88. package/dist/assets/classDiagram-VBA2DB6C-D7luWJQn.js +1 -0
  89. package/dist/assets/classDiagram-v2-RAHNMMFH-D7luWJQn.js +1 -0
  90. package/dist/assets/clone-ylgRbd3D.js +1 -0
  91. package/dist/assets/cose-bilkent-S5V4N54A-DS2IOCfZ.js +1 -0
  92. package/dist/assets/cytoscape.esm-CyJtwmzi.js +331 -0
  93. package/dist/assets/dagre-KLK3FWXG-BbSoTTa3.js +4 -0
  94. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  95. package/dist/assets/diagram-E7M64L7V-C9TvYgv0.js +24 -0
  96. package/dist/assets/diagram-IFDJBPK2-DowUMWrg.js +43 -0
  97. package/dist/assets/diagram-P4PSJMXO-BL6nrnQF.js +24 -0
  98. package/dist/assets/erDiagram-INFDFZHY-rXPRl8VM.js +70 -0
  99. package/dist/assets/flowDiagram-PKNHOUZH-DBRM99-W.js +162 -0
  100. package/dist/assets/ganttDiagram-A5KZAMGK-INcWFsBT.js +292 -0
  101. package/dist/assets/gitGraphDiagram-K3NZZRJ6-DMwpfE91.js +65 -0
  102. package/dist/assets/graph-DLQn37b-.js +1 -0
  103. package/dist/assets/index-BFFITMT8.js +650 -0
  104. package/dist/assets/index-H7f6VTz1.css +1 -0
  105. package/dist/assets/infoDiagram-LFFYTUFH-B0f4TWRM.js +2 -0
  106. package/dist/assets/init-Gi6I4Gst.js +1 -0
  107. package/dist/assets/ishikawaDiagram-PHBUUO56-CsU6XimZ.js +70 -0
  108. package/dist/assets/journeyDiagram-4ABVD52K-CQ7ibNib.js +139 -0
  109. package/dist/assets/kanban-definition-K7BYSVSG-DzEN7THt.js +89 -0
  110. package/dist/assets/katex-B1X10hvy.js +261 -0
  111. package/dist/assets/layout-C0dvb42R.js +1 -0
  112. package/dist/assets/linear-j4a8mGj7.js +1 -0
  113. package/dist/assets/mindmap-definition-YRQLILUH-DP8iEuCf.js +68 -0
  114. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  115. package/dist/assets/pieDiagram-SKSYHLDU-BpIAXgAm.js +30 -0
  116. package/dist/assets/quadrantDiagram-337W2JSQ-DrpXn5Eg.js +7 -0
  117. package/dist/assets/requirementDiagram-Z7DCOOCP-Bg7EwHlG.js +73 -0
  118. package/dist/assets/sankeyDiagram-WA2Y5GQK-BWagRs1F.js +10 -0
  119. package/dist/assets/sequenceDiagram-2WXFIKYE-q5jwhivG.js +145 -0
  120. package/dist/assets/stateDiagram-RAJIS63D-B_J9pE-2.js +1 -0
  121. package/dist/assets/stateDiagram-v2-FVOUBMTO-Q_1GcybB.js +1 -0
  122. package/dist/assets/timeline-definition-YZTLITO2-dv0jgQ0z.js +61 -0
  123. package/dist/assets/treemap-KZPCXAKY-Dt1dkIE7.js +162 -0
  124. package/dist/assets/vennDiagram-LZ73GAT5-BdO5RgRZ.js +34 -0
  125. package/dist/assets/xychartDiagram-JWTSCODW-CpDVe-8v.js +7 -0
  126. package/dist/index.html +23 -0
  127. package/export-docx.js +1583 -0
  128. package/init.js +353 -0
  129. package/manifest-cli.mjs +207 -0
  130. package/package.json +83 -0
  131. package/schemas/artifact.schema.json +1295 -0
  132. package/schemas/artifact.uischema.json +65 -0
  133. package/schemas/evaluation.schema.json +284 -0
  134. package/schemas/rubric.schema.json +383 -0
  135. package/serve.js +238 -0
@@ -0,0 +1,94 @@
1
+ rubric_id: EAROS-OVR-DATA-001
2
+ version: 2.0.0
3
+ kind: overlay
4
+ title: Data Governance Overlay
5
+ status: approved
6
+ artifact_type: any
7
+ purpose:
8
+ - data_assurance_review
9
+ - information_architecture_review
10
+ stakeholders:
11
+ - data_architect
12
+ - data_governance
13
+ - risk
14
+ - privacy
15
+ dimensions:
16
+ - id: DAT1
17
+ name: Information treatment and accountability
18
+ description: >
19
+ Data flows through architectures like electricity through circuits — present everywhere
20
+ but invisible unless explicitly documented. This dimension checks whether the artifact
21
+ treats information as a first-class design concern with explicit ownership, lifecycle
22
+ treatment, and privacy or quality implications. Data without accountability is a
23
+ governance liability.
24
+ criteria:
25
+ - id: DAT-01
26
+ question: Does the artifact define key information objects, accountability, lifecycle concerns, and material data quality or privacy implications?
27
+ description: >
28
+ Data governance requires more than listing data entities in passing. The artifact must
29
+ define who owns each key information object, how it flows through the system, how long
30
+ it lives, and what privacy or quality risks it carries. Without this, data architecture
31
+ decisions are made implicitly, often incorrectly, and cannot be verified at review time.
32
+ This criterion applies whenever the artifact describes data flows, storage, retention,
33
+ or classification.
34
+ metric_type: ordinal
35
+ scale: [0, 1, 2, 3, 4, "N/A"]
36
+ gate: false
37
+ required_evidence:
38
+ - key information objects named and described
39
+ - ownership assignments
40
+ - lifecycle view (create, store, use, archive, delete)
41
+ - quality or privacy considerations
42
+ scoring_guide:
43
+ "0": No material data treatment anywhere in the artifact
44
+ "1": Data mentioned only in passing (e.g. 'stores user data in a database')
45
+ "2": Some data objects defined but ownership and lifecycle are absent or superficial
46
+ "3": Most material information concerns covered with ownership and some lifecycle treatment
47
+ "4": Complete information accountability including ownership, classification, lifecycle, retention policy, privacy implications, and quality thresholds
48
+ anti_patterns:
49
+ - Data flows shown in diagrams without ownership at each hop
50
+ - No lifecycle or retention treatment for personal or financial data
51
+ - Classification missing from information objects
52
+ - Privacy implications absent for PII-touching designs
53
+ examples:
54
+ good:
55
+ - >
56
+ "Key information objects: CustomerProfile (owner: Customer Domain, classification:
57
+ PII/Confidential, retention: account lifetime + 7 years, GDPR lawful basis: contract,
58
+ quality threshold: < 0.1% field error rate). TransactionRecord (owner: Payments Domain,
59
+ classification: Financial/Sensitive, retention: 10 years, quality threshold: < 0.01%
60
+ error rate). Data flows: Section 4 diagram shows numbered steps with ownership at
61
+ each hop."
62
+ bad:
63
+ - >
64
+ "The system stores customer data and transaction records in a PostgreSQL database.
65
+ [No ownership, no classification, no lifecycle, no privacy treatment]"
66
+ decision_tree: >
67
+ IF no data treatment at all THEN score 0.
68
+ IF data mentioned but only incidentally THEN score 1.
69
+ IF some data objects defined but ownership and lifecycle absent THEN score 2.
70
+ IF most material data concerns covered with ownership and some lifecycle treatment THEN score 3.
71
+ IF complete information accountability including ownership, classification, lifecycle,
72
+ retention, privacy, and quality requirements THEN score 4.
73
+ remediation_hints:
74
+ - Add an information object table with owner, classification, retention policy
75
+ - Map data flows with ownership at each hop
76
+ - Address GDPR lawful basis and right-to-erasure implications for PII
77
+ - Define data quality thresholds for critical information objects
78
+
79
+ scoring:
80
+ scale: 0-4 ordinal plus N/A
81
+ method: append_to_base_rubric
82
+ thresholds:
83
+ escalation: Escalate when material regulated data is present and DAT-01 < 3
84
+
85
+ outputs:
86
+ require_evidence_refs: true
87
+ require_confidence: true
88
+ require_actions: true
89
+ require_evidence_class: true
90
+ require_evidence_anchors: true
91
+ formats:
92
+ - yaml
93
+ - json
94
+ - markdown-report
@@ -0,0 +1,154 @@
1
+ rubric_id: EAROS-OVR-REG-001
2
+ version: 2.0.0
3
+ kind: overlay
4
+ title: Regulatory Compliance Overlay
5
+ status: draft
6
+ artifact_type: any
7
+ purpose:
8
+ - regulatory_compliance_review
9
+ - governance_assurance_review
10
+ stakeholders:
11
+ - compliance
12
+ - legal
13
+ - risk
14
+ - architecture_board
15
+ dimensions:
16
+ - id: REG1
17
+ name: Regulatory identification
18
+ description: >
19
+ Regulatory compliance begins with identifying which rules apply. An artifact operating
20
+ in a regulated domain that does not name the applicable regulations cannot be reviewed
21
+ for compliance — the reviewer has no baseline to measure against. Applicability
22
+ assessment is a precondition for all downstream compliance evidence.
23
+ weight: 1.0
24
+ criteria:
25
+ - id: REG-ID-01
26
+ question: Are applicable regulations and compliance requirements explicitly identified?
27
+ description: >
28
+ Different regulations apply differently depending on jurisdiction, data type, business
29
+ activity, and customer segment. An artifact that asserts general regulatory compliance
30
+ without naming specific regulations, jurisdictions, and applicability rationale provides
31
+ no basis for governance review. Applicability assessment must be explicit and specific
32
+ to this artifact's scope.
33
+ metric_type: ordinal
34
+ scale: [0, 1, 2, 3, 4, "N/A"]
35
+ gate:
36
+ enabled: true
37
+ severity: critical
38
+ failure_effect: reject when regulatory applicability cannot be determined
39
+ required_evidence:
40
+ - named regulation references (e.g. GDPR, DORA, PSD2)
41
+ - applicability assessment for each regulation
42
+ - jurisdiction identification
43
+ scoring_guide:
44
+ "0": No regulatory consideration — regulations not mentioned or assessed
45
+ "1": Vague mention of compliance — 'we will comply with applicable regulations' with no specifics
46
+ "2": Some regulations named but no applicability assessment — which rules apply and why is unclear
47
+ "3": Material regulations identified with applicability rationale — specific to this context
48
+ "4": Complete regulatory mapping with jurisdictional analysis and formal applicability assessment for all relevant regulations
49
+ anti_patterns:
50
+ - Compliance assumed without identifying which regulations apply
51
+ - No jurisdiction specified for data protection regulations
52
+ - Generic regulatory references without applicability assessment for this specific solution
53
+ examples:
54
+ good:
55
+ - >
56
+ "Applicable regulations: GDPR (EU) — applies because solution processes EU citizen
57
+ personal data. PSD2 (EU) — applies because solution initiates payment transactions.
58
+ DORA (EU) — applies because this is a critical ICT system at a regulated financial
59
+ entity (classification: Tier 1 critical function). UK GDPR — applies for UK data
60
+ subjects post-Brexit. Assessed and not applicable: CCPA — no California customers
61
+ in current scope."
62
+ bad:
63
+ - >
64
+ "The solution will comply with all relevant data protection and financial services
65
+ regulations. [No specific regulations named, no jurisdiction, no applicability
66
+ assessment]"
67
+ decision_tree: >
68
+ IF no regulatory consideration anywhere THEN score 0.
69
+ IF compliance mentioned generically without naming specific regulations THEN score 1.
70
+ IF some regulations named but no applicability assessment THEN score 2.
71
+ IF material regulations named with applicability rationale for this specific context THEN score 3.
72
+ IF complete regulatory mapping with jurisdiction analysis and formal applicability assessment THEN score 4.
73
+ remediation_hints:
74
+ - List all regulations by jurisdiction and assess applicability with rationale for each
75
+ - Identify regulations reviewed and found not applicable — document the rationale
76
+ - Perform a formal applicability assessment if none exists
77
+
78
+ - id: REG2
79
+ name: Compliance evidence
80
+ description: >
81
+ Identifying regulations is necessary but insufficient. The artifact must demonstrate
82
+ how the design satisfies each applicable regulation through specific design controls,
83
+ audit mechanisms, and documented exceptions with owners and remediation timelines.
84
+ Compliance by assertion is not compliance.
85
+ weight: 1.0
86
+ criteria:
87
+ - id: REG-EV-01
88
+ question: Is compliance with identified regulations demonstrated with evidence?
89
+ description: >
90
+ Compliance must be demonstrated through specific design controls that can be inspected
91
+ and verified — not asserted through generic statements. Each applicable regulation
92
+ requires a mapping to architectural elements that implement the relevant controls.
93
+ Exceptions must be logged with owner, approval, and remediation plan. Without this,
94
+ governance boards cannot discharge their compliance oversight responsibility.
95
+ metric_type: ordinal
96
+ scale: [0, 1, 2, 3, 4, "N/A"]
97
+ gate:
98
+ enabled: true
99
+ severity: critical
100
+ failure_effect: reject when compliance evidence is absent for mandatory regulations
101
+ required_evidence:
102
+ - regulation-to-control mappings (which design elements satisfy which rules)
103
+ - compliance statements with specific evidence references
104
+ - audit trail references
105
+ scoring_guide:
106
+ "0": No compliance evidence — regulations identified but no design controls shown
107
+ "1": Compliance asserted without evidence — 'the system is GDPR compliant'
108
+ "2": Partial evidence for some regulations — key regulations have partial control mappings
109
+ "3": Evidence provided for most material regulations — control mappings with design references
110
+ "4": Complete evidence trail with control-to-regulation mapping, exception log with owners, and verification approach
111
+ anti_patterns:
112
+ - Compliance by assertion only — 'we comply with X' without showing how
113
+ - No exception log for items that do not yet comply
114
+ - Control mappings exist in a separate document not referenced by this artifact
115
+ examples:
116
+ good:
117
+ - >
118
+ "GDPR Article 17 (Right to Erasure): implemented via async deletion event propagated
119
+ to all downstream stores (Section 5.2, see data flow diagram step 8). DORA Article 8
120
+ (ICT risk management): risk assessment in Section 7; incident classification in
121
+ Section 8. PSD2 SCA: Strong Customer Authentication via FIDO2 hardware key (Section
122
+ 4.1). Exception: DORA RTS on threat-led penetration testing — not yet completed;
123
+ planned Q3 2026, Owner: CISO, approved by Risk Committee 2026-01-15."
124
+ bad:
125
+ - >
126
+ "The solution is GDPR and PSD2 compliant. [No control mappings, no design
127
+ references, no exceptions]"
128
+ decision_tree: >
129
+ IF no compliance evidence beyond identifying regulations THEN score 0.
130
+ IF compliance asserted without showing how design meets requirements THEN score 1.
131
+ IF evidence provided for some regulations but material regulations have gaps THEN score 2.
132
+ IF evidence provided for most material regulations with control-to-design mappings THEN score 3.
133
+ IF complete evidence trail with control mapping, exception log, owners, and verification approach THEN score 4.
134
+ remediation_hints:
135
+ - Map each regulation to specific design controls using a compliance matrix
136
+ - Record exceptions with approver, approval date, and remediation timeline
137
+ - Reference specific sections and design elements, not generic compliance statements
138
+
139
+ scoring:
140
+ scale: 0-4 ordinal plus N/A
141
+ method: append_to_base_rubric
142
+ thresholds:
143
+ critical_regulatory_failure: Reject or escalate when mandatory regulations are unaddressed
144
+
145
+ outputs:
146
+ require_evidence_refs: true
147
+ require_confidence: true
148
+ require_actions: true
149
+ require_evidence_class: true
150
+ require_evidence_anchors: true
151
+ formats:
152
+ - yaml
153
+ - json
154
+ - markdown-report
@@ -0,0 +1,92 @@
1
+ rubric_id: EAROS-OVR-SEC-001
2
+ version: 2.0.0
3
+ kind: overlay
4
+ title: Security Overlay
5
+ status: approved
6
+ artifact_type: any
7
+ purpose:
8
+ - security_assurance
9
+ - control_alignment_review
10
+ stakeholders:
11
+ - security
12
+ - risk
13
+ - architecture_board
14
+ dimensions:
15
+ - id: SEC1
16
+ name: Threat, control, and ownership treatment
17
+ description: >
18
+ Security concerns that are absent from the architecture document will be absent from
19
+ the architecture. This dimension checks whether the artifact treats security as a
20
+ first-class design concern — with identified threats, mapped controls, and named
21
+ ownership — rather than delegating security to delivery as an afterthought.
22
+ criteria:
23
+ - id: SEC-01
24
+ question: Does the artifact show material threats, required controls, and control ownership at a level suitable for the review?
25
+ description: >
26
+ A security overlay is applied when an artifact touches authentication, authorization,
27
+ personal data, privileged access, external integrations, or sensitive processing.
28
+ The criterion checks whether the artifact identifies material threats, maps required
29
+ controls to design elements, and assigns ownership — the three minimum elements
30
+ for a reviewable security treatment. Designs that assert compliance without
31
+ demonstrating it cannot be approved at governance level.
32
+ metric_type: ordinal
33
+ scale: [0, 1, 2, 3, 4, "N/A"]
34
+ gate:
35
+ enabled: true
36
+ severity: critical
37
+ failure_effect: Reject or escalate when mandatory controls are unaddressed
38
+ required_evidence:
39
+ - threat view or risk list
40
+ - control mapping to design elements
41
+ - ownership assignments
42
+ scoring_guide:
43
+ "0": No material security treatment anywhere in the artifact
44
+ "1": Security assertions only (e.g. 'the system will be secure') with no specifics
45
+ "2": Partial threat or control view — some threats identified or some controls mapped but ownership absent
46
+ "3": Material controls and their owners addressed for key threat areas
47
+ "4": Threats, controls, residual risk, exceptions, and ownership are all explicit and decision-useful
48
+ anti_patterns:
49
+ - Security delegated to delivery without any design response
50
+ - No exception handling for non-compliant elements
51
+ - Security section absent from artifact touching personal data
52
+ - Controls copied from a policy document without mapping to this design
53
+ examples:
54
+ good:
55
+ - >
56
+ "Threat: Unauthorized access to customer PII. Control: Role-based access control,
57
+ OAuth 2.0/OIDC, audit logging to SIEM. Owner: Security Architecture. Residual risk:
58
+ Medium — pending MFA enforcement (planned Q3). Exception: Legacy admin portal —
59
+ temporary exemption granted by CISO 2026-01-15, expires 2026-07-15."
60
+ bad:
61
+ - >
62
+ "Security will be handled according to enterprise security standards. The delivery
63
+ team will ensure security requirements are met. [No threats identified, no controls
64
+ mapped to this design, no ownership]"
65
+ decision_tree: >
66
+ IF no security section and no security-related content THEN score 0.
67
+ IF security mentioned only as assertion or intention THEN score 1.
68
+ IF partial threat or control view exists but material gaps remain THEN score 2.
69
+ IF material controls addressed with owners for key threat areas THEN score 3.
70
+ IF threats, controls, residual risk, exceptions, and ownership are all explicit THEN score 4.
71
+ remediation_hints:
72
+ - Map controls explicitly to architecture decisions and components
73
+ - Record residual risk, exception approvals, and named owners
74
+ - Produce a threat model or risk register, even if lightweight
75
+ - Distinguish between controls in the design vs. controls in the platform/infrastructure
76
+
77
+ scoring:
78
+ scale: 0-4 ordinal plus N/A
79
+ method: append_to_base_rubric
80
+ thresholds:
81
+ critical_security_failure: Escalate or reject according to control policy when SEC-01 < 2 or gate fails
82
+
83
+ outputs:
84
+ require_evidence_refs: true
85
+ require_confidence: true
86
+ require_actions: true
87
+ require_evidence_class: true
88
+ require_evidence_anchors: true
89
+ formats:
90
+ - yaml
91
+ - json
92
+ - markdown-report
@@ -0,0 +1,225 @@
1
+ rubric_id: EAROS-ADR-001
2
+ version: 2.0.0
3
+ kind: profile
4
+ title: Architecture Decision Record Profile
5
+ status: approved
6
+ artifact_type: architecture_decision_record
7
+ inherits:
8
+ - EAROS-CORE-002
9
+ design_method: decision_centred
10
+ purpose:
11
+ - decision_review
12
+ - decision_quality_review
13
+ - knowledge_retention_review
14
+ stakeholders:
15
+ - architect
16
+ - engineering_lead
17
+ - maintainers
18
+ - governance
19
+ viewpoints:
20
+ - decision
21
+ - context
22
+ - consequence
23
+
24
+ dimensions:
25
+ - id: AD1
26
+ name: Decision clarity
27
+ description: >
28
+ An ADR that is unclear about what decision was actually made is worse than no ADR —
29
+ it creates false confidence that a decision was documented while leaving room for
30
+ misinterpretation. The decision statement is the most critical element of the record.
31
+ weight: 1.0
32
+ criteria:
33
+ - id: ADR-01
34
+ question: Is the decision stated as a clear, testable, singular decision rather than a vague discussion topic?
35
+ description: >
36
+ The core value of an ADR is capturing a specific decision for future reference.
37
+ Vague language like 'we will investigate microservices' or 'consider adopting
38
+ event-driven architecture' is a study plan, not a decision. A testable decision
39
+ can be verified objectively: either the codebase uses Kafka or it does not. A
40
+ singular decision means one ADR documents one choice; compound ADRs mixing
41
+ multiple decisions are ambiguous and hard to supersede.
42
+ metric_type: ordinal
43
+ scale: [0, 1, 2, 3, 4, "N/A"]
44
+ gate:
45
+ enabled: true
46
+ severity: major
47
+ failure_effect: Cannot pass above conditional_pass
48
+ required_evidence:
49
+ - decision statement
50
+ - status (accepted/proposed/superseded)
51
+ - date or trigger context
52
+ scoring_guide:
53
+ "0": No decision — document is meeting notes, discussion, or study results only
54
+ "1": Topic only — subject area identified but no decision reached or stated
55
+ "2": Partly clear decision — stated but ambiguous, compound, or untestable
56
+ "3": Clear decision with explicit scope — singular and understandable
57
+ "4": Clear, bounded, and testable decision — verifiable, scoped, and dated with trigger context
58
+ anti_patterns:
59
+ - ADR as meeting notes with multiple unrelated items
60
+ - Multiple unrelated decisions in one record
61
+ - Vague outcome language ('we will look into', 'consider using')
62
+ - Decision scope undefined (which service, which context?)
63
+ examples:
64
+ good:
65
+ - >
66
+ "Decision: We will use PostgreSQL as the primary datastore for the Order Service,
67
+ effective Q2 2026. Status: Accepted. This decision applies only to the Order Service
68
+ domain; other services may choose different stores with separate justification."
69
+ bad:
70
+ - >
71
+ "The team discussed various database options. After reviewing the pros and cons, the
72
+ team agreed to proceed with the investigation and revisit next sprint. [No decision
73
+ reached, no scope, no date]"
74
+ decision_tree: >
75
+ IF no decision section exists THEN score 0.
76
+ IF document is meeting notes or discussion summary with no clear decision THEN score 1.
77
+ IF decision stated but ambiguous, compound, or untestable THEN score 2.
78
+ IF single, clear decision with stated scope THEN score 3.
79
+ IF single, clear, bounded, and testable decision with explicit date and trigger context THEN score 4.
80
+ remediation_hints:
81
+ - Rewrite the decision in one declarative sentence in the form 'We will use X for Y'
82
+ - Split compound ADRs into separate records
83
+ - Add explicit scope (which service, which domain, which timeframe)
84
+
85
+ - id: AD2
86
+ name: Option space and consequences
87
+ description: >
88
+ The option space captures the intellectual work behind the decision. Future maintainers
89
+ must be able to understand why the chosen option was selected and why alternatives were
90
+ rejected — without needing to reconstruct the original thinking from memory or oral history.
91
+ weight: 1.0
92
+ criteria:
93
+ - id: ADR-02
94
+ question: Does the ADR capture meaningful alternatives and the consequences of the chosen decision?
95
+ description: >
96
+ An ADR that only documents the chosen option is only half an ADR. The value for
97
+ future readers lies in understanding the rejected alternatives and the consequences
98
+ of the chosen path — including the negative consequences accepted as an explicit
99
+ trade-off. Without this, future maintainers cannot judge whether the original
100
+ decision still applies in a changed context.
101
+ metric_type: ordinal
102
+ scale: [0, 1, 2, 3, 4, "N/A"]
103
+ gate: false
104
+ required_evidence:
105
+ - alternatives considered
106
+ - pros and cons of alternatives
107
+ - consequences of the chosen option (including negative)
108
+ - reversibility assessment
109
+ scoring_guide:
110
+ "0": No alternatives or consequences documented
111
+ "1": Superficial mention — 'we considered X but chose Y' with no reasoning
112
+ "2": Partial treatment — alternatives listed or consequences noted but not both
113
+ "3": Meaningful alternatives with pros/cons and genuine consequences stated
114
+ "4": Strong rationale with explicit trade-offs, reversibility conditions, and downstream effects on other decisions
115
+ anti_patterns:
116
+ - Only positive consequences documented
117
+ - Rejected options listed without explanation
118
+ - No reversibility or exit conditions
119
+ - Consequences omit known downsides
120
+ examples:
121
+ good:
122
+ - >
123
+ "Alternatives: (A) MongoDB — rejected: no ACID guarantees for financial data.
124
+ (B) MySQL — rejected: licensing cost at expected volume exceeds budget. Consequences:
125
+ PostgreSQL requires managed RDS service (adds £1,200/month opex). Trade-off: higher
126
+ cost accepted for stronger consistency guarantees. Reversible: yes, with data migration;
127
+ trigger: if managed PostgreSQL cost exceeds £5,000/month for 2 consecutive quarters."
128
+ bad:
129
+ - >
130
+ "We considered other options but PostgreSQL was the best fit for our needs.
131
+ [No alternatives named, no consequences, no reversibility]"
132
+ decision_tree: >
133
+ IF no alternatives or consequences THEN score 0.
134
+ IF one-sentence mention of alternatives with no reasoning THEN score 1.
135
+ IF alternatives listed without meaningful comparison OR consequences superficial THEN score 2.
136
+ IF meaningful alternatives with pros/cons AND genuine consequences including negatives THEN score 3.
137
+ IF explicit trade-offs, reversibility conditions, and downstream effects on other decisions THEN score 4.
138
+ remediation_hints:
139
+ - Add a named alternatives table with rejection reasoning for each
140
+ - Document negative consequences alongside positive ones
141
+ - Define explicit reversibility conditions and triggers
142
+
143
+ - id: AD3
144
+ name: Decision durability and traceability
145
+ description: >
146
+ An ADR is an investment in institutional memory. For that investment to pay off, the
147
+ decision must remain interpretable years later by people who were not in the room.
148
+ This requires the context that made the decision necessary, the conditions under which
149
+ it should be revisited, and links to the artifacts and processes it affects.
150
+ weight: 1.0
151
+ criteria:
152
+ - id: ADR-03
153
+ question: Can a future reader understand why the decision was made and when it should be revisited?
154
+ description: >
155
+ Architecture decisions made today will be revisited, challenged, or overridden by
156
+ teams years from now. An ADR with no review triggers assumes the world is static.
157
+ Specifying when to revisit — and making the decision interpretable to future readers
158
+ who lack the original context — turns an ADR from a historical artifact into an
159
+ active governance tool that signals when the decision has been invalidated.
160
+ metric_type: ordinal
161
+ scale: [0, 1, 2, 3, 4, "N/A"]
162
+ gate: false
163
+ required_evidence:
164
+ - business or technical context that motivated the decision
165
+ - drivers that made this the right choice at the time
166
+ - review triggers or conditions for revisiting
167
+ - links to related artifacts or superseded decisions
168
+ scoring_guide:
169
+ "0": No durable context — only the decision itself with no surrounding information
170
+ "1": Weak historical trace — vague context or no review triggers
171
+ "2": Some future usefulness — context provided but incomplete or generic
172
+ "3": Mostly durable and traceable — sufficient context for future reader, review triggers defined
173
+ "4": Durable, traceable, and reviewable — complete context, specific triggers, links to related artifacts, and supersession chain
174
+ anti_patterns:
175
+ - Decision depends entirely on oral history for interpretation
176
+ - No revisit conditions or triggers defined
177
+ - Context so generic it applies to any decision
178
+ - Links to superseded decisions or related ADRs absent
179
+ examples:
180
+ good:
181
+ - >
182
+ "Context: Q1 2026 cost optimization initiative required switching from managed cloud
183
+ database to self-managed. Business driver: reduce infrastructure spend by 20% (OKR).
184
+ Review triggers: (1) team size drops below 3 DBAs, (2) managed PostgreSQL pricing
185
+ drops below self-managed TCO, (3) each major PostgreSQL version upgrade requires
186
+ assessment. Supersedes: ADR-007 (MySQL selection 2023). Related: RFC-022
187
+ (infrastructure cost policy), ADR-012 (backup strategy)."
188
+ bad:
189
+ - >
190
+ "This decision was made because the current approach was not working well.
191
+ [No specific context, no drivers, no review triggers, no links]"
192
+ decision_tree: >
193
+ IF no context or durable information beyond the decision itself THEN score 0.
194
+ IF minimal context with no links or review triggers THEN score 1.
195
+ IF some context provided but incomplete or generic, or triggers missing THEN score 2.
196
+ IF sufficient context for future reader AND review triggers defined THEN score 3.
197
+ IF complete context, specific triggers, links to related artifacts, and supersession chain THEN score 4.
198
+ remediation_hints:
199
+ - Add the business or technical context that made this decision necessary
200
+ - Define at least two specific review triggers
201
+ - Link to superseded decisions and related ADRs, RFCs, or policy documents
202
+
203
+ scoring:
204
+ scale: 0-4 ordinal plus N/A
205
+ method: gates_first_then_weighted_average
206
+ thresholds:
207
+ pass: No critical gate failure, overall >= 3.2, and no dimension < 2.0
208
+ conditional_pass: No critical gate failure and overall 2.4-3.19 or one weak dimension
209
+ rework_required: Overall < 2.4 or repeated weak dimensions
210
+ reject: Critical gate failure or mandatory control breach
211
+ not_reviewable: Evidence insufficient for core gate criteria
212
+ profile_specific_escalation: Escalate when ADR-01 < 3 for strategic or cross-team decisions
213
+ na_policy: Exclude N/A criteria from denominator; evaluator must justify N/A
214
+ confidence_policy: Confidence reported separately, must not modify score
215
+
216
+ outputs:
217
+ require_evidence_refs: true
218
+ require_confidence: true
219
+ require_actions: true
220
+ require_evidence_class: true
221
+ require_evidence_anchors: true
222
+ formats:
223
+ - yaml
224
+ - json
225
+ - markdown-report