Skip to content

πŸŽ“ Educational showcase of Intent-Driven Development: transforming AsyncAPI specs into RFCs, JSON schemas, and GitHub Issues before writing code. Demonstrates AI-native software architecture with TigerBeetle-inspired design patterns.

Notifications You must be signed in to change notification settings

copyleftdev/mox_eda

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Mox EDA

πŸŽ“ Intent-Driven Software Development Showcase

This is not a production project. It's a demonstration of how software development can be approached with deliberate intent, transforming high-level specifications into actionable, trackable work before writing a single line of implementation code.


🎯 The Core Philosophy

Traditional software development often follows a pattern of:

  1. Vague requirements β†’ Code β†’ Debugging β†’ More code β†’ Hope

Intent-Driven Development inverts this:

  1. Define Intent β†’ Capture the complete system behavior as a specification
  2. Architect with Purpose β†’ Write RFCs that describe how each component works
  3. Make Work Visible β†’ Transform architecture into trackable tasks
  4. Implement with Confidence β†’ Code against well-defined acceptance criteria
  5. Validate Continuously β†’ Tests verify the intent was met

πŸ“Š What We Built (Without Writing Implementation Code)

Artifact Count Purpose
AsyncAPI Specification 1 Complete event-driven architecture definition
Event Types 122 Every domain event the system will emit
Domains 14 Bounded contexts with clear boundaries
Architecture RFCs 8 Detailed technical specifications
JSON Task Schemas 8 Machine-readable, deterministic task definitions
GitHub Issues 82 Trackable, actionable work items
Acceptance Criteria 73 Verifiable success conditions
Architecture Diagrams 7 Visual system documentation

πŸ”„ The Workflow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         INTENT PHASE                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                     β”‚
β”‚   AsyncAPI Spec          What events exist? What data do they carry?β”‚
β”‚        β”‚                 Who publishes? Who subscribes?             β”‚
β”‚        β–Ό                                                            β”‚
β”‚   122 Events             TalentCreated, CampaignStarted,            β”‚
β”‚   14 Domains             ContractSigned, StripePayoutProcessed...   β”‚
β”‚                                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                       ARCHITECTURE PHASE                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                     β”‚
β”‚   RFC-0001               Single-binary, TigerBeetle-inspired        β”‚
β”‚   Architecture           Zero external dependencies                 β”‚
β”‚        β”‚                                                            β”‚
β”‚        β–Ό                                                            β”‚
β”‚   RFC-0002-0008          Storage Engine (WAL + LSM)                 β”‚
β”‚   Technical Specs        Raft Consensus + VR Extensions             β”‚
β”‚                          State Machine + Domain Model               β”‚
β”‚                          Deterministic Simulation Testing           β”‚
β”‚                          Network Protocol (Binary, TLS)             β”‚
β”‚                          API Layer (HTTP, WebSocket, Webhooks)      β”‚
β”‚                                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                      OPERATIONALIZATION PHASE                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                     β”‚
β”‚   JSON Schemas           Deterministic, machine-readable            β”‚
β”‚        β”‚                 74 Tasks with dependencies                 β”‚
β”‚        β”‚                 73 Acceptance criteria                     β”‚
β”‚        β–Ό                                                            β”‚
β”‚   import_issues.py       Automated GitHub issue creation            β”‚
β”‚        β”‚                                                            β”‚
β”‚        β–Ό                                                            β”‚
β”‚   GitHub Project         8 Milestones (1 per RFC)                   β”‚
β”‚                          82 Issues with labels, links               β”‚
β”‚                          Full traceability                          β”‚
β”‚                                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                      IMPLEMENTATION PHASE                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                     β”‚
β”‚   Pick Issue             [RFC-0002] Implement WAL entry format      β”‚
β”‚        β”‚                                                            β”‚
β”‚        β–Ό                                                            β”‚
β”‚   Acceptance Criteria    βœ“ Entry includes timestamp, term, index    β”‚
β”‚                          βœ“ CRC32C checksum validated                β”‚
β”‚                          βœ“ Serialize/deserialize round-trips        β”‚
β”‚        β”‚                                                            β”‚
β”‚        β–Ό                                                            β”‚
β”‚   Write Code             Focused, testable, reviewable              β”‚
β”‚        β”‚                                                            β”‚
β”‚        β–Ό                                                            β”‚
β”‚   Close Issue            PR linked, criteria verified               β”‚
β”‚                                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ—οΈ Architecture Highlights

TigerBeetle-Inspired Design

  • Single Binary: No Kubernetes, no message queues, no external databases
  • Zero Dependencies: Custom storage, custom networking, custom everything
  • Deterministic: Same input = same output, always
  • Simulation-Tested: Run years of operation in minutes

Technical Stack (Planned)

  • Language: Rust (memory safety, performance, fearless concurrency)
  • Storage: Custom WAL + LSM Tree with io_uring
  • Consensus: Raft with Viewstamped Replication extensions
  • API: Axum (HTTP/WS), custom binary protocol (cluster)
  • Testing: Deterministic simulation with fault injection

πŸ“ Repository Structure

mox_eda/
β”œβ”€β”€ asyncapi.yaml              # Complete event specification
β”œβ”€β”€ components/                # Modular AsyncAPI components
β”‚   β”œβ”€β”€ schemas/               # Event data schemas
β”‚   β”œβ”€β”€ messages/              # Message definitions  
β”‚   └── channels/              # Channel definitions
β”œβ”€β”€ docs/
β”‚   └── rfcs/
β”‚       β”œβ”€β”€ RFC-0001-architecture-overview.md
β”‚       β”œβ”€β”€ RFC-0002-storage-engine.md
β”‚       β”œβ”€β”€ RFC-0003-consensus-replication.md
β”‚       β”œβ”€β”€ RFC-0004-state-machine.md
β”‚       β”œβ”€β”€ RFC-0005-deterministic-simulation.md
β”‚       β”œβ”€β”€ RFC-0006-network-protocol.md
β”‚       β”œβ”€β”€ RFC-0007-domain-model.md
β”‚       β”œβ”€β”€ RFC-0008-api-layer.md
β”‚       └── schema/
β”‚           β”œβ”€β”€ rfc-schema.json    # JSON schema for RFCs
β”‚           β”œβ”€β”€ RFC-0001.json      # Machine-readable RFCs
β”‚           └── ...
β”œβ”€β”€ diagrams/                  # Architecture diagrams (as code)
β”‚   β”œβ”€β”€ generate_all.py
β”‚   β”œβ”€β”€ architecture_overview.py
β”‚   └── output/                # Generated PNGs
└── scripts/
    └── import_issues.py       # GitHub issue importer

πŸ€– AI-Native Development: The Project as Context

This architecture creates something powerful: the project itself becomes a RAG (Retrieval-Augmented Generation) environment.

GitHub Issues as State Management

Think of GitHub Issues not just as a todo list, but as a distributed state machine for development:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    ISSUE STATE MACHINE                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚   [OPEN]  ──────►  [IN PROGRESS]  ──────►  [CLOSED]        β”‚
β”‚     β”‚                    β”‚                    β”‚             β”‚
β”‚     β”‚                    β”‚                    β”‚             β”‚
β”‚     β–Ό                    β–Ό                    β–Ό             β”‚
β”‚   Queryable          AI/Human             Verified          β”‚
β”‚   Context            Working              Complete          β”‚
β”‚                                                             β”‚
β”‚   "What needs        "What's being        "What's the       β”‚
β”‚    to be done?"       worked on?"          system state?"   β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Structured Context for AI Agents

An AI agent (like Windsurf/Cascade) can:

  1. Query the AsyncAPI spec β†’ Understand what events exist
  2. Read the relevant RFC β†’ Understand the architecture
  3. Parse the JSON schema β†’ Get machine-readable task details
  4. Check GitHub Issues β†’ Know what's done vs pending
  5. Read acceptance criteria β†’ Know when the task is complete
  6. Generate implementation β†’ Write code that fits the design
# Pseudo-code for AI-assisted development
context = {
    "spec": load("asyncapi.yaml"),           # What events?
    "rfc": load("RFC-0004-state-machine.md"), # How does it work?
    "task": github.get_issue(42),             # What to build?
    "criteria": task["acceptance_criteria"],  # When is it done?
    "existing_code": codebase.search(task),   # What exists?
}

implementation = ai.generate(context)
tests = ai.generate_tests(context["criteria"])

Why This Works

Traditional Dev Intent-Driven + AI
Vague requirements Structured AsyncAPI spec
Tribal knowledge Documented RFCs
"It's in my head" Machine-readable JSON
Manual tracking GitHub as state machine
Context switching Persistent, queryable context

The entire repository becomes a semantic index that AI can traverse:

  • asyncapi.yaml β†’ Event ontology
  • RFC-*.md β†’ Architectural decisions
  • RFC-*.json β†’ Actionable tasks
  • GitHub Issues β†’ Current state
  • Code β†’ Implementation (links back to issues)

πŸš€ How This Empowers Development

1. Shared Understanding

Everyoneβ€”developers, PMs, stakeholdersβ€”can read the AsyncAPI spec and understand exactly what the system does. No ambiguity.

2. Parallelizable Work

With 82 well-defined issues across 8 milestones, multiple developers can work independently without stepping on each other.

3. Measurable Progress

  • 0/82 issues closed = 0% complete
  • 41/82 issues closed = 50% complete
  • No "it's almost done" hand-waving

4. Reduced Rework

Acceptance criteria are defined before coding. PRs are reviewed against clear expectations.

5. Onboarding Efficiency

New team members can:

  1. Read the AsyncAPI spec (30 min)
  2. Skim the RFCs (1 hour)
  3. Pick an issue and start contributing (day 1)

6. AI-Assisted Development

The JSON schemas are designed to be LLM-friendly. An AI can:

  • Generate boilerplate code from task descriptions
  • Write tests from acceptance criteria
  • Review PRs against the RFC specifications

πŸ“ˆ Metrics & Visibility

GitHub Project Dashboard

  • 8 Milestones tracking RFC completion
  • Labels for size (XS to XL), priority, domain
  • Dependencies between tasks clearly marked
  • Acceptance criteria as checklists in each issue

Estimated Effort Distribution

Size Count Est. Days Each Total Days
XS 5 < 1 ~3
S 20 1-2 ~30
M 25 3-5 ~100
L 18 5-10 ~135
XL 6 10-15 ~75
Total 74 tasks ~343 dev-days

πŸŽ“ Key Takeaways

  1. Specification is not bureaucracyβ€”it's investment in clarity
  2. RFCs force you to think before you codeβ€”saving weeks of rework
  3. Machine-readable formats enable automationβ€”from docs to issues to code
  4. Diagrams as code are maintainableβ€”text diffs, version control, automation
  5. The best code is code you didn't have to rewrite

πŸ”§ Generating the Diagrams

# Install dependencies
pip install diagrams

# Generate all diagrams
cd diagrams
python generate_all.py

# Output in diagrams/output/*.png

πŸ“š References


🀝 The Human + AI Collaboration

This entire specification was created through human-AI collaboration:

  • Human: Vision, domain knowledge, architectural decisions
  • AI (Cascade): Specification generation, consistency checking, automation scripts

This showcases how AI can amplify human intent rather than replace human judgment.


"The best way to predict the future is to design it." β€” Alan Kay

About

πŸŽ“ Educational showcase of Intent-Driven Development: transforming AsyncAPI specs into RFCs, JSON schemas, and GitHub Issues before writing code. Demonstrates AI-native software architecture with TigerBeetle-inspired design patterns.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published