laravolt/suitable
Laravolt Suitable is a Laravel package for adding approval workflows to Eloquent models. It provides configurable statuses, reviewer actions, and history tracking so records can be submitted, approved, or rejected with a clear audit trail.
Architecture fit. Release 3.6.12 adds support for the -> operator when searching JSON columns. In Laravel terms this is the difference between a search/filter layer that only understands scalar columns and one that can address nested document attributes (meta->tier, payload->customer->region) using the same DSL. That matters for any application that stores extensible attributes in JSON/JSONB columns — tenant-specific metadata, feature-flag payloads, third-party webhook bodies, product attributes — because those fields are frequently the ones product stakeholders most want to filter on, and previously had to be handled with bespoke query code outside the package. Architecturally this is an additive capability inside the existing query-building abstraction: it does not introduce a new runtime dependency, queue, service, or storage layer, so it does not disturb the application's topology. The main architectural question is whether the new operator is translated per database driver or emitted as raw SQL fragment — the former keeps the abstraction honest, the latter leaks driver semantics into the package's contract.
Integration feasibility. High. This is a Composer-installable PHP package with no infrastructure footprint; adoption is a version constraint bump plus test coverage. The patch-level version number (3.6.12) signals the maintainers regard this as backward compatible, which is the right signal for planning purposes but should be verified against the diff rather than assumed.
Technical risk. Three areas:
col->key->nested) must constrain which paths are addressable. If the search layer maps request parameters onto columns without an allowlist, a JSON path expression is an attacker-influenced SQL fragment. This is the single highest-severity question for the release.WHERE meta->>'$.tier' = 'gold' will typically scan unless a functional index (PostgreSQL) or generated column + index (MySQL 5.7+/8) exists. Functionally correct, potentially catastrophic at scale — a correctness win can become a latency regression.Key questions.
-> support implemented per-driver, and is the supported driver matrix documented and tested in CI?Stack fit. Native to Laravel: assumes Eloquent/query-builder conventions, PHP 8.x, Composer, and the standard config/ publishing pattern. No new runtime surface. Fits existing CI and deployment pipelines unchanged.
Migration path. Pin to ^3.6.12 in composer.json, run the full suite on a branch, then add explicit tests for JSON-column search before enabling it in any user-facing filter. Because the change is additive and patch-versioned, rollback is a constraint downgrade with no schema implication — the reversibility profile is as good as it gets.
Compatibility. Verify against the specific database versions in production, not the package's stated minimum. Confirm that existing search/filter call sites behave identically (additive features occasionally alter query shapes or parameter parsing). Check the package's Laravel/PHP support matrix against our current framework version and upgrade runway.
Sequencing.
Maintenance. Minimal ongoing cost: one Composer constraint, no new infrastructure, no new on-call surface. The recurring cost is version hygiene — this package is now on the critical path for filtering, so changelog review belongs in the routine dependency cadence rather than ad hoc.
Support. Support burden shifts to how rather than whether: engineers will ask why a JSON filter is slow, and the answer will be about indexes, not the package. Budget for a short internal note capturing supported path syntax, driver caveats, and the indexing requirement, so the answer is written down once.
Scaling. This is the release's principal operational risk. Correctness at small data volumes says nothing about behaviour at 10⁷ rows. Treat JSON-column filtering as a feature that requires an indexing plan per field before it reaches production traffic; without it, a single dashboard filter can become a sequential scan. Recommend gating rollout on a query-plan review for each newly exposed JSON field.
Failure modes.
Ramp-up. Low for basic use — a developer familiar with Eloquent picks up the operator syntax in well under a day. The non-obvious cost is database-specific knowledge (index strategy for extracted values, query-plan reading) which most application developers do not carry; plan for a short pairing or written guidance from whoever owns the database, and treat that as the real ramp-up, not the API.
Caveat. No prior assessment and no package metadata were supplied, so this evaluation is anchored on the 3.6.12 release note and standard Laravel/PHP conventions. Validate the driver matrix, allowlist behaviour and indexing guidance against the package source before committing to a rollout timeline.
How can I help you explore Laravel packages today?