Skip to content

Add design doc for extracting sans-I/O pattern into reusable crate#33

Merged
RobbieMcKinstry merged 4 commits intotrunkfrom
claude/research-sans-io-design-B68Ar
Feb 8, 2026
Merged

Add design doc for extracting sans-I/O pattern into reusable crate#33
RobbieMcKinstry merged 4 commits intotrunkfrom
claude/research-sans-io-design-B68Ar

Conversation

@RobbieMcKinstry
Copy link
Contributor

Analyzes what it would take to extract the generalizable "Functional Core,
Imperative Shell" architecture from crates/controlplane into a standalone
kube-sans-io crate. Covers generic ReconcileResult<U,S>, Snapshot trait,
executor traits, migration phases, and design decisions.

https://claude.ai/code/session_01DSEmZoHqrhsQUZwzU2SHoR

Analyzes what it would take to extract the generalizable "Functional Core,
Imperative Shell" architecture from crates/controlplane into a standalone
kube-sans-io crate. Covers generic ReconcileResult<U,S>, Snapshot trait,
executor traits, migration phases, and design decisions.

https://claude.ai/code/session_01DSEmZoHqrhsQUZwzU2SHoR
Major changes:
- Executor trait uses #[async_trait] for object safety, enabling
  dyn Executor for test fakes (RecordingExecutor, FailingExecutor)
- Single Executor trait with associated types replaces three separate traits
- Ships built-in test fakes in kube_sans_io::testing module
- ControllerContext holds Box<dyn Executor<...>> for dependency injection
- Replace chrono with jiff::Timestamp for datetime operations
- Add testing layer summary showing what's fakeable at each level

https://claude.ai/code/session_01DSEmZoHqrhsQUZwzU2SHoR
Parent issue + 4 sub-issues (one per migration phase) with detailed
acceptance criteria including linting, formatting, and test requirements.

https://claude.ai/code/session_01DSEmZoHqrhsQUZwzU2SHoR
Each sub-issue now has a "Blocked by" field showing which phase must
complete first. Added a visual dependency graph at the top for quick
reference. All four phases are strictly sequential.

https://claude.ai/code/session_01DSEmZoHqrhsQUZwzU2SHoR
@RobbieMcKinstry RobbieMcKinstry added this pull request to the merge queue Feb 8, 2026
Merged via the queue into trunk with commit a3c5334 Feb 8, 2026
4 checks passed
@RobbieMcKinstry RobbieMcKinstry deleted the claude/research-sans-io-design-B68Ar branch February 8, 2026 07:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants