goldnead/statamic-products
goldnead/statamic-products is a Statamic addon for building and managing product listings within your site. It provides product data structures and publishing tools to help you create organized, searchable catalogs in Laravel/Statamic projects.
Architecture fit
1.11.1 was a presentation-layer patch to the file picker; 1.12.0 is an additive domain-model change to credit lines. They are independent — the picker work is unchanged and unaffected.1.12.0 introduces the package's first point-in-time concept: an added_at timestamp written by the model when it numbers a credit line, plus two read paths that accept it (Access::creditLinesAt($at) and AccessView::creditLines(includeEnded: …, at: $at)). This is new API surface, not a patch, and it is the first release in this lineage that implies a schema change.null means "has always been there", not "unknown". Lines from the takeover (which carry their own number) and all lines saved before 1.12.0 are permanently undated. That is a deliberate and defensible choice for a system that must not retroactively invalidate existing grants, but it means point-in-time accuracy only holds for data created after the upgrade.added_at. This protects audit integrity at the cost of silent-write behavior, which is the kind of thing integrators need told explicitly.Integration feasibility
composer update alone is not a complete upgrade.creditLines() without at behaves exactly as before, and ended_at semantics are untouched. Existing call sites and views need no edits to keep working.Technical risk
added_at gets the stored value back rather than an error. Good for integrity, but it means a genuine data-correction need has no supported path through the normal write surface.at interacts with includeEnded and with timezone/precision in ways the notes do not pin down. Getting boundary handling wrong produces off-by-one grant decisions that are hard to notice in testing and expensive in production.Key questions
(access_id, added_at) range filtering? On a large credit-line table an unindexed point-in-time query is a table scan.null semantics and that no backfill is attempted. Is there a documented statement that pre-1.12.0 grants cannot be replayed accurately?$at: inclusive (<=) or exclusive (<)? What precision is stored (seconds vs microseconds), and in what timezone — is added_at written in UTC regardless of app timezone?at also filter on ended_at, or is it purely a lower bound on existence? A line that ended before $at — excluded or returned?null forever, and is that acceptable to finance/audit, who may read null as "no data" rather than "always present"?added_at? Is the silent revert logged anywhere, and can support distinguish "user edit ignored" from "save succeeded"?Stack fit
php artisan migrate.added_at) are orthogonal; they can be sequenced or shipped together without coupling.Migration path
^1.12.0, run composer update for the package only, then php artisan migrate. Confirm whether the migration is auto-discovered or must be published — this differs between package designs and is the single most likely cause of a failed deploy.vendor:publish for config implied. No backfill script exists or is needed; the null-means-always-present semantics are the intentional substitute for backfill.added_at for historical rows. Doing so would convert "undated, therefore always present" into concrete timestamps that were never recorded, and would silently change replay results for every existing grant.Compatibility
added_at is treated as existing at every point in time (1.12.0); (c) writes that alter added_at are silently ignored rather than rejected.at:) is a minor forward-compatibility coupling — a future parameter rename would break callers. Prefer documenting the signature as stable.Sequencing
^1.12.0 in staging; run migrations and verify the column and index exist on a production-sized copy of the credit-line table.../). These are independent regressions.creditLines() with and without includeEnded returns identical results to 1.11.1 for the same fixtures.added_at, and a line that has ended. Assert results at timestamps before, exactly at, and after each.added_at omitted and with added_at altered; confirm both persist the originally stored value. Confirm the behavior is at least observable in logs.at comparisons still return the expected set.Maintenance
Support
added_at → expected, by design, escalate for a manual data fix if genuinely wrong.Scaling
added_at filter adds a range predicate on a table that historically only had point reads; without an index this degrades as credit lines accumulate per access. Confirm the index ships or add it.creditLinesAt is strictly narrower than creditLines() when a date is supplied, so the risk is index availability, not query shape.Failure modes
null to "unknown" rather than "always present" will mis-state history.Ramp-up
added_at has always existed, and once a line has one it cannot be changed.AccessContainers::allow() and enforced only on the server; the picker's folder is a convenience, not a control; credit lines are datable and immutable, and undated means always present.How can I help you explore Laravel packages today?