Skip to content

decrating: absorb shipper-config-runtime into shipper-config::runtime#58

Merged
EffortlessSteven merged 1 commit into
mainfrom
feature/decrating-absorb-config-runtime
Apr 15, 2026
Merged

decrating: absorb shipper-config-runtime into shipper-config::runtime#58
EffortlessSteven merged 1 commit into
mainfrom
feature/decrating-absorb-config-runtime

Conversation

@EffortlessSteven

Copy link
Copy Markdown
Member

Summary

  • Absorbs the standalone shipper-config-runtime microcrate (1780 LOC, pure adapter) into crates/shipper-config/src/runtime/ as a pub mod. No orchestration, no I/O — just a RuntimeOptions → shipper_types::RuntimeOptions conversion that naturally belongs next to the config types it reshapes.
  • Simplifies the dep graph: shipper now depends directly on shipper-config for the runtime conversion instead of hopping through shipper-config-runtime (which itself depended on shipper-config). One less crate, one less edge.
  • Retargets shipper_config_runtime::Xshipper_config::runtime::X across 4 call sites (crates/shipper/src/config.rs, fuzz/fuzz_targets/config_runtime_adapter.rs, and 3 integration test files).
  • Snapshot files moved and renamed (shipper_config_runtime__*shipper_config__runtime__*) to match the new module path that insta infers.
  • Removes crates/shipper-config-runtime from workspace members; drops its entry from shipper/Cargo.toml and fuzz/Cargo.toml.
  • Updates docs/architecture.md and RELEASE_CHECKLIST_v0.3.0.md to drop the standalone crate and describe the new submodule.
  • Adds crates/shipper-config/src/runtime/CLAUDE.md documenting the absorbed module.

Per docs/decrating-plan.md Phase 5.

Public API

  • Before: shipper_config_runtime::into_runtime_options.
  • After: shipper_config::runtime::into_runtime_options.
  • The shipper facade continues to re-export the conversion via pub use shipper_config::runtime::*, so downstream code using the facade is unaffected.
  • Pre-1.0 (v0.3.0-rc.1); no deprecation shim for the shipper_config_runtime namespace.

Test plan

  • cargo check --workspace
  • cargo test -p shipper-config (231 unit + 2 + 3 + 48 + 15 = 299 tests pass, incl. all migrated snapshots)
  • cargo test -p shipper
  • cargo test -p shipper-cli
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo fmt --all -- --check
  • cargo build -p shipper-cli

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@coderabbitai

coderabbitai Bot commented Apr 15, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@EffortlessSteven has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 27 minutes and 52 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 27 minutes and 52 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 6c6df612-9d21-4a91-8e62-6df7af88f7de

📥 Commits

Reviewing files that changed from the base of the PR and between 0cf0099 and 6eced3e.

⛔ Files ignored due to path filters (17)
  • Cargo.lock is excluded by !**/*.lock
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__policy_combination_tests__snapshot_balanced_policy_typical.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__policy_combination_tests__snapshot_fast_policy_typical.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__policy_combination_tests__snapshot_safe_policy_typical.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_all_flags_enabled.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_alternative_registry_only.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_balanced_policy_with_partial_config.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_default_conversion.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_encryption_with_env_var.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_fast_policy_no_verify.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_full_readiness_config.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_linear_retry_strategy.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_parallel_heavy.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_resume_from_set.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_safe_policy_max_safety.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_webhook_with_secret.snap is excluded by !**/*.snap
  • crates/shipper-config/src/runtime/snapshots/shipper_config__runtime__tests__snapshot_tests__snapshot_with_registries.snap is excluded by !**/*.snap
📒 Files selected for processing (16)
  • Cargo.toml
  • RELEASE_CHECKLIST_v0.3.0.md
  • crates/shipper-config-runtime/CLAUDE.md
  • crates/shipper-config-runtime/Cargo.toml
  • crates/shipper-config-runtime/README.md
  • crates/shipper-config/src/lib.rs
  • crates/shipper-config/src/runtime/CLAUDE.md
  • crates/shipper-config/src/runtime/mod.rs
  • crates/shipper-config/tests/config_runtime_bdd.rs
  • crates/shipper-config/tests/config_runtime_contract.rs
  • crates/shipper-config/tests/config_runtime_proptest.rs
  • crates/shipper/Cargo.toml
  • crates/shipper/src/config.rs
  • docs/architecture.md
  • fuzz/Cargo.toml
  • fuzz/fuzz_targets/config_runtime_adapter.rs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/decrating-absorb-config-runtime

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

EffortlessSteven added a commit that referenced this pull request Apr 15, 2026
Sweep-cleanup of CI workflows, templates, and docs for references to
microcrates and micro-* feature flags that have been deleted or are
queued for deletion via absorption PRs #52 #54 #55 #56 #57 #58.

Changes:
- .github/workflows/ci.yml - removed deleted features (micro-lock,
  micro-plan, micro-policy, micro-process, micro-store) from BDD matrix
- .github/workflows/mutation.yml - removed shipper-plan, shipper-policy,
  shipper-levels from the mutation-testing target list
- .github/workflows/release.yml - added note that publish order is
  finalized in Phase 8 of the decrating plan
- templates/circleci-config.yml - matching feature-matrix cleanup
- docs/architecture.md - per-crate absorbed notes in microcrates table
  plus top-of-section notes on Dependency Graph and Module
  Responsibilities pointing out those sections reflect pre-decrating state
- docs/testing.md - removed deleted crates from example test invocations
  and the mutation-testing example
- RELEASE_CHECKLIST_v0.3.0.md - header note listing absorbed crates and
  pruned publish steps
- RELEASE_NOTES_v0.3.0.md - reworded Modular Architecture bullet to
  reflect the consolidated public-crate layout

References to still-in-flight absorptions (auth, environment, git, storage,
engine-parallel, registry, progress) are left alone - they will be cleaned
up in their respective absorption PRs.

Per docs/decrating-plan.md.
Move the shipper-config-runtime crate (1780 LOC, pure adapter) into
crates/shipper-config/src/runtime/ as a pub submodule. The crate had no
orchestration or I/O - it only converted shipper-config types into
shipper-types::RuntimeOptions - so it fits naturally as a submodule of
shipper-config and removes one unnecessary hop from the dependency graph.

Changes:
- Move src/lib.rs to crates/shipper-config/src/runtime/mod.rs (retargeted
  `use shipper_config::...` imports to `use crate::...`).
- Move tests/*.rs to crates/shipper-config/tests/ and retarget
  `use shipper_config_runtime::into_runtime_options` to
  `use shipper_config::runtime::into_runtime_options`.
- Move src/snapshots/ to crates/shipper-config/src/runtime/snapshots/ and
  rename prefix from `shipper_config_runtime__` to `shipper_config__runtime__`
  to match the new module path used by insta.
- Update shipper/src/config.rs: replace `pub use shipper_config_runtime::*`
  with `pub use shipper_config::runtime::*` to preserve the facade re-export.
- Drop shipper-config-runtime dep from crates/shipper/Cargo.toml and
  fuzz/Cargo.toml; retarget the fuzz_targets/config_runtime_adapter.rs
  import accordingly.
- Remove `crates/shipper-config-runtime` from workspace members.
- Update docs/architecture.md and RELEASE_CHECKLIST_v0.3.0.md to reflect
  the merge; add crates/shipper-config/src/runtime/CLAUDE.md.

Per docs/decrating-plan.md Phase 5. Pre-1.0 (v0.3.0-rc.1), so the public
`shipper_config_runtime` namespace is gone without a deprecation shim.

Validation: cargo check --workspace, cargo test -p shipper-config (299
tests pass incl. all moved snapshots), cargo test -p shipper, cargo test
-p shipper-cli, cargo clippy --workspace --all-targets -- -D warnings,
cargo fmt --all -- --check all green.
@EffortlessSteven EffortlessSteven force-pushed the feature/decrating-absorb-config-runtime branch from a3ae2bf to 6eced3e Compare April 15, 2026 06:07
@EffortlessSteven EffortlessSteven merged commit fc7bf66 into main Apr 15, 2026
12 of 15 checks passed
EffortlessSteven added a commit that referenced this pull request Apr 15, 2026
Sweep-cleanup of CI workflows, templates, and docs for references to
microcrates and micro-* feature flags that have been deleted or are
queued for deletion via absorption PRs #52 #54 #55 #56 #57 #58.

Changes:
- .github/workflows/ci.yml - removed deleted features (micro-lock,
  micro-plan, micro-policy, micro-process, micro-store) from BDD matrix
- .github/workflows/mutation.yml - removed shipper-plan, shipper-policy,
  shipper-levels from the mutation-testing target list
- .github/workflows/release.yml - added note that publish order is
  finalized in Phase 8 of the decrating plan
- templates/circleci-config.yml - matching feature-matrix cleanup
- docs/architecture.md - per-crate absorbed notes in microcrates table
  plus top-of-section notes on Dependency Graph and Module
  Responsibilities pointing out those sections reflect pre-decrating state
- docs/testing.md - removed deleted crates from example test invocations
  and the mutation-testing example
- RELEASE_CHECKLIST_v0.3.0.md - header note listing absorbed crates and
  pruned publish steps
- RELEASE_NOTES_v0.3.0.md - reworded Modular Architecture bullet to
  reflect the consolidated public-crate layout

References to still-in-flight absorptions (auth, environment, git, storage,
engine-parallel, registry, progress) are left alone - they will be cleaned
up in their respective absorption PRs.

Per docs/decrating-plan.md.
EffortlessSteven added a commit that referenced this pull request Apr 15, 2026
Fixes two distinct failures that have kept CI red on `main` for weeks
and block every open PR:

1. Snapshot mismatch in `publish_invalid_manifest_content_snapshot`
   (`crates/shipper-cli/tests/e2e_expanded.rs`). On Linux CI runners,
   `cargo metadata` reports the invalid manifest using a path relative
   to the workspace CWD (e.g. `../../../tmp/.tmpXXX/Cargo.toml`). The
   tempdir replacement consumed the leading `/`, leaving `..` fragments
   that the previous single-pass `.replace("../", "")` could not clean
   up (it left `..<TMPDIR>/...`).

   `normalize_stderr` now:
   - converts backslashes to forward slashes so path separators are
     platform-independent in snapshots; and
   - iteratively strips `../` and any residual `..<TMPDIR>` fragments
     until stable.

   Updated the committed snapshot to the canonical forward-slash form.

2. Race in `FileStorage::write` causing
   `tests::concurrent_reads_and_writes_same_file` to panic with
   "No such file or directory (os error 2)" on macOS and Linux. All
   threads writing to the same destination shared a single
   `<basename>.tmp` scratch file, so one thread's `rename` could
   remove the file while another thread's `rename` was still pending.

   Each write now uses a unique temp filename built from pid, thread
   id, and subsecond timestamp. Adjusted two local tests that inspected
   the old fixed `.tmp` name to observe the more general invariant
   ("no `.tmp` extension files remain after a successful write") and
   relaxed `atomic_write_overwrites_stale_tmp_from_prior_crash` to only
   assert the new write succeeds (the new impl intentionally does not
   clobber unrelated stale `.tmp` files).

Validated locally on Windows:
- `cargo test -p shipper-storage -- --include-ignored` → 93 lib + 33
  integration + 1 doctest pass (including
  `concurrent_reads_and_writes_same_file`, previously `#[cfg_attr]`
  ignored on Windows; now runs cleanly).
- `cargo test -p shipper-cli --test e2e_expanded` → 126/126 pass.
- `cargo fmt --all -- --check` and
  `cargo clippy -p shipper-storage -p shipper-cli --all-targets
  --all-features -- -D warnings` both clean.

Coverage-job-only validation (`cargo llvm-cov`) is deferred to CI.

Unblocks green CI for the decrating PR queue (#48-#58).
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