divoto/cairn
Cairn is a lightweight Laravel package from Divoto that helps you mark a clear path through your codebase with a clean, expressive API. It integrates smoothly with Eloquent, ships with sensible defaults, and makes complex features easier to build and maintain in any Laravel app.
composer update, optional widget config changes, optional config:cache, and optional historical rollup backfill. The main integration work is not code-level but coordination: auditing JSON API clients for stricter validation, communicating the dashboard default change from 30 days to Today, and deciding whether to backfill Broken pages / per-route errors from retained raw entries.range parameter.group_by/metrics combinations? Is raw entry retention long enough to justify a rollup backfill? Has privacy/legal reviewed the not_found recording behavior, especially URL scrubbing and the fact that unmatched URLs are treated as a separate entry type? Are published widget lists in use, requiring explicit addition of SlowestRoutes and BrokenPages? What is the expected 404/scanner volume in production?web middleware and Cairn’s existing service provider/config conventions. The new global middleware is intentionally scoped: it records only GET requests answered 404 that are not asking for JSON, and it respects DNT/GPC/opt-out/consent/bots/sampling and Cairn::ignore(). Sanctum remains optional; a disabled API now returns 404 before configured auth middleware runs.config:cache if used, audit API clients, then optionally run the documented rollup backfill for retained raw entries. The backfill command is optional but useful for giving Broken pages and per-route errors history; unmatched-route not_found records cannot be backfilled because they were never recorded before.limit semantics are corrected, dimension filters now actually narrow reports, disabled endpoints are always 404, and malformed/unrecognized parameters are rejected. Dashboard default range changes to Today when no recognized range is present, while explicit ranges/bookmarks continue to work. Slowest routes requires no backfill; Broken pages benefits from backfill.cairn:rollup in a controlled job. 5) Notify dashboard users of the Today default. 6) Roll to production and monitor 404/error entry volume, API 422 rates, and rollup duration.limit cap at 1,000, and the fact that unknown parameters are rejected. The backfill command should be documented with the retained date range and expected runtime.not_found entry type can increase write volume in environments with heavy scanning or broken-link traffic, though it excludes JSON requests and applies privacy gates. Dimension::ErrorPage is capped at the hundred most frequent status/URL/referrer combinations per bucket, which limits rollup growth. SlowestRoutes excludes routes with fewer than five pageviews, reducing noise. Monitor storage, rollup duration, and 404 entry rates after rollout._=…. A stale config cache can hide new widgets. A missed widget-list update makes Slowest routes and Broken pages invisible. A malformed or overly broad backfill command could reprocess more raw data than intended, so run it with explicit dates and period. The global middleware could record unexpected 404 traffic if bots/scanners bypass existing filters, so verify privacy gates and ignore rules. Disabled API behavior is improved: it now returns 404 rather than leaking 401/500 behavior.How can I help you explore Laravel packages today?