Explicit, honest list of what this package deliberately does not do.
- No business logic or orchestration. This is a thin Saloon-based REST wrapper — typed Request classes and fluent Resource gateways, nothing more. Provisioning sequences, retry/backoff policy beyond the built-in Saloon retry, idempotency across multiple calls, and long-running-operation orchestration beyond the provided polling helpers are the consuming app's responsibility.
- No official
microsoft/*Azure SDK dependency. Every surface is a hand-written SaloonRequest/DTO pair against the documented REST API, not a wrapped SDK client. SeeENDPOINTS.mdfor the full endpoint catalog. - No .NET SDK or Agent Framework runtime code. The Foundry Agent Service and Function Runtime surfaces call the HTTP APIs those runtimes expose — they don't embed or replace the Agent Framework
WorkflowBuildergraph-authoring SDK (.NET/Python only). - No database migrations or application seeding. Deploying a schema into a provisioned Azure SQL database (or similar) is out of scope — bring your own migration runner.
- No service health checks. The package makes the calls you ask it to; it doesn't poll third-party "is this service up" endpoints.
- Actual-state reads are per-resource and control-plane.
observe()(see Advanced usage) issues one ARM/Graph read for one named resource. There is no bulk "what exists in this subscription" sweep — Azure Resource Graph is not wrapped — so a caller reconciling many resources issues many reads. AndAvailableis an ARM answer: it means the resource is provisioned, not that its data plane will serve you.secrets()->observeAccess()is the only data-plane reachability probe the package ships; other surfaces need their own read. - Pre-1.0 / dev-stability.
composer.jsonsetsminimum-stability: dev; the released line isv0.x. Expect breaking changes between minor versions until 1.0. (Note: av1.0tag exists but points at the same commit asv0.11.0— it was cut by hand, not by the release workflow, and does not denote a 1.0 API. See Release tags.) - PHP 8.4/8.5 and Laravel 13 only. No legacy PHP or Laravel support — see Installation.
- API Management coverage is subscriptions/keys only. Products, policies, APIs, named values, and users are not covered — see Logic Apps & API Management.
- Foundry Agent Service sub-surfaces vary in maturity. Memory Stores, Evaluations, Schedules, Datasets, Indexes, and Redteams are lower-priority/preview additions with rougher edges than the core Agents/Responses/Conversations surface — see Foundry Agent Service. Legacy Threads/Runs (Assistants-style) are marked deprecated by Microsoft (sunset August 2026).
- Response bodies aren't redacted on success paths.
src/Security/Redactor.phponly scrubs known secret-shaped fields in error summaries. If you log full response bodies (debug.capture_bodies), some surfaces can return credential material in a 200 response — see Configuration → Security. - A known config-drift bug currently makes the cache-lifetime and request-timeout env vars no-ops — see Configuration → Known drift.
For the design rationale behind the current surface set (why some things were deliberately left out), see docs/REFACTOR.md.
Tags are cut automatically by .github/workflows/release.yml (anothrNick/github-tag-action, default bump: minor) when a pull request against main is merged.
- An unmerged pull request no longer tags — fixed. The workflow triggers on
pull_request: types: [closed], which fires for abandoned pull requests as well as merged ones, so thereleasejob now carriesif: github.event.pull_request.merged == true. Closing a pull request without merging it is a no-op. Until that guard was added, closing one without merging also bumped the version and pushed a tag for code that never reachedmain. - A hand-cut tag is still not guarded against. Composer derives versions from git tags — there is no
versionfield incomposer.jsonto check a tag against (and there should not be one; Composer's own guidance is to omit it). Nothing verifies that a tag was produced by the workflow, and a tag pushed by hand is installable immediately.v1.0andv0.11.0both point at commitb9058b5;v0.1points at a commit that is not an ancestor ofmainat all.
Release by merging a pull request into main and letting the workflow tag. Do not push tags by hand.