Architectural Decision Records (ADRs)¶
This directory contains the Architectural Decision Records (ADRs) for the floxide framework. ADRs document significant architectural decisions, their context, and their consequences.
Index of ADRs¶
ADR | Title | Status | Date | Summary |
---|---|---|---|---|
ADR-0032 | Project Rebranding to Floxide | Accepted | 2025-02-26 | Documents the rebranding from floxide to floxide and its implications |
ADR-0007 | Batch Processing Implementation | Accepted | 2024-02-25 | Defines the approach for parallel batch processing using Tokio tasks and semaphores |
ADR-0008 | Node Lifecycle Methods | Accepted | 2024-02-25 | Defines the three-phase lifecycle (prep/exec/post) for nodes and adapter patterns |
ADR-0009 | Cloneable Types for Batch Processing | Accepted | 2024-02-25 | Requires item types in batch processing to implement Clone |
ADR-0010 | Workflow Cloning Strategy | Accepted | 2024-02-25 | Defines an approach for cloning workflows using Arc |
ADR-0011 | Closure Lifetime Management in Async Contexts | Accepted | 2024-02-25 | Outlines strategies for managing lifetimes in async closures |
ADR-0012 | Testing Patterns for Async Node Implementations | Accepted | 2024-02-26 | Defines patterns for testing async code with concrete trait implementations |
ADR-0013 | Workflow Patterns | Accepted | 2024-02-25 | Documents the eight core workflow patterns supported by the framework |
ADR-0014 | Crate Publishing and CI/CD Setup | Accepted | 2024-02-25 | Defines the approach for publishing crates and setting up CI/CD pipelines |
ADR-0015 | Batch Processing Examples and Best Practices | Accepted | 2024-02-25 | Documents concrete patterns and best practices for implementing batch processing |
ADR-0026 | Documentation Deployment Strategy | Accepted | 2024-02-25 | Defines the approach for deploying documentation to GitHub Pages |
ADR-0027 | GitHub Actions Workflow Permissions | Accepted | 2024-02-25 | Defines the permission requirements for GitHub Actions workflows |
How to Create a New ADR¶
- Copy the template from
adr-template.md
to####-descriptive-title.md
where####
is the next available number - Fill in the sections: Status, Context, Decision, Consequences, etc.
- Add the new ADR to the index table above
- Submit the ADR for review before implementing significant changes
ADR Format¶
Each ADR follows this structure:
- Title: Clear, descriptive title prefixed with the ADR number
- Status: Proposed, Accepted, Deprecated, or Superseded
- Date: When the ADR was created
- Context: Problem description and background information
- Decision: The solution that addresses the context
- Consequences: Positive and negative effects of the decision
- Alternatives Considered: Other approaches that were evaluated
- Implementation Notes: Practical guidance for implementers
ADR Process¶
- Proposal: Create a new ADR describing the architectural change
- Discussion: Review the ADR with the team
- Acceptance: Mark as Accepted once consensus is reached
- Implementation: Build according to the accepted ADR
- Maintenance: Update the ADR if understanding evolves
Overview¶
These ADRs document the key architectural decisions made during the development of the floxide framework. Each ADR provides context, the decision made, consequences, and alternatives considered.
Index¶
-
Establishes the format and process for creating and maintaining ADRs
-
Serves as a template for all future ADRs
-
ADR-0002: Project Structure and Crate Organization (Accepted)
-
Defines the Cargo workspace structure
-
Establishes crate boundaries and relationships
-
ADR-0003: Core Framework Abstractions (Accepted)
-
Documents the core traits and structs that form the framework's foundation
- Defines the Node trait with a single process method
- Establishes ActionType as a trait for user-defined action types
-
Provides a practical example of using type-safe action types in a workflow
-
ADR-0004: Async Runtime Selection (Accepted)
-
Justifies the selection of Tokio with full features
- Documents the use of async_trait for trait methods
-
Establishes patterns for async execution
-
ADR-0005: State Serialization and Deserialization (Accepted)
-
Defines how workflow state is serialized for persistence and restoration
- Establishes storage abstractions for workflow snapshots
-
Provides mechanisms for workflow checkpointing and resumption
-
ADR-0006: Workflow Observability (Accepted)
-
Adopts OpenTelemetry as the primary observability solution
- Designs an event-based system integrated with OpenTelemetry traces and metrics
-
Provides tools for debugging, monitoring, and visualizing workflow execution
-
ADR-0007: Batch Processing Implementation (Accepted)
-
Defines the approach for parallel batch processing using Tokio tasks and semaphores
-
Establishes patterns for handling multiple contexts concurrently
-
ADR-0008: Node Lifecycle Methods (Accepted)
-
Defines the three-phase lifecycle (prep/exec/post) for nodes
-
Establishes adapter patterns for implementing lifecycle methods
-
Requires item types in batch processing to implement Clone
-
Defines strategies for handling non-cloneable types
-
ADR-0010: Workflow Cloning Strategy (Accepted)
- Defines an approach for cloning workflows using Arc
- Establishes patterns for sharing workflow definitions
- Defines an approach for cloning workflows using Arc
-
ADR-0011: Closure Lifetime Management (Accepted)
- Outlines strategies for managing lifetimes in async closures
- Provides solutions for common lifetime issues in async contexts
-
ADR-0012: Testing Patterns for Async Node Implementations (Accepted)
- Defines patterns for testing async code with concrete trait implementations
- Establishes best practices for unit and integration testing
-
ADR-0013: Workflow Patterns (Accepted)
- Documents the eight core workflow patterns supported by the framework
- Defines implementation approaches for each pattern
- Provides examples and use cases for each pattern type
-
ADR-0014: Crate Publishing and CI/CD Setup (Accepted)
- Defines the approach for publishing crates to crates.io
- Establishes GitHub Actions workflows for CI/CD
- Documents versioning strategy and release automation
-
ADR-0015: Batch Processing Examples and Best Practices (Accepted)
- Documents concrete patterns for batch processing implementations
- Provides solutions for handling type parameters in generic batch processing
- Outlines alternative approaches for simpler use cases
- Builds on ADR-0007 with practical implementation guidance
-
ADR-0026: Documentation Deployment Strategy (Accepted)
- Defines the approach for deploying documentation to GitHub Pages
- Documents the use of GitHub Actions for automated documentation deployment
- Establishes best practices for permissions and security in deployment workflows
- Provides guidance on setting up GitHub Pages with GitHub Actions as the source
-
ADR-0027: GitHub Actions Workflow Permissions (Accepted)
- Documents the permission requirements for GitHub Actions workflows
- Addresses issues with the version bump workflow permissions
- Establishes best practices for setting permissions in GitHub Actions workflows
- Provides guidance on using the principle of least privilege for workflow permissions
ADR Statuses¶
- Proposed: Initial draft state
- Accepted: Approved for implementation
- Rejected: Declined, with reasons documented
- Superseded: Replaced by a newer ADR
- Amended: Modified after implementation
- Discarded: Determined to be unnecessary or redundant
Process¶
Please refer to ADR-0001 for details on how ADRs are created, reviewed, and maintained in this project.
Relationships¶
Note: This diagram shows the dependencies between ADRs. Each subsequent ADR builds upon the decisions established in the previous ones. The dotted line indicates that the observability system can utilize the state serialization system for event persistence. The workflow patterns ADR (0013) depends on core framework abstractions (0003) and async runtime selection (0004), and influences observability (0006).