@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,281 @@
1
+ # Fix Patterns -- EAROS Validate
2
+
3
+ Common validation errors, root causes, and fixes. Read this after finding errors with earos-validate.
4
+
5
+ ---
6
+
7
+ ## How to Use This File
8
+
9
+ Each section corresponds to an error type from references/validation-checks.md.
10
+ Find your error, apply the fix, then re-run the relevant check to confirm.
11
+
12
+ **Rule:** earos-validate reports; it does not auto-fix. Present fixes to the user for review.
13
+
14
+ ---
15
+
16
+ ## Fix Pattern 1 -- Missing Required Top-Level Fields
17
+
18
+ Root cause: Profile authored before v2 or copied from an older template without the new fields.
19
+
20
+ Add missing outputs sub-fields:
21
+
22
+ outputs:
23
+ require_evidence_refs: true
24
+ require_confidence: true
25
+ require_actions: true
26
+ require_evidence_class: true
27
+ require_evidence_anchors: true
28
+
29
+ Add missing calibration block:
30
+
31
+ calibration:
32
+ required_before_production: true
33
+ minimum_examples: 3
34
+
35
+ Add missing change_log:
36
+
37
+ change_log:
38
+ - version: 1.0.0
39
+ date: "YYYY-MM-DD"
40
+ author: enterprise-architecture
41
+ notes: "Initial draft"
42
+
43
+ ---
44
+
45
+ ## Fix Pattern 2 -- Wrong scoring.method for Kind
46
+
47
+ Root cause: Overlay created by copying a profile without updating the scoring method.
48
+
49
+ Overlays must use:
50
+
51
+ scoring:
52
+ method: append_to_base_rubric
53
+
54
+ Profiles and core rubric must use:
55
+
56
+ scoring:
57
+ method: gates_first_then_weighted_average
58
+
59
+ ---
60
+
61
+ ## Fix Pattern 3 -- Missing inherits on Profile
62
+
63
+ Root cause: Profile created without the inherits declaration. Without this, core criteria are not applied.
64
+
65
+ Add after the header fields, before design_method:
66
+
67
+ inherits:
68
+ - EAROS-CORE-002
69
+
70
+ ---
71
+
72
+ ## Fix Pattern 4 -- Missing Criterion v2 Fields
73
+
74
+ The 13 required v2 fields must all be present. Common missing fields and fixes:
75
+
76
+ **decision_tree** -- must have IF/THEN branching logic. Placeholder text is not acceptable:
77
+
78
+ decision_tree: >
79
+ IF X absent: score 0.
80
+ IF X present but incomplete: score 1-2 depending on coverage.
81
+ IF X and Y both present with basic detail: score 3.
82
+ IF X and Y present with explicit rationale and evidence: score 4.
83
+
84
+ **examples.bad** -- must show the actual failure mode text (quotable), not a description of the failure:
85
+
86
+ examples:
87
+ good:
88
+ - "Section 4.2 explicitly lists A, B, C as in-scope and D, E as out-of-scope."
89
+ bad:
90
+ - "The scope of this project covers the relevant systems."
91
+
92
+ **scoring_guide** -- all 5 levels ("0" through "4") must be present and non-empty. Authors most
93
+ commonly skip "0" or "4". Level descriptors must be criterion-specific, not generic:
94
+
95
+ scoring_guide:
96
+ "0": "No [criterion-specific evidence] present."
97
+ "1": "Mentioned but too vague for decision support."
98
+ "2": "Addressed but incomplete; key elements missing."
99
+ "3": "Clearly addressed with adequate evidence; only minor gaps."
100
+ "4": "Fully addressed, well evidenced, internally consistent."
101
+
102
+ ---
103
+
104
+ ## Fix Pattern 5 -- Invalid gate Configuration
105
+
106
+ Valid severity values: critical, major, advisory. Other values (high, low, warn, blocker) are invalid.
107
+
108
+ Disabled gate must use the canonical form:
109
+
110
+ gate: false
111
+
112
+ Not the verbose form (style violation, causes YAML-STYLE warnings):
113
+
114
+ gate:
115
+ enabled: false
116
+
117
+ Enabled gate must have failure_effect explaining what happens when the gate fails:
118
+
119
+ gate:
120
+ enabled: true
121
+ severity: major
122
+ failure_effect: >
123
+ Cannot achieve Pass status. Status caps at Conditional Pass
124
+ until this criterion scores >= 2.
125
+
126
+ Gate distribution targets for a well-designed profile:
127
+ - gate: false -- most criteria (60-70%)
128
+ - severity: advisory -- 0-3 criteria
129
+ - severity: major -- 1-2 criteria
130
+ - severity: critical -- 0-1 criteria (reserved for mandatory compliance controls only)
131
+
132
+ ---
133
+
134
+ ## Fix Pattern 6 -- Duplicate Criterion IDs
135
+
136
+ Root cause: Criterion ID from one profile reused in another, or accidental duplication within a file.
137
+
138
+ Criterion IDs must be globally unique across all files. Add a profile-specific prefix to resolve collisions:
139
+
140
+ # Before: id: SCP-01 (conflicts with core criterion SCP-01)
141
+ # After:
142
+ id: SA-SCP-01
143
+
144
+ Naming conventions:
145
+ - Reference Architecture: RA-[AREA]-NN
146
+ - Solution Architecture: SA-[AREA]-NN
147
+ - ADR: ADR-[AREA]-NN
148
+ - Capability Map: CM-[AREA]-NN
149
+ - Roadmap: RM-[AREA]-NN
150
+ - Overlays: [PREFIX]-[CONCERN]-NN (e.g., SEC-AUTH-01, DG-CLASS-01)
151
+
152
+ After renaming: search all evaluation records for the old ID and update them.
153
+
154
+ ---
155
+
156
+ ## Fix Pattern 7 -- Broken Cross-References
157
+
158
+ **inherits version mismatch:**
159
+
160
+ Read core/core-meta-rubric.yaml to find the actual rubric_id value. Update the profile to match exactly:
161
+
162
+ inherits:
163
+ - EAROS-CORE-002
164
+
165
+ **Missing overlay in evaluation record:**
166
+
167
+ Either add the overlay YAML to overlays/ with the referenced ID, or remove the overlay_applied reference
168
+ if the overlay was not actually applied.
169
+
170
+ ---
171
+
172
+ ## Fix Pattern 8 -- Evaluation Record Status Inconsistency
173
+
174
+ Root cause: Status was set manually and not rechecked after scores changed, or gate logic was not applied.
175
+
176
+ Recompute status from rules (apply in order):
177
+ 1. Any critical gate failure -> reject (ignore overall_score)
178
+ 2. Any major gate that caps -> conditional_pass (maximum allowed)
179
+ 3. overall_score >= 3.2 AND no dimension < 2.0 -> pass
180
+ 4. overall_score 2.4-3.19 -> conditional_pass
181
+ 5. overall_score < 2.4 OR any dimension < 2.0 -> rework_required
182
+ 6. Evidence insufficient to score core gate criteria -> not_reviewable
183
+
184
+ Example fix:
185
+
186
+ # Before (wrong -- score of 3.4 is pass, not conditional_pass)
187
+ status: conditional_pass
188
+ overall_score: 3.4
189
+ gate_failures: []
190
+
191
+ # After (correct)
192
+ status: pass
193
+ overall_score: 3.4
194
+ gate_failures: []
195
+
196
+ ---
197
+
198
+ ## Fix Pattern 9 -- Documentation Accuracy
199
+
200
+ **Stale file references:** Update documentation to remove references to non-existent files,
201
+ or create the missing file if it genuinely should exist.
202
+
203
+ **Wrong criterion counts:** Count every item under criteria: within each dimension block.
204
+ Update the documentation claim to match the actual count from the YAML.
205
+
206
+ **Mismatched rubric IDs:** Read the YAML file to get the exact rubric_id value.
207
+ Update documentation to use the exact string -- even minor differences (CORE-001 vs CORE-002) matter.
208
+
209
+ ---
210
+
211
+ ## Fix Pattern 10 -- YAML Style Violations
212
+
213
+ **Unquoted numeric keys in scoring_guide:**
214
+
215
+ # Before (causes parsing issues in some YAML tools)
216
+ scoring_guide:
217
+ 0: "Absent"
218
+
219
+ # After (EAROS convention)
220
+ scoring_guide:
221
+ "0": "Absent"
222
+
223
+ **4-space to 2-space indentation:**
224
+
225
+ # Before (4-space -- violates EAROS convention)
226
+ dimensions:
227
+ - id: CM-D1
228
+ name: Capability coverage
229
+
230
+ # After (2-space -- correct)
231
+ dimensions:
232
+ - id: CM-D1
233
+ name: Capability coverage
234
+
235
+ **Placeholder decision_tree (no branching logic):**
236
+
237
+ # Before (not acceptable)
238
+ decision_tree: "Apply the scoring guide to determine the score."
239
+
240
+ # After (valid -- observable conditions, explicit branches)
241
+ decision_tree: >
242
+ IF no capability areas defined: score 0.
243
+ IF 1-2 areas defined with partial coverage: score 1-2.
244
+ IF all relevant areas covered with named owners: score 3.
245
+ IF all areas, owners, maturity levels, and gap analysis present: score 4.
246
+
247
+ **Verbose gate: false (style violation only, not an error):**
248
+
249
+ # Before
250
+ gate:
251
+ enabled: false
252
+
253
+ # After
254
+ gate: false
255
+
256
+ ---
257
+
258
+ ## Quick Reference -- Error Code to Fix Pattern
259
+
260
+ | Error code | Fix pattern |
261
+ |-----------|-------------|
262
+ | MISSING top-level field | Fix Pattern 1 |
263
+ | INVALID scoring.method | Fix Pattern 2 |
264
+ | MISSING inherits | Fix Pattern 3 |
265
+ | MISSING criterion field | Fix Pattern 4 |
266
+ | INVALID gate config | Fix Pattern 5 |
267
+ | DUPLICATE ID | Fix Pattern 6 |
268
+ | BROKEN cross-reference | Fix Pattern 7 |
269
+ | STATUS_INCONSISTENCY | Fix Pattern 8 |
270
+ | DOCS accuracy | Fix Pattern 9 |
271
+ | YAML-STYLE violations | Fix Pattern 10 |
272
+
273
+ ---
274
+
275
+ ## After Fixing
276
+
277
+ After applying any fix:
278
+ 1. Re-run earos-validate on the affected files to confirm the error is resolved
279
+ 2. If the fix touched scoring thresholds or gate logic, re-run earos-calibrate on any changed profile
280
+ 3. If a criterion ID changed, search all evaluation records for the old ID and update them
281
+ 4. Update the changed file change_log with a PATCH version bump and a brief note describing the fix
@@ -0,0 +1,287 @@
1
+ # Validation Checks — EAROS Validate
2
+
3
+ Detailed procedures for each of the 7 validation checks. Run in order — schema conformance first, documentation accuracy last.
4
+
5
+ ---
6
+
7
+ ## Check 1 — Schema Conformance
8
+
9
+ **Purpose:** Verify all YAML files satisfy `standard/schemas/rubric.schema.json` (for rubrics) and `standard/schemas/evaluation.schema.json` (for evaluation records).
10
+
11
+ **Files to check:**
12
+ - `core/core-meta-rubric.yaml`
13
+ - `profiles/*.yaml`
14
+ - `overlays/*.yaml`
15
+ - `examples/*.evaluation.yaml` (against evaluation schema)
16
+
17
+ **Required top-level fields for rubric/profile/overlay:**
18
+
19
+ | Field | Required | Notes |
20
+ |-------|----------|-------|
21
+ | `rubric_id` | Yes | Pattern: `EAROS-[A-Z]+-[0-9]{3}` |
22
+ | `version` | Yes | Semver: `X.Y.Z` |
23
+ | `kind` | Yes | `core_rubric` \| `profile` \| `overlay` |
24
+ | `title` | Yes | Non-empty string |
25
+ | `artifact_type` | Yes | `any` for overlays; specific type for profiles |
26
+ | `dimensions` | Yes | Non-empty array |
27
+ | `scoring` | Yes | Must have `method` and `thresholds` |
28
+ | `outputs` | Yes | Must have `require_evidence_refs`, `require_confidence`, `require_actions`, `require_evidence_class`, `require_evidence_anchors` |
29
+
30
+ **Additional rules by kind:**
31
+
32
+ | Kind | Additional Requirements |
33
+ |------|------------------------|
34
+ | `profile` | Must have `inherits: [EAROS-CORE-002]` |
35
+ | `overlay` | Must NOT have `inherits`; `scoring.method` must be `append_to_base_rubric` |
36
+ | `core_rubric` | No `inherits`; `scoring.method` must be `gates_first_then_weighted_average` |
37
+
38
+ **Per-dimension required fields:** `id`, `name`, `description`, `weight`, `criteria`
39
+
40
+ **Per-criterion required fields (v2 completeness — see Check 2):** 13 fields total.
41
+
42
+ **Error format:**
43
+ ```
44
+ [SCHEMA] profiles/capability-map.yaml
45
+ MISSING: outputs.require_evidence_anchors
46
+ MISSING: dimensions[1].criteria[0].examples
47
+ INVALID: version "1" — must be semver (X.Y.Z)
48
+ ```
49
+
50
+ ---
51
+
52
+ ## Check 2 — Criterion v2 Completeness
53
+
54
+ **Purpose:** Verify every criterion has all 13 required v2 fields.
55
+
56
+ **The 13 required fields:**
57
+
58
+ | # | Field | What to check |
59
+ |---|-------|---------------|
60
+ | 1 | `id` | Non-empty, unique within file |
61
+ | 2 | `question` | Non-empty string |
62
+ | 3 | `description` | Non-empty string |
63
+ | 4 | `metric_type` | Must be `ordinal` |
64
+ | 5 | `scale` | Must be `[0, 1, 2, 3, 4, "N/A"]` |
65
+ | 6 | `gate` | Either `gate: false` or object with `enabled`, `severity`, `failure_effect` |
66
+ | 7 | `required_evidence` | Non-empty list |
67
+ | 8 | `scoring_guide` | Must have keys `"0"`, `"1"`, `"2"`, `"3"`, `"4"` — all non-empty |
68
+ | 9 | `anti_patterns` | Non-empty list |
69
+ | 10 | `examples` | Must have sub-keys `good` (non-empty list) and `bad` (non-empty list) |
70
+ | 11 | `decision_tree` | Non-empty string — must contain IF/THEN branching language |
71
+ | 12 | `remediation_hints` | Non-empty list |
72
+ | 13 | `weight` (on dimension, not criterion) | Numeric, typically 0.5–2.0 |
73
+
74
+ **Common v2 gaps to check specifically:**
75
+ - `examples` key exists but has no `good` or `bad` sub-keys
76
+ - `scoring_guide` missing `"0"` or `"4"` (authors skip extremes)
77
+ - `decision_tree` is a placeholder like "See scoring guide" (not acceptable)
78
+ - `gate: false` written as `gate: {enabled: false}` (style violation, not error, but flag it)
79
+
80
+ **Error format:**
81
+ ```
82
+ [V2-COMPLETENESS] profiles/solution-architecture.yaml
83
+ Criterion SCP-01:
84
+ MISSING: examples.bad
85
+ INCOMPLETE: scoring_guide missing key "4"
86
+ Criterion TRD-01:
87
+ MISSING: decision_tree (placeholder detected: "Apply scoring guide")
88
+ ```
89
+
90
+ ---
91
+
92
+ ## Check 3 — ID Uniqueness
93
+
94
+ **Purpose:** Verify that criterion IDs are unique across the file AND (for profiles) do not conflict with core criterion IDs.
95
+
96
+ **Core criterion IDs (from `core-meta-rubric.yaml`):** Load the core YAML first; extract all criterion IDs. These are reserved and must not be reused in profiles or overlays.
97
+
98
+ **Within-file uniqueness:** For each file, collect all criterion IDs under all dimensions. Flag any duplicates.
99
+
100
+ **Cross-file uniqueness:** IDs in profiles and overlays should not collide with core IDs. Two profile files may use the same ID pattern (e.g., `SCP-01` in two profiles) only if they are genuinely different rubrics — flag these as warnings for human review.
101
+
102
+ **Rubric ID format check:** All `rubric_id` values must follow `EAROS-[CATEGORY]-[NNN]`:
103
+ - Core: `EAROS-CORE-NNN`
104
+ - Profiles: `EAROS-[ARTIFACT]-NNN` (e.g., `EAROS-REFARCH-001`)
105
+ - Overlays: `EAROS-OVR-[CONCERN]-NNN` (e.g., `EAROS-OVR-SEC-001`)
106
+
107
+ **Error format:**
108
+ ```
109
+ [ID-UNIQUENESS] profiles/reference-architecture.yaml
110
+ DUPLICATE criterion ID: RA-D1-VIEW-01 appears at dimensions[0].criteria[0] and dimensions[0].criteria[3]
111
+
112
+ [ID-CONFLICT] profiles/solution-architecture.yaml
113
+ Criterion SCP-01 conflicts with core criterion SCP-01 — use a profile-scoped prefix (e.g., SA-SCP-01)
114
+
115
+ [ID-FORMAT] overlays/regulatory.yaml
116
+ rubric_id "EAROS-REG-001" does not match overlay pattern EAROS-OVR-[CONCERN]-NNN
117
+ ```
118
+
119
+ ---
120
+
121
+ ## Check 4 — Cross-Reference Validation
122
+
123
+ **Purpose:** Verify that `inherits` references and overlay applications are internally consistent.
124
+
125
+ **Checks to perform:**
126
+
127
+ 1. **Inherits resolution:** Every profile must have `inherits: [EAROS-CORE-002]`. Verify that `EAROS-CORE-002` matches the `rubric_id` in `core/core-meta-rubric.yaml`.
128
+
129
+ 2. **Evaluation record rubric references:** In `examples/*.evaluation.yaml`, the `rubric_id` field must match a rubric that exists in the project. Check that:
130
+ - `rubric_id` in the record matches an actual YAML file's `rubric_id`
131
+ - If `overlays_applied` is listed, each referenced overlay must exist
132
+
133
+ 3. **Dimension weight sum:** Weights don't need to sum to 1.0 (they're relative), but any dimension weight of 0 or negative is a data error.
134
+
135
+ 4. **Gate severity vocabulary:** All `gate.severity` values must be from the allowed set: `none`, `advisory`, `major`, `critical`.
136
+
137
+ 5. **Status threshold consistency:** In `scoring.thresholds`, verify numeric values are consistent with the standard:
138
+ - Pass threshold ≥ 3.2
139
+ - Conditional pass lower bound 2.4
140
+ - Rework threshold < 2.4
141
+
142
+ **Error format:**
143
+ ```
144
+ [CROSS-REF] profiles/adr.yaml
145
+ inherits references EAROS-CORE-002 but core rubric_id is EAROS-CORE-001 — version mismatch
146
+
147
+ [CROSS-REF] examples/example-solution-architecture.evaluation.yaml
148
+ overlay_applied "EAROS-OVR-SEC-002" not found in overlays/ directory
149
+
150
+ [CROSS-REF] profiles/roadmap.yaml
151
+ dimension RM-D3 has weight: 0 — must be positive
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Check 5 — Evaluation Record Schema
157
+
158
+ **Purpose:** Verify evaluation record YAML files conform to `standard/schemas/evaluation.schema.json`.
159
+
160
+ **Required top-level fields:**
161
+
162
+ | Field | Notes |
163
+ |-------|-------|
164
+ | `evaluation_id` | Non-empty string |
165
+ | `rubric_id` | Must match an existing rubric |
166
+ | `evaluation_date` | ISO 8601 date: `YYYY-MM-DD` |
167
+ | `artifact_ref` | Must have `title`; `artifact_type`, `owner`, `version` are expected |
168
+ | `evaluators` | Non-empty list; each with `name` and `mode` (`agent`/`human`/`hybrid`) |
169
+ | `scores` | List of criterion scores |
170
+ | `overall_score` | Numeric, 0.0–4.0 |
171
+ | `status` | One of: `pass`, `conditional_pass`, `rework_required`, `reject`, `not_reviewable` |
172
+
173
+ **Per-criterion score required fields:**
174
+
175
+ | Field | Valid values |
176
+ |-------|-------------|
177
+ | `criterion_id` | Must match a criterion in the referenced rubric |
178
+ | `score` | 0, 1, 2, 3, 4, or "N/A" |
179
+ | `evidence_anchor` | Non-empty string (required if score ≠ N/A) |
180
+ | `evidence_class` | `observed` \| `inferred` \| `external` |
181
+ | `confidence` | `high` \| `medium` \| `low` |
182
+ | `rationale` | Non-empty string |
183
+
184
+ **Common issues in evaluation records:**
185
+ - `score` stored as integer but "N/A" stored as null instead of string "N/A"
186
+ - `evidence_anchor` missing when score is 0 (still requires a "no evidence found" anchor)
187
+ - `status` not matching the computed outcome from gates and score thresholds
188
+
189
+ **Error format:**
190
+ ```
191
+ [EVAL-SCHEMA] examples/example-solution-architecture.evaluation.yaml
192
+ criterion SCP-01: evidence_anchor is empty — required for all scored criteria
193
+ criterion TRD-01: confidence "medium-high" not in allowed set (high/medium/low)
194
+ overall_score 3.4 with status "conditional_pass" — status should be "pass" at this score
195
+ ```
196
+
197
+ ---
198
+
199
+ ## Check 6 — Documentation Accuracy
200
+
201
+ **Purpose:** Verify that documentation files accurately describe the current rubric structure.
202
+
203
+ **Files to check:**
204
+
205
+ | Documentation file | What to verify |
206
+ |-------------------|----------------|
207
+ | `CLAUDE.md` (Section 3 project structure) | File paths mentioned still exist |
208
+ | `docs/getting-started.md` | Rubric IDs and criteria counts are current |
209
+ | `docs/profile-authoring-guide.md` | Required field list matches v2 criterion fields |
210
+ | `README.md` (if exists) | Links and file references are valid |
211
+
212
+ **Specific checks:**
213
+ 1. Every file path mentioned in documentation exists on disk
214
+ 2. Criterion counts mentioned in docs match actual counts in YAML files
215
+ 3. Rubric IDs mentioned in docs match `rubric_id` fields in YAML files
216
+ 4. Required field lists in docs match the 13 required v2 fields
217
+
218
+ **Error format:**
219
+ ```
220
+ [DOCS] docs/getting-started.md
221
+ References "profiles/postmortem.yaml" — file does not exist
222
+ States "EAROS-CORE has 8 criteria" — actual count is 10
223
+
224
+ [DOCS] CLAUDE.md Section 3
225
+ References "calibration/gold-set/[rubric-id]/" — directory structure does not match
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Check 7 — YAML Style
231
+
232
+ **Purpose:** Flag style violations that won't cause parse errors but violate EAROS conventions.
233
+
234
+ **Style rules (from CLAUDE.md conventions):**
235
+
236
+ | Rule | Violation to detect |
237
+ |------|-------------------|
238
+ | Two-space indentation | Four-space or tab indentation |
239
+ | Numeric scoring_guide keys quoted | `0:` instead of `"0":` |
240
+ | Gate false as `gate: false` | `gate:\n enabled: false` |
241
+ | Multi-line descriptions use `>` block scalar | Long inline strings (>120 chars) without block scalar |
242
+ | One list item per line | Multiple items on a single line |
243
+ | Kebab-case filenames | Underscores or mixed case in filenames |
244
+
245
+ **How to detect indentation issues:** Count leading spaces on indented lines. Any line with 4-space or tab indentation is a violation.
246
+
247
+ **How to detect unquoted numeric keys:** Look for `scoring_guide:` sections where child keys are `0:`, `1:`, `2:`, `3:`, `4:` without quotes.
248
+
249
+ **Error format:**
250
+ ```
251
+ [YAML-STYLE] profiles/capability-map.yaml
252
+ line 47: scoring_guide key "0" is unquoted — should be "0": not 0:
253
+ line 52: gate disabled with verbose syntax — use gate: false not gate:\n enabled: false
254
+ line 83: description exceeds 120 chars inline — use > block scalar
255
+
256
+ [YAML-STYLE] profiles/Capability_Map.yaml
257
+ Filename uses underscores and mixed case — should be kebab-case: capability-map.yaml
258
+ ```
259
+
260
+ ---
261
+
262
+ ## Validation Summary Format
263
+
264
+ After running all 7 checks, produce:
265
+
266
+ ```
267
+ ## EAROS Repository Validation Summary — [date]
268
+
269
+ | Check | Files Checked | Errors | Warnings | Status |
270
+ |-------|--------------|--------|----------|--------|
271
+ | 1. Schema conformance | N | N | N | ✅ / ⚠️ / ❌ |
272
+ | 2. Criterion v2 completeness | N | N | N | ✅ / ⚠️ / ❌ |
273
+ | 3. ID uniqueness | N | N | N | ✅ / ⚠️ / ❌ |
274
+ | 4. Cross-reference validation | N | N | N | ✅ / ⚠️ / ❌ |
275
+ | 5. Evaluation record schema | N | N | N | ✅ / ⚠️ / ❌ |
276
+ | 6. Documentation accuracy | N | N | N | ✅ / ⚠️ / ❌ |
277
+ | 7. YAML style | N | N | N | ✅ / ⚠️ / ❌ |
278
+
279
+ **Overall:** ✅ Clean / ⚠️ Warnings only / ❌ Errors present
280
+
281
+ **Critical issues (blocking):** [list or "None"]
282
+ **Warnings (non-blocking):** [list or "None"]
283
+ ```
284
+
285
+ Severity classification:
286
+ - **Error (blocking):** Schema violations, missing required fields, duplicate IDs — must fix before governance use
287
+ - **Warning (non-blocking):** Style violations, documentation drift — should fix but does not block use
@@ -0,0 +1,4 @@
1
+ # EAROS Project
2
+
3
+ The full project guide is in `CLAUDE.md` at the repository root.
4
+ Skills are in `.agents/skills/`.