@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.
- package/README.md +156 -0
- package/assets/init/.agents/skills/earos-artifact-gen/SKILL.md +106 -0
- package/assets/init/.agents/skills/earos-artifact-gen/references/interview-guide.md +313 -0
- package/assets/init/.agents/skills/earos-artifact-gen/references/output-guide.md +367 -0
- package/assets/init/.agents/skills/earos-assess/SKILL.md +212 -0
- package/assets/init/.agents/skills/earos-assess/references/calibration-benchmarks.md +160 -0
- package/assets/init/.agents/skills/earos-assess/references/output-templates.md +311 -0
- package/assets/init/.agents/skills/earos-assess/references/scoring-protocol.md +281 -0
- package/assets/init/.agents/skills/earos-calibrate/SKILL.md +153 -0
- package/assets/init/.agents/skills/earos-calibrate/references/agreement-metrics.md +188 -0
- package/assets/init/.agents/skills/earos-calibrate/references/calibration-protocol.md +263 -0
- package/assets/init/.agents/skills/earos-create/SKILL.md +257 -0
- package/assets/init/.agents/skills/earos-create/references/criterion-writing-guide.md +268 -0
- package/assets/init/.agents/skills/earos-create/references/dependency-rules.md +193 -0
- package/assets/init/.agents/skills/earos-create/references/rubric-interview-guide.md +123 -0
- package/assets/init/.agents/skills/earos-create/references/validation-checklist.md +238 -0
- package/assets/init/.agents/skills/earos-profile-author/SKILL.md +251 -0
- package/assets/init/.agents/skills/earos-profile-author/references/criterion-writing-guide.md +280 -0
- package/assets/init/.agents/skills/earos-profile-author/references/design-methods.md +158 -0
- package/assets/init/.agents/skills/earos-profile-author/references/profile-checklist.md +173 -0
- package/assets/init/.agents/skills/earos-remediate/SKILL.md +118 -0
- package/assets/init/.agents/skills/earos-remediate/references/output-template.md +199 -0
- package/assets/init/.agents/skills/earos-remediate/references/remediation-patterns.md +330 -0
- package/assets/init/.agents/skills/earos-report/SKILL.md +85 -0
- package/assets/init/.agents/skills/earos-report/references/portfolio-template.md +181 -0
- package/assets/init/.agents/skills/earos-report/references/single-artifact-template.md +168 -0
- package/assets/init/.agents/skills/earos-review/SKILL.md +130 -0
- package/assets/init/.agents/skills/earos-review/references/challenge-patterns.md +163 -0
- package/assets/init/.agents/skills/earos-review/references/output-template.md +180 -0
- package/assets/init/.agents/skills/earos-template-fill/SKILL.md +177 -0
- package/assets/init/.agents/skills/earos-template-fill/references/evidence-writing-guide.md +186 -0
- package/assets/init/.agents/skills/earos-template-fill/references/section-rubric-mapping.md +200 -0
- package/assets/init/.agents/skills/earos-validate/SKILL.md +113 -0
- package/assets/init/.agents/skills/earos-validate/references/fix-patterns.md +281 -0
- package/assets/init/.agents/skills/earos-validate/references/validation-checks.md +287 -0
- package/assets/init/.claude/CLAUDE.md +4 -0
- package/assets/init/AGENTS.md +293 -0
- package/assets/init/CLAUDE.md +635 -0
- package/assets/init/README.md +507 -0
- package/assets/init/calibration/gold-set/.gitkeep +0 -0
- package/assets/init/calibration/results/.gitkeep +0 -0
- package/assets/init/core/core-meta-rubric.yaml +643 -0
- package/assets/init/docs/consistency-report.md +325 -0
- package/assets/init/docs/getting-started.md +194 -0
- package/assets/init/docs/profile-authoring-guide.md +51 -0
- package/assets/init/docs/terminology.md +126 -0
- package/assets/init/earos.manifest.yaml +104 -0
- package/assets/init/evaluations/.gitkeep +0 -0
- package/assets/init/examples/aws-event-driven-order-processing/artifact.yaml +2056 -0
- package/assets/init/examples/aws-event-driven-order-processing/evaluation.yaml +973 -0
- package/assets/init/examples/aws-event-driven-order-processing/report.md +244 -0
- package/assets/init/examples/example-solution-architecture.evaluation.yaml +136 -0
- package/assets/init/examples/multi-cloud-data-analytics/artifact.yaml +715 -0
- package/assets/init/overlays/data-governance.yaml +94 -0
- package/assets/init/overlays/regulatory.yaml +154 -0
- package/assets/init/overlays/security.yaml +92 -0
- package/assets/init/profiles/adr.yaml +225 -0
- package/assets/init/profiles/capability-map.yaml +223 -0
- package/assets/init/profiles/reference-architecture.yaml +426 -0
- package/assets/init/profiles/roadmap.yaml +205 -0
- package/assets/init/profiles/solution-architecture.yaml +227 -0
- package/assets/init/research/architecture-assessment-rubrics-research.docx +0 -0
- package/assets/init/research/architecture-assessment-rubrics-research.md +566 -0
- package/assets/init/research/reference-architecture-research.md +751 -0
- package/assets/init/standard/EAROS.md +1426 -0
- package/assets/init/standard/schemas/artifact.schema.json +1295 -0
- package/assets/init/standard/schemas/artifact.uischema.json +65 -0
- package/assets/init/standard/schemas/evaluation.schema.json +284 -0
- package/assets/init/standard/schemas/rubric.schema.json +383 -0
- package/assets/init/templates/evaluation-record.template.yaml +58 -0
- package/assets/init/templates/new-profile.template.yaml +65 -0
- package/bin.js +188 -0
- package/dist/assets/_basePickBy-BVu6YmSW.js +1 -0
- package/dist/assets/_baseUniq-CWRzQDz_.js +1 -0
- package/dist/assets/arc-CyDBhtDM.js +1 -0
- package/dist/assets/architectureDiagram-2XIMDMQ5-BH6O4dvN.js +36 -0
- package/dist/assets/blockDiagram-WCTKOSBZ-2xmwdjpg.js +132 -0
- package/dist/assets/c4Diagram-IC4MRINW-BNmPRFJF.js +10 -0
- package/dist/assets/channel-CiySTNoJ.js +1 -0
- package/dist/assets/chunk-4BX2VUAB-DGQTvirp.js +1 -0
- package/dist/assets/chunk-55IACEB6-DNMAQAC_.js +1 -0
- package/dist/assets/chunk-FMBD7UC4-BJbVTQ5o.js +15 -0
- package/dist/assets/chunk-JSJVCQXG-BCxUL74A.js +1 -0
- package/dist/assets/chunk-KX2RTZJC-H7wWZOfz.js +1 -0
- package/dist/assets/chunk-NQ4KR5QH-BK4RlTQF.js +220 -0
- package/dist/assets/chunk-QZHKN3VN-0chxDV5g.js +1 -0
- package/dist/assets/chunk-WL4C6EOR-DexfQ-AV.js +189 -0
- package/dist/assets/classDiagram-VBA2DB6C-D7luWJQn.js +1 -0
- package/dist/assets/classDiagram-v2-RAHNMMFH-D7luWJQn.js +1 -0
- package/dist/assets/clone-ylgRbd3D.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-DS2IOCfZ.js +1 -0
- package/dist/assets/cytoscape.esm-CyJtwmzi.js +331 -0
- package/dist/assets/dagre-KLK3FWXG-BbSoTTa3.js +4 -0
- package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/assets/diagram-E7M64L7V-C9TvYgv0.js +24 -0
- package/dist/assets/diagram-IFDJBPK2-DowUMWrg.js +43 -0
- package/dist/assets/diagram-P4PSJMXO-BL6nrnQF.js +24 -0
- package/dist/assets/erDiagram-INFDFZHY-rXPRl8VM.js +70 -0
- package/dist/assets/flowDiagram-PKNHOUZH-DBRM99-W.js +162 -0
- package/dist/assets/ganttDiagram-A5KZAMGK-INcWFsBT.js +292 -0
- package/dist/assets/gitGraphDiagram-K3NZZRJ6-DMwpfE91.js +65 -0
- package/dist/assets/graph-DLQn37b-.js +1 -0
- package/dist/assets/index-BFFITMT8.js +650 -0
- package/dist/assets/index-H7f6VTz1.css +1 -0
- package/dist/assets/infoDiagram-LFFYTUFH-B0f4TWRM.js +2 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/ishikawaDiagram-PHBUUO56-CsU6XimZ.js +70 -0
- package/dist/assets/journeyDiagram-4ABVD52K-CQ7ibNib.js +139 -0
- package/dist/assets/kanban-definition-K7BYSVSG-DzEN7THt.js +89 -0
- package/dist/assets/katex-B1X10hvy.js +261 -0
- package/dist/assets/layout-C0dvb42R.js +1 -0
- package/dist/assets/linear-j4a8mGj7.js +1 -0
- package/dist/assets/mindmap-definition-YRQLILUH-DP8iEuCf.js +68 -0
- package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/assets/pieDiagram-SKSYHLDU-BpIAXgAm.js +30 -0
- package/dist/assets/quadrantDiagram-337W2JSQ-DrpXn5Eg.js +7 -0
- package/dist/assets/requirementDiagram-Z7DCOOCP-Bg7EwHlG.js +73 -0
- package/dist/assets/sankeyDiagram-WA2Y5GQK-BWagRs1F.js +10 -0
- package/dist/assets/sequenceDiagram-2WXFIKYE-q5jwhivG.js +145 -0
- package/dist/assets/stateDiagram-RAJIS63D-B_J9pE-2.js +1 -0
- package/dist/assets/stateDiagram-v2-FVOUBMTO-Q_1GcybB.js +1 -0
- package/dist/assets/timeline-definition-YZTLITO2-dv0jgQ0z.js +61 -0
- package/dist/assets/treemap-KZPCXAKY-Dt1dkIE7.js +162 -0
- package/dist/assets/vennDiagram-LZ73GAT5-BdO5RgRZ.js +34 -0
- package/dist/assets/xychartDiagram-JWTSCODW-CpDVe-8v.js +7 -0
- package/dist/index.html +23 -0
- package/export-docx.js +1583 -0
- package/init.js +353 -0
- package/manifest-cli.mjs +207 -0
- package/package.json +83 -0
- package/schemas/artifact.schema.json +1295 -0
- package/schemas/artifact.uischema.json +65 -0
- package/schemas/evaluation.schema.json +284 -0
- package/schemas/rubric.schema.json +383 -0
- 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
|