Skip to content

refactor: extract output aggregation types into homeboy-output crate - #8163

Merged
chubes4 merged 1 commit into
mainfrom
refactor/extract-output-crate
Jul 14, 2026
Merged

refactor: extract output aggregation types into homeboy-output crate#8163
chubes4 merged 1 commit into
mainfrom
refactor/extract-output-crate

Conversation

@chubes4

@chubes4 chubes4 commented Jul 14, 2026

Copy link
Copy Markdown
Member

Summary

Fifth step in the homeboy workspace split. Extracts the bulk-operation result / output aggregation types (BulkResult, MergeOutput, and friends) into a new path-only crate homeboy-output.

No crates.io. Path-only workspace member; still ships as the single homeboy binary.

Why output (and a note on paths)

I set out to extract paths this round, but analysis surfaced a pathsdefaults dependency cycle: paths::artifact_root() calls defaults::load_config(), while defaults imports paths back. Breaking that requires a deliberate dependency-inversion refactor (thread the config value in rather than calling back) with real behavioral surface around config precedence — that deserves its own focused PR, not a rushed rider on an extraction.

So I pivoted to the highest-impact genuinely-clean leaf available: output. It's a pristine leaf (serde only, zero in-crate deps, 533 LOC) used by 16 modules.

What changed

  • New crate crates/homeboy-output/ (serde only).
  • src/core/output.rscrates/homeboy-output/src/lib.rs via git mv (100% rename).
  • core/mod.rs re-exports it — all 16 crate::core::output::* call sites unchanged.

Verification

  • cargo check -p homeboy-output — passes.
  • cargo check --lib — passes, 0 errors.
  • cargo test -p homeboy-output — 10/10 unit tests pass.
  • Full build/test left to CI.

Progress

Crates now: redaction, error, engine-primitives, product-identity, output (5). paths is queued as a dedicated cycle-break PR — flagged so it gets the care it needs rather than a hasty cut.

🤖 Generated with Claude Code

Moves the bulk-operation result/output aggregation types (BulkResult,
MergeOutput, and friends) into a new path-only crate. It's a pristine leaf
(serde only, zero in-crate deps, 533 LOC) used by 16 modules. Its call sites
are unchanged — core/mod.rs re-exports the crate as output so
crate::core::output::* keeps resolving.

Chosen this round because paths (the originally-planned target) turned out to
have a paths<->defaults dependency cycle that needs a dedicated
dependency-inversion refactor rather than a lift-and-shift; output was the
highest-impact genuinely-clean leaf available.

Not published to crates.io; still ships as the single homeboy binary.
cargo check --lib passes; the crate's 10 unit tests pass.
@chubes4
chubes4 merged commit 5060c84 into main Jul 14, 2026
3 checks passed
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.

1 participant