github.com/gemaraproj/gemara@v0.23.0

docs/adrs/0013-enum-casing-conventions.md raw

 1---
 2layout: page
 3title: Enum Casing Conventions
 4---
 5
 6- **ADR:** 0013
 7- **Proposal Author(s):** @jpower432
 8- **Status:** Accepted
 9
10## Context
11
12Enum values across the schema used inconsistent casing: some Title Case, some lowercase, some kebab-lower.
13No documented convention existed to guide contributors.
14
15## Decision
16
17Title Case is the convention for all enum values.
18Exceptions need to be justified, but as a rule casing convention should optimize for the author, not the potential export format.
19
20Title Case provides visual distinction from kebab-lower field names, making artifacts easier to scan. Multi-word values use spaces, not hyphens (e.g. `"Not Applicable"`, not `"Not-Applicable"`).
21
22## Consequences
23
24- Breaking change for consumers using lowercase `#Lifecycle`, `#MethodType`, and `#ModType` values
25- Breaking change for consumers referencing `"Software-Assisted"` in `#ActorType`
26- Breaking change for consumers referencing `"Not Set"` in `#ConfidenceLevel`
27
28## Alternatives Considered
29
30- **kebab-lower:** Aligns with OSCAL, STIX, and CycloneDX. However, field names are already kebab-lower, so values become visually indistinct from keys in authored YAML.
31- **camelCase:** Highest cognitive load for authors. Uncommon in YAML-heavy ecosystems.
32- **PascalCase:** Removes space/hyphen ambiguity, but multi-word values lose readability (`"NotApplicable"`). Optimizes for developers, not YAML authors.