part-db/swap-bundle
A Part-DB bundle for swapping electronic component data between Part-DB installations. It provides the server and client pieces needed to exchange parts and inventory with other instances, helping separate databases stay in sync.
Architecture fit. Unchanged. part-db/swap-bundle remains a Symfony bundle — the DI/config integration layer around the framework-agnostic florianv/swap currency-exchange library — and its core artifacts (Bundle class, DependencyInjection/Configuration.php, service XML/YAML) are still inert inside a Laravel kernel. In a Laravel application only the underlying florianv/swap library transfers. v6.2.0 does not alter this; it is a version-alignment release, not an architectural one.
What v6.2.0 actually changes. The release body is a single line — "Updated to upstream version v6.0" — plus a GitHub compare link. Read literally, this means the fork has rebased onto upstream florianv/swap-bundle v6.0. Three implications matter more than the diff size suggests:
composer.json, not inferred from the tag name.v6.1.0...v6.2.0 and the upstream v5→v6 upgrade guide falls entirely on us.Integration feasibility. Unchanged for Laravel. Effort estimates hold:
| Path | Effort | Verdict |
|---|---|---|
| Install bundle in Laravel | N/A — no bundle loader | Reject |
Adopt florianv/swap core + custom Laravel service provider |
~2–4 days | Recommended |
| Fork/port the bundle's Symfony wiring to Laravel | ~5–8 days | Only if config parity matters |
Technical risk. Updated from the prior assessment:
Key questions for the maintainer/vendor. Revised — #2, #3, and #8 are now partially answerable from v6.2.0 but not resolved:
Stack fit. Unchanged: poor as-shipped, acceptable as a pattern. The capability (fetch, cache, convert) is stack-agnostic and fits a Laravel service layer cleanly; the Symfony wrapper does not. v6.2.0 reinforces the recommendation — a package that rebases onto upstream majors and documents the change in one line is a package you want to consume at the library layer, where you control the pinned version and the migration timing.
Migration path (Laravel). Unchanged, and now more clearly correct:
composer require florianv/swap directly — skip the bundle. Check which florianv/swap major the bundle's v6.2.0 rebase targets, and pin that same major in our own constraint so our adapter and the bundle's assumptions stay legible to each other.CurrencyExchangeServiceProvider registering a singleton Swap builder from config/currency.php.CurrencyConverter contract (convert(Money $amount, string $to, ?DateTimeInterface $at): Money).Migration path (Symfony, if that is actually the target). Register in config/bundles.php, publish config, set credentials via env, pin to a verified tag — and now, explicitly test the v6.0 rebase before adopting: config-key compatibility, service alias availability, and any changed provider defaults. Treat 6.1.0 as the known-good fallback until 6.2.0 is verified in a scratch app.
Compatibility. Re-verify, with new emphasis:
composer.json PHP constraint for v6.2.0 vs. our runtime — the v6.0 rebase likely raised the floor.florianv/swap itself moved a major alongside the bundle rebase, and whether its HTTP client conflicts with Guzzle versions pinned elsewhere.composer why-not part-db/swap-bundle 6.2.0 and composer why-not florianv/swap <target> before committing.Sequencing. Prior plan with one inserted step:
v6.1.0...v6.2.0 and the upstream v5→v6 upgrade guide. Enumerate breaking changes. Decide adopt / hold at 6.1.x / abandon.Total remains ~1.5–2 engineer-weeks for a Laravel integration — the added diff-review step is half a day, but it is only required if we adopt the bundle, which we should not.
Maintenance. The bundle is an operational liability in direct proportion to how much of it we use — and v6.2.0 sharpens the point. A fork that tracks upstream majors means our upgrade treadmill is now coupled to upstream's release cadence plus the fork maintainer's rebase lag, with neither documented. Adopting the bundle in a Laravel codebase means owning a permanent incompatibility plus that coupled treadmill; adopting the core library means owning ~200 lines of glue and a version pin we choose. Prefer the latter. Track florianv/swap releases directly and pin exactly; do not float a financial dependency.
Support. Effectively none, unchanged. No dependents, no visible issue traffic, no community, no vendor escalation path. v6.2.0's single-line release note is a concrete illustration of the support posture: major-version information is not curated for consumers. Internal ownership must be assigned explicitly — named team, documented on-call path — and the fork escape hatch priced in from day one.
Scaling. Unchanged; provider quotas remain the binding constraint, not application throughput.
Failure modes and mitigations.
| Failure | Impact | Mitigation |
|---|---|---|
| Provider outage / 5xx | Conversion errors, checkout blocked | Serve last-known-good cached rate; circuit breaker; secondary provider |
| Stale rate served silently | Misstated prices, margin erosion | Emit rate_age metric; block conversion past max staleness |
| Unsupported currency pair | Hard failure on exotic currencies | Pre-flight allowlist; explicit fallback currency |
| Rounding/precision drift | Cent-level discrepancies, reconciliation breaks | Single Money value object; bcmath; documented rounding mode |
| v6.0 rebase changes config keys or provider defaults silently | Runtime misconfiguration; wrong or missing rates in production | Diff v6.1.0...v6.2.0 before upgrade; integration test asserting provider + config contract; pin 6.1.x if unverifiable |
| Credential leakage in logs | Security incident | Scrub provider keys from exception handlers |
| Forward-dated/unverified tag | Unreviewed code in production | Pin by commit SHA; review diff before upgrade |
Ramp-up. Integration ramp-up stays low — a mid-level engineer wires the core library in a day. Operational ramp-up remains the real cost: rate provenance, refresh cadence, cache semantics, monetary rounding. Add one item to the runbook in light of v6.2.0 — "a dependency upgrade changed our rates" — covering how to detect it (golden-value conversion tests against a fixed set of pairs and a recorded fixture), how to confirm which version is deployed, and how to roll back. Budget a short internal design note plus the runbook.
Verdict. Do not adopt part-db/swap-bundle for a Laravel/PHP stack. v6.2.0 is a mild positive signal — the fork is rebasing onto upstream majors rather than drifting, which answers part of our open governance question — but it is delivered as a one-line note over an undocumented major-version bump, with the forward-dated tag still unexplained and no dependent ecosystem to validate the result. For Laravel, consume florianv/swap directly behind a first-party adapter. For Symfony, treat v6.2.0 as unverified until the rebase diff and platform matrix are confirmed, and hold at 6.1.0 in the meantime. The capability is worth having; this package is still not the reason.
How can I help you explore Laravel packages today?