lsnepomuceno/laravel-a1-pdf-sign
A Laravel package for digitally signing PDF documents with A1 certificates. It integrates easily into your app to apply ICP-Brasil compliant signatures, add visual signature stamps, and protect files with a practical, fluent API.
Gate. That reframes the question from "do we build a custom authorization layer for AI document access?" to "do we write two gate definitions?" — a much cheaper yes.Ability::Read and Ability::Sign let you express real policy — "a customer may sign only their own contract" — in the place where policy already lives. This supports compliance review, security sign-off, and customer-facing commitments about what an assistant can and cannot touch.agents.max_bytes (50 MB default, checked from disk metadata before a byte is loaded) is the limit on what a model can name. It caps memory exposure per agent call, which is the number you need when modeling hosting costs and blast radius.Mcp::oauthRoutes() for remote clients, plus when to use laravel/mcp's ToolSearch grouping (and why the package's own two-tool server doesn't). Rate limiting and OAuth are the two gatekeepers before any external assistant can touch contracts.Gate/policies are your source of truth. If so, integration is two definitions. If authorization lives in a separate service, an external ABAC engine, or tenant middleware rather than gates, you will bridge it yourself.max_bytes applies even to a config published under 3.1.0 (a missing key means the 50 MB default). Set agents.max_bytes explicitly — or null to preserve 3.1.0 behavior — as part of the upgrade, and audit for documents above 50 MB that agents must reach.UPGRADE.md#from-310-to-320; the release is additive, but the size limit and gate semantics are behavior, not just configuration.ToolSearch grouping matters — the package's own server deliberately omits it at two tools, so a many-tool deployment puts that composition on you.Ability::Read and Ability::Sign gate definitions to the agent tools; the gate is checked before the file is opened, so refusals don't leak path existence. Two things to action: (1) abilities are fail-open — an undefined ability allows, so define both and add a regression test for refusal; (2) agents.max_bytes defaults to 50 MB and applies even without a republished config — set it explicitly, or null for 3.1.0 parity, and confirm the disk metadata path is available on your driver. The rest is additive: docs on throttling the MCP route, Mcp::oauthRoutes() for remote clients, and ToolSearch grouping trade-offs. Upgrade path is documented; quality signals are strong (233 tests, PHPStan max, 100% type coverage, suite green with both SDKs removed, plus a live-model scenario covering reads, refusals, and the approval flow).How can I help you explore Laravel packages today?