novosga/triage-bundle
Symfony bundle that adds triage workflows to Novo SGA: configure service queues and priority rules, screen incoming attendances, and route tickets to the right desk. Integrates entities, forms, and admin screens for PHP/Symfony applications.
Architecture fit. novosga/triage-bundle is a Symfony bundle, not a Laravel package — a critical distinction for this evaluation. It ships no Laravel service provider, no publishable config, no facades, and no Laravel-native test harness. It is a domain module for appointment/triage scheduling inside the Novosga queue-management ecosystem (Symfony full-stack). Fit is therefore strong only if our target is a Symfony 7.x application or the Novosga platform itself; fit for a Laravel codebase is poor-to-moderate and requires an explicit bridge or service-boundary decision.
Integration feasibility. v2.3.0 is a low-drama, additive minor release under semver. Two items carry real integration weight:
The timezone fix (PR #6, "use unit timezone when parsing scheduled appointment datetime") is the sleeper. It is labeled a bug fix but changes how appointment datetimes are interpreted for units whose timezone differs from the server default. That is a data-correctness improvement with user-visible consequences: previously mis-parsed appointments may now render at different times. Treat it as a behavior change requiring regression coverage, not a routine patch.
Technical risk. Moderate-low on code quality, moderate on governance. Dev-tool modernization (PHPStan 2, PHPUnit 11, PHPCS 4 — PR #8) indicates active static analysis and a real test suite, which is reassuring. Against that: single-maintainer project (@rogeriolino authored every change in this release), small PR volume (single-digit PR numbers), and a dependency on the upstream Novosga release cadence. There is no vendor SLA, no security policy evident in the notes, and no LTS commitment for the bundle itself.
Key questions.
Stack fit. Green-light for a Symfony 7.4 / PHP 8.2+ host or for deployments already inside the Novosga platform. For Laravel, do not attempt in-process integration via bundle registration hacks; either (a) isolate triage scheduling behind a thin HTTP/queue contract and run the bundle in its native Symfony context, or (b) reimplement the appointment-delay and timezone semantics in Laravel-native code and accept the divergence cost. Option (a) is the lower-risk TPM recommendation: it preserves upstream upgrade paths and keeps the bundle's assumptions intact.
Migration path. Sequence in three gates.
v2.3.0, read the diff for PRs #6 and #10 specifically, and confirm the max-delay default. Do not float on ^2.3.Compatibility. Confirm no transitive constraint pins Symfony <7.4 elsewhere in the tree; the LTS bump is the most likely source of resolver conflicts. Confirm PHPUnit 11 does not conflict with the host's own test tooling if we run the bundle's suite in CI. Note that Symfony 7.x has no 6.x bridge — this release effectively closes the door on dual-version support.
Sequencing. Config/feature adoption (max delay) should trail the framework and timezone work by at least one release cycle. Ship the bug fix and the LTS upgrade as a correctness-and-hygiene release; ship the new max-delay configuration as a separately gated, product-owned rollout with its own default-value decision and stakeholder sign-off.
Maintenance. Light. The bundle is small, the release is mostly chores plus one feature, and the move to Symfony 7.4 LTS reduces near-term upgrade pressure — we should be able to sit on this line for the LTS window. The dev-tool refresh (PHPStan 2, PHPUnit 11) means our CI can adopt current static-analysis and test-runner versions without shims. Budget ongoing effort mainly for tracking the single maintainer's releases, not for patching.
Support. This is the weak point. One maintainer, no visible support contract, no published security-response process. Operationalize by: vendoring or mirroring the repository, keeping a fork-ready posture, and assigning a named internal owner for the dependency. Treat it as a community dependency with a documented fallback, not a vendor-supported component.
Scaling. The scheduling/triage domain is low-throughput relative to queue transactions; the new max-delay check is a configuration comparison, not a heavy query, and should not alter scaling characteristics. The realistic scaling concern is timezone correctness at multi-site scale: more units across more timezones increases the blast radius of any parsing defect. The PR #6 fix improves this; the test matrix must grow with site count.
Failure modes.
Ramp-up. Low for a Symfony-fluent engineer: small surface, conventional bundle layout, clear domain. The real ramp cost is domain literacy — triage priority, appointment delay policy, and per-unit timezone semantics — which is product knowledge, not framework knowledge. Plan a half-day for a Symfony developer to read the bundle, and a full sprint of pairing with the scheduling/product owner before anyone is trusted to change max-delay policy. If the team is Laravel-only, add meaningful ramp for Symfony fundamentals plus the service-boundary pattern, and expect the first integration to take materially longer than the bundle's size suggests.
How can I help you explore Laravel packages today?