php-bug-catcher/bug-catcher
Bug Catcher is a Laravel/PHP package for catching and inspecting application errors and exceptions. It helps surface bugs early, keeps debugging details organized, and gives developers a simple way to log, review, and resolve issues with minimal setup in everyday Laravel workflows.
Architecture fit
The package owns a project → record → perf_bucket → record_log_withholder object graph and has now moved referential-integrity responsibility out of the database schema and into application code. Previously the delete was a single DELETE FROM project trusting FK cascade rules; because record_log_withholder has no cascade while record and perf_bucket do, the statement was refused outright. The fix deletes dependents explicitly and the project last. Architecturally this is a reasonable, portable choice (it no longer depends on every environment's FK configuration agreeing), but it converts a schema-enforced invariant into a code-enforced one that must be maintained by hand as the model grows.
Integration feasibility
Straightforward for consumers using stock record types — the delete path is self-contained. The relevant seam is BatchRecordDeleteInterface: custom record types are covered provided they implement it. That is the one integration task we own. Feasibility drops to "unknown" until we confirm whether that interface is a stable public contract or an internal detail that leaked into the release note.
Technical risk
$em->remove(), entity manager, cascade semantics) reads as Doctrine/Symfony, not Eloquent. If we are consuming this as a Laravel package, we need to know what that abstraction actually is before we plan around it.Key questions
BatchRecordDeleteInterface a supported public extension point, and what is its stability commitment across 2.0.x?Stack fit The package slots into the admin/application layer cleanly; the change is internal to a delete handler and does not introduce new infrastructure. The open stack question is the persistence layer: the entity-manager style in the notes suggests a Doctrine-style unit of work, which behaves differently from Eloquent around cascade and flush ordering. Confirm before we commit to an integration design.
Migration path
Treat 2.0.0-RC3 as pre-release only: staging and feature-flagged environments, no production deploy. The practical migration work is (a) audit every custom record type we own against BatchRecordDeleteInterface, and (b) verify that anything relying on the old behavior — including any workaround where we hid or disabled the delete action ourselves — is removed. Do not plan a 1.x → 2.0 cutover until GA and the breaking-change list land.
Compatibility
Sequencing
BatchRecordDeleteInterface on all in-house record types.Maintenance A permanent standing tax: every future dependent table must be added to the explicit delete sequence. This is exactly the kind of omission that produces the same class of bug in six months, and it will not be caught by the database. Add a checklist item to the schema-change process.
Support Support load shifts character rather than volume. "Delete project is broken" tickets stop; "I deleted the wrong project, restore it" tickets begin. With no documented restore path, those become engineering escalations. Brief the support team and prepare a runbook before the action is visible in the UI.
Scaling
The delete is now a multi-statement, order-dependent operation whose cost scales with the size of the project's record history. Large projects risk request timeouts, long-held locks and replica lag. The BatchRecordDeleteInterface naming implies chunked deletion, but the notes do not confirm batching, chunk size, or whether the whole thing runs synchronously in the admin request. For our larger tenants this is the main operational unknown.
Failure modes
Ramp-up Low for admin users — the action simply returns. Moderate for our developers, who must understand the interface and the manual cascade list. One half-day of engineering plus a runbook and a support briefing is a realistic estimate, with the caveat that the interface-stability and transaction answers could change that materially.
How can I help you explore Laravel packages today?