Migration Date: 2026-03-08
Migrated By: ADR Kit migration tooling
Source Format: E-ADRs (Exploratory ADRs) in Markdown
Target Format: ADR Kit v1.0 YAML+Markdown
- Not machine-verifiable: Markdown with pseudo-frontmatter (bold text, not YAML)
- Inconsistent structure: Free-form sections, no schema enforcement
- Poor AI readability: LLMs must parse narrative text to extract decisions
- No discovery index: Must scan all files to find relevant ADRs
- Not STE-compliant: Doesn't follow PRIME-1, PRIME-2, SYS-14
- Machine-verifiable: JSON Schema + Pydantic validation
- Deterministic structure: YAML frontmatter with strict schema
- AI-first readability: Structured data + embedded Markdown
- Discoverable: Auto-generated manifest.yaml (SYS-14: Index Currency)
- STE-compliant: Follows System of Thought Engineering principles
- Graph-integrated: RECON extracts ADRs into semantic graph
Built in adr-architecture-kit:
src/adr_kit/migrators/e_adr_parser.py- Parse E-ADR markdownsrc/adr_kit/migrators/markdown_to_yaml.py- Generate YAML ADRssrc/adr_kit/migrators/e_adr_classification.py- Classify as Logical/Physicalscripts/migrate_e_adrs.py- CLI migration tool
Logical ADRs (6) - Conceptual decisions (what/why):
- E-ADR-001 → ADR-L-0001 (RECON Provisional Execution)
- E-ADR-002 → ADR-L-0002 (RECON Self-Validation)
- E-ADR-003 → ADR-L-0003 (CEM Deferral)
- E-ADR-007 → ADR-L-0004 (Watchdog Authoritative Mode)
- E-ADR-009 → ADR-L-0005 (Self-Configuring Domain Discovery)
- E-ADR-010 → ADR-L-0006 (Conversational Query Interface)
Physical ADRs (5) - Implementation specs (how):
- E-ADR-004 → ADR-P-0001 (RSS CLI)
- E-ADR-005 → ADR-P-0002 (JSON Extraction)
- E-ADR-006 → ADR-P-0003 (Angular/CSS Extraction)
- E-ADR-011 → ADR-P-0004 (MCP Server)
- E-ADR-013 → ADR-P-0005 (Extractor Validation)
Documentation (1) - Not migrated:
- E-ADR-008 (Extractor Development Guide) - Kept as guide, not a decision
E-ADR Markdown → ADR Kit YAML:
# E-ADR Header (bold text)
**Status:** Accepted
**Implementation:** Complete
**Date:** 2026-01-07
**Author:** Erik Gallmann
# Maps to ADR Kit frontmatter
schema_version: "1.0"
adr_type: logical # or physical
id: ADR-L-0001
title: "Extracted from E-ADR title"
status: accepted # lowercase
created_date: "2026-01-07"
authors: ["erik.gallmann"]
domains: ["recon", "architecture"]
tags: ["recon", "provisional-execution"]
# E-ADR Sections → ADR Kit fields
Context section → context: |
Decision section → decisions[].summary
Rationale section → decisions[].rationale
Specification section → invariants[] or component_specifications[]
Consequences section → decisions[].consequencesFor Physical ADRs, implementation details were reverse-engineered from actual source code:
- Technology stack: Extracted from
package.jsonand imports - Component specifications: Identified from
src/directory structure - Implementation identifiers: Mapped to actual file paths, classes, functions
- Specification details: Combined E-ADR spec with actual implementation patterns
Example (ADR-P-0004 MCP Server):
technology_stack:
- category: library
name: "@modelcontextprotocol/sdk"
version: "1.25.3" # From package.json
rationale: "Standard MCP protocol implementation"
component_specifications:
- id: COMP-0001
name: "MCP Server"
implementation_identifiers:
module_path: "src/mcp/mcp-server.ts" # Actual fileThis approach recognizes that ste-runtime was built with rigor - the implementation is the source of truth for Physical ADR details.
All migrated ADRs validated successfully:
- ✓ JSON Schema validation (0 errors)
- ✓ Pydantic model validation (0 errors)
- ✓ Cross-reference validation (all related_adrs exist)
- ✓ Implementation identifiers point to real files
Auto-generated artifacts using ADR Kit services:
manifest.yaml- Discovery index (11 ADRs, 13 invariants)rendered/*.md- Human-readable markdown views (11 files)
Ran RECON on ste-runtime codebase to validate graph extraction:
- ✓ 791 slices extracted from TypeScript source
- ✓ 213 graph nodes, 312 edges
- ✓ 0 conflicts detected
- ✓ RSS queries work correctly
- All narrative content: Embedded in YAML as Markdown
- All metadata: Status, dates, authors, authority
- All sections: Context, Decision, Rationale, Specification, Consequences
- Historical record: Original E-ADRs archived in
documentation/e-adr-archived/
- Structured metadata: YAML frontmatter with strict schema
- Explicit relationships:
related_adrs,implements_logicalfields - Invariants extracted: 13 invariants identified from specifications
- Technology stack: Reverse-engineered from package.json
- Component specs: Mapped to actual implementation files
- Discovery index: Manifest enables fast queries by domain, status, technology
Nothing. Original E-ADRs are archived with full history preserved.
Original E-ADRs are archived in documentation/e-adr-archived/ with a deprecation notice pointing to the new ADR Kit versions.
All migration tooling is available in adr-architecture-kit:
# Migrate other projects
python scripts/migrate_e_adrs.py \
--input-dir path/to/e-adrs \
--output-dir path/to/adrs \
--ste-runtime-root path/to/projectThe migration tooling is designed to be reusable for:
- Other Markdown ADR formats (Nygard template, ADR Tools)
- Legacy documentation to structured ADRs
- Cross-project ADR consolidation