fooino/core
A lightweight core package for Laravel/PHP projects, bundling shared utilities, service providers, and sensible configuration defaults. It simplifies common setup tasks and provides a stable foundation for Fooino-based applications, helping you focus on building features instead of boilerplate.
Architecture fit. v1.6.0 introduces five global sentinel constants — UNKNOWN, INVALID, UNDEFINED, NOT_FOUND, and HIDDEN — exposed at the package's top level rather than namespaced. For a Laravel package, this signals that the maintainers are standardising a shared vocabulary for "absence-of-real-value" states that previously would have been handled ad hoc (null, false, empty string, magic strings). Architecturally this is a convenience/primitive layer, not a subsystem: it is cheap to adopt, but it also means the package now claims a slice of the global namespace inside every consuming application. That is the single most important architectural fact in this release and must be weighed against the modest functional gain.
Integration feasibility. High for greenfield or tolerant codebases. The constants are inert values; consuming them requires no service provider, facade, config publish, or database change. The real work is not wiring but semantic alignment: mapping each sentinel to an existing domain state (e.g. does NOT_FOUND apply to an Eloquent lookup, an HTTP 404, or a cache miss?) and deciding whether a sentinel replaces or coexists with null. Because the names are extremely generic English words, feasibility drops sharply in large monorepos, multi-tenant installs, or applications that already define similar constants (legacy define('UNKNOWN', ...), third-party SDKs, WordPress-style globals).
Technical risk. Medium-low by severity, medium by breadth.
HIDDEN, INVALID, and NOT_FOUND are common enough that collision is plausible.composer.json files autoload or a bootstrap path). If the package relies on lazy loading, constants may be undefined at the point of use in queued jobs, Artisan commands, or Octane workers that booted before an upgrade.UNDEFINED vs NOT_FOUND vs UNKNOWN) the constants can reduce clarity versus a single well-understood null.Key questions for the maintainers/team.
define() or const, in which file, and are they guaranteed loaded under Octane, queued workers, and php artisan?defined() checks before definition?UNKNOWN, UNDEFINED, NOT_FOUND, and HIDDEN? Is there documentation?Sentinel::NOT_FOUND) for teams that cannot accept global pollution?Stack fit. Neutral-to-positive. It slots into any Laravel 9+/PHP 8.x application with no framework coupling, which also means it offers no Laravel-specific leverage — no config, no container binding, no Eloquent integration. Treat it as a coding-standard dependency, not an infrastructure one. Teams already standardising on PHP 8.1+ enums may find a native enum a cleaner fit than global constants and should compare before adopting.
Migration path. Because there is no prior assessment and no inventory data, treat this as a first-time evaluation. Recommended path: pilot in one bounded service, not a platform-wide rollout. Sequence: (a) confirm the package loads constants reliably in all runtime contexts; (b) pilot in a single module's data-access or validation layer; (c) document the sentinel semantics internally; (d) only then consider broader adoption. There is no forced migration — nothing in v1.6.0 deprecates or removes anything.
Compatibility. Semver-minor, additive only. No breaking change for existing consumers. Watch two edges: applications that already define any of these five constants (collision), and any code doing loose comparison or truthiness against these values — sentinel objects/strings can be truthy where callers previously relied on null being falsy. Verify behaviour under static analysis (PHPStan/Psalm level, especially with custom constant stubs) and under Laravel Octane if used.
Sequencing.
Maintenance. Low ongoing cost — constants are near-zero-maintenance artefacts. The maintenance burden is social, not technical: once teams adopt these names, the semantics must be documented and enforced in review or they will drift. Budget a short internal standards note, not engineering time.
Support. Support load stems from two predictable sources: "constant already defined" warnings on legacy hosts, and developer confusion over which of the five sentinels to use. Both are preventable with a one-page runbook. Because the names are generic, incident triage can be slowed when a stack trace references UNDEFINED — engineers cannot tell from the symbol alone whether it is the package constant, a framework value, or an application one. Encourage fully-qualified or aliased usage in logs and error messages.
Scaling. No runtime scaling impact; constants are compile-time cheap. The scaling concern is organisational: the blast radius of a future breaking change (renaming or removing a constant) grows with every consuming repository. Widely shared global constants become effectively permanent.
Failure modes.
UNKNOWN first; behaviour becomes load-order dependent. Mitigation: pre-flight grep across app and vendor, and ask maintainers to wrap definitions in defined() guards.UNDEFINED used where null was intended, breaking null-coalescing and default-value logic downstream.null.Ramp-up. Near-zero technical onboarding; the cost is a short team briefing on sentinel semantics and the project convention. For a TPM, the honest framing is: this release is low effort, low urgency, and modest value — the decision to adopt is a naming-and-standards decision more than an engineering one. Recommend a time-boxed pilot and an explicit convention decision rather than passive, unmanaged adoption.
How can I help you explore Laravel packages today?