Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Providence Bundle Laravel Package

survos/providence-bundle

A Symfony bundle from Survos that wires Providence services into your PHP application, with ready-made configuration, service definitions, and Twig helpers. Install via Composer, register the bundle in your kernel, and start using it.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Framing correction up front: despite the "Laravel/PHP package" brief, this is a Symfony bundle, not a Laravel package. That distinction drives most of the assessment below. It is also a near-zero-adoption artifact (0 stars, 0 dependents, no release history visible), so it should be treated as source material to evaluate, not a dependency to adopt.

What it appears to do. CollectiveAccess' Providence is the application layer of the CA suite; a "providence profile" (PAWtC XML) is the metadata schema that defines elements, attribute types, relationships, and UI for a CA installation. This bundle is a Symfony wrapper for ingesting/working with those profiles — i.e., it turns a museum/archive metadata schema into something a Symfony app can reason about. The durable value is schema interpretation knowledge, not the bundle plumbing.

Architecture fit

  • Fit is conditional and narrow: Symfony 6/7 + Doctrine + DI container + bundle registration. Inside a Symfony service, the fit is natural.
  • Inside our stated Laravel stack, the fit is poor. Bundles depend on Symfony's bundle/extension/config-tree/event-dispatcher contracts; Laravel's container, config, and package discovery are different. Only the domain logic is portable; all the wiring is not.
  • The underlying need — "read and map a CollectiveAccess profile" — can be met without this bundle: (a) parse PAWtC XML against the published XSD ourselves, (b) call the CA Providence web services API, or (c) read from the CA database. This bundle is one of four options and the least supported.

Integration feasibility

  • Documentation: effectively none. No README-driven quickstart, no usage examples, no tests visible from the outside.
  • Consumability: 0 stars / 0 dependents means no downstream code to crib from and no evidence anyone has run this in anger. Assume a multi-day spike just to get it booting with a real profile.
  • Verification cost is the dominant cost. We cannot estimate effort without first obtaining a representative PAWtC profile from the target institution and running it through.

Technical risk

Risk Severity Note
Bus factor / abandonment High Single-maintainer (survos) ecosystem; no release tags implies commit-pinning
Framework mismatch High Symfony-only; our stack is Laravel
Dependency sprawl Medium Bundles like this typically pull sibling survos/* packages, each with its own constraints
Schema drift Medium CA profile semantics evolve across CA versions; no versioning contract here
Silent data loss High Profile→entity mapping failures tend to drop attributes quietly rather than error
Security Low–Medium XML parsing of externally supplied profiles → XXE/billion-laughs surface; must audit libxml config

Key questions

  1. Is the actual requirement "interoperate with a live CollectiveAccess instance" or "consume a metadata profile as a schema"? These have very different solutions, and only the second one is plausibly served here.
  2. Do we have a real PAWtC profile (and its CA version) to test against?
  3. Is there appetite to run a Symfony service alongside Laravel for this bounded context, or must everything be Laravel-native?
  4. Are the bundle's composer.json constraints satisfiable on a currently-supported PHP/Symfony LTS, or does it drag us onto EOL versions?
  5. Is any of this code derived from CollectiveAccess (GPL-3.0) itself? The bundle is MIT, but license provenance needs checking before we embed it.
  6. What is the fallback if the spike fails — own parser, CA API, or manual export?

Recommendation: evaluate as a reference implementation for schema handling, not as a dependency. Budget a 3–5 day spike, timeboxed, with a pre-agreed fallback.


Integration Approach

Stack fit

  • Native target: PHP 8.x, Symfony 6/7, Doctrine ORM, Twig. Composer-installed, registered in config/bundles.php.
  • Our stack: Laravel. Direct composer require into the Laravel app is not viable — the bundle will register services into a container kernel we don't run.
  • Two workable shapes:
    1. Sidecar service — a small Symfony app owning "profile → schema" translation, exposed to Laravel over HTTP/queue. Preserves the bundle's assumptions; adds a deployable.
    2. Extract, don't install — pull the profile-parsing classes into our own namespace behind an internal interface. MIT license permits this; we accept ownership of the code.

Migration path

  • There is no migration path from anything — this is greenfield adoption. The real migration question is data: importing existing catalog metadata described by the profile into our schema.
  • Sequence the data path explicitly: profile ingestion → internal schema model → record import → reconciliation report. Do not conflate "the bundle parses the profile" with "records land correctly."

Compatibility

  • Pin to a commit SHA, not a version constraint. With no tags, dev-main is a moving target and will break builds without notice.
  • Audit composer.json for PHP and Symfony constraints and for sibling survos/* requirements that may conflict with other packages.
  • Check Doctrine ORM major version; annotation-vs-attribute mapping changes are a common break point in bundles of this vintage.
  • Confirm the bundle's XML layer disables external entity loading.

Sequencing

  1. Spike (3–5 days): obtain a real profile; get the bundle parsing it; produce a dump of parsed elements. Success = a readable element/attribute tree.
  2. Gap analysis (2 days): compare parsed output to the profile's declared elements. Any loss = mapping defect.
  3. Build-vs-buy decision: weigh sidecar Symfony vs. extracted classes vs. own parser vs. CA API. Write it down.
  4. Anti-corruption layer: define our domain model for "metadata schema" first; adapt the chosen implementation to it. Nothing downstream references bundle types directly.
  5. Record import against a small sample set, with field-level reconciliation.
  6. Harden: caching, error handling, XXE config, logging.

Decision gate: if step 1 does not produce a complete, lossless element tree in a week, stop and take the CA web services API route.


Operational Impact

Maintenance

  • Expect to own this code. Zero dependents and zero stars means no upstream issue triage, no security advisories, no compatibility patches when PHP or Symfony advances.
  • Mitigation: fork or vendor the parsing layer at a pinned SHA; keep it behind an interface so it is replaceable in one place.
  • Budget roughly 10–15% of one engineer ongoing for dependency/version drift, more in the first year.

Support

  • No community, no docs, no SLA. Internal documentation becomes mandatory — specifically the mapping contract between profile elements and our domain model.
  • Institutional knowledge risk: one engineer's spike output is the only documentation. Require written findings as a spike deliverable.

Scaling

  • Profile parsing is CPU-bound, low-volume, and cacheable — this is not a throughput problem. Parse once at deploy/import time, persist the normalized schema, serve from the database.
  • Avoid parsing profiles on the request path; that is the only realistic scaling failure.
  • Record import volume is the real scale question and depends on catalog size, not on this bundle.

Failure modes

Mode Symptom Detection
Silent attribute loss Records import with missing fields Field-level reconciliation counts per import
Schema drift New CA profile version breaks mapping Pin/profile-version assertion at startup
XML bomb / XXE Parser hang or file disclosure libxml entity loading disabled; size limits
Dependency rot composer update unresolvable Lockfile discipline; scheduled upgrade check
Abandonment No fix for a PHP 8.x break Vendored copy, owned by us
Framework mismatch bite Bundle boots but services never bind Only surfaces in the sidecar shape; test early

Ramp-up

  • Steep and two-dimensional: Symfony bundle conventions plus CollectiveAccess metadata semantics. Neither is common knowledge on the team.
  • Estimate 3–4 weeks to productive for an engineer new to both; ~1 week if they know Symfony and only need the CA domain.
  • Cheapest de-risking move: get the profile owner (the institution/registrar) into the room early. The metadata semantics, not the PHP, is where projects like this fail.

Bottom line for the portfolio: low adoption, narrow framework fit, and a stack mismatch against our Laravel baseline make this a research input, not a dependency. Approve a timeboxed spike with a named fallback; do not approve adoption on the basis of the package itself.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
laravel2580/idehelpers
delatbabel/viewpages
anavel/gettext
muhamadrezaar/highcharts
delatbabel/keylists
frankkessler/salesforce-laravel-oauth2-rest
anavel/foundation
wdmtech/enviricons
eii/laravel-captcha
muka/shape-reader
tdt/json
refinery29/php-cs-fixer-config
hotmeteor/eco-env
mvaliolahi/hydrate
wearede/tbcpay-php
parsnick/steak
thibaud-dauce/mattermost-php
multilinguals/apollo-client
antaresbr/collection
kr0lik/phpstan-rules