Files
storage/docs/architecture/decisions/006-enum-pattern-as-const-objects.md
glm-5.1 67ccfbf928 docs: restructure architecture docs to flowgraph pattern
- Create decisions/ directory with 32 numbered ADRs (ADR-001 through ADR-032)
  extracted from inline DD/SD/ED/SE decision sections
- Create open-questions.md with 16 OQs organized by theme, cross-referenced
  to ADRs, with status tracking (resolved/open)
- Create README.md as architecture index with doc table, ADR table, and
  lifecycle status definitions (draft/reviewed/stable/deprecated)
- Replace inline decision sections in all spec docs with ADR reference tables
- Replace inline open questions with OQ references to centralized tracker
- Update frontmatter: metagraph-module.md, overview.md, sqlite-host.md → reviewed;
  schema-evolution.md and encrypted-data.md remain draft
- DD1-DD10 → ADR-009 through ADR-018
- D1-D8 → ADR-001 through ADR-008
- SD1-SD5 → ADR-019 through ADR-023 (SD5 folded into ADR-006/008)
- ED1-ED5 → ADR-023 through ADR-027
- SE1-SE5 → ADR-028 through ADR-032
2026-05-29 07:19:03 +00:00

791 B

ADR-006: Enumeration pattern — as const objects, not TypeScript enums

Status

Accepted

Context

TypeScript enum causes JSR slow-type issues and doesn't integrate well with TypeBox schemas. Enumeration values need to be available both as runtime constants and as TypeBox union literals.

Decision

All enumerations use the as const object pattern (e.g., GRAPH_STATUS = { Active: "active", ... } as const). TypeBox schemas use Type.Union of Type.Literal values derived from the const object.

Consequences

  • No JSR slow-type warnings
  • Enum values available as both runtime constants and type system literals
  • Consistent pattern across the codebase
  • Matches the pattern used in common.ts for ACTOR_TYPE

References