Repository navigation
v0.2.0
Pre-release
Pre-release
Upgrading from 0.1.0? Configurations require changes: see
docs/upgrade-apl.md.
docs/content/apl/apl-grammar.mddocuments the APL grammar.
Added
assertions:controls headers at trust boundaries. (#56)- The normative APL grammar and custom
response:denial block are now documented. (#55) - Differential tests cover Cedar, CEL, and OPA. (#43)
- Delegated tokens can be cached until expiry, with warnings for routes that delegate unvalidated credentials. (#36)
http:routes generic HTTP requests, withhttp.responseandhttp.statussupporting response policy. (#42)- Hook declarations now include their routing metadata. (#38)
- Hosts provide the transport used by PPE plugins, gated by the
perform_httpcapability. (#32) - Outbound HTTP gains body limits, HTTP/2, safe retries, explicit egress-denial codes, prohibited-address data, and a deterministic test transport. (#32)
- JWT claim mapping is configurable through presets or inline maps, with claim inclusion and exclusion controls. (#31)
- Roles and permissions are readable as whole sets. (#7)
Changed
- APL now treats
require(P)as!P, permits onlyrun(name)for plugin invocation, and rejects field operations in rule position or empty pipe stages. (#55) - Quoted literals, attribute paths, reserved words, boolean operators, numbers, and lexer positions now follow one strict grammar. (#55)
- Dispatch defaults to
policy; unreachable plugins fail loading, narrowed plugins raise an alarm, and requests without resolvable context are denied. (#55) - The compiled IR, group authorization, plugin reachability, and policy-term compilation now follow the canonical configuration model. (#55)
- Dispatch-specific and unknown keys are rejected at every scope; global-only keys, authentication replacement, and
response:resolution are enforced consistently. (#55) - Generic HTTP has typed request and response hooks; incompatible handlers and message-only field pipelines are rejected. (#42)
- HTTP route resolvers use the matched route, report annotation replacement, expose integration errors, and reject unread route keys. (#42)
- Hook names are validated on every load path, and metadata lookup now returns
Option<HookMetadata>. (#38) - Plugins initialize through
Plugin::initialize_with, andidentity-jwtrefreshes JWKS on demand. (#32) - JWT configuration rejects unknown keys and invalid SPIFFE trust domains; workload trust domains are derived rather than mapped. (#31)
- Unused items now fail the build. (#44)
Security
- A panicking
parallel:branch produces a Deny. (#45) - The bundled transport blocks prohibited destination addresses. (#45)
- Leg-2 token-exchange denials no longer expose IdP response details. (#45)
- JWT issuers must configure at least one audience. (#45)
!=on a missing attribute evaluates to true. (#45)- Non-numeric and non-finite order comparisons fail closed. (#45)
- Unreadable handler results are execution errors, not Allows. (#45)
Removed
- The legacy
compile_configpath, its alternate route shape, and its catch-all are gone. (#55) - Policy-mode activation lists, the HTTP inertness alarm, route
when:, and other parsed-but-inert settings are gone. (#55) - Legacy policy keys, flat phase keys, the
apl:wrapper, global field pipelines, and unknown top-level keys are rejected. (#55) - Unused hook-name modules and
AplRouteHandler::with_pdp_routerwere removed. (#38, #44)
Fixed
- Praxis integration fixes cover false narrowed-plugin alarms, explicit
ringselection, and policy evaluation on glob entity routes. (#72) - Bundles joined through both tags and groups run authentication only once. (#56)
- Policy layers now account for above-route delegation and elicitation, entity-default authentication, and empty authorization phases. (#55)
- HTTP matching now uses the host path exactly and validates duplicate routes, absolute paths, reserved names, and method tokens and precedence. (#42)
- HTTP dispatch preserves response and post-phase handlers while avoiding repeated normalization, path cloning, and authentication scans. (#42)
- Concurrent plugin registration no longer loses plugins. (#41)
- HTTP and elicitation hooks now report complete routing metadata, which
MessageViewuses for phase detection. (#42) - Subject claims preserve JSON shape, scalar arrays become
StringSetvalues, and float claims work with Cedar. (#9) - JWKS rotation no longer depends on a background runtime. (#32)
- Empty sets no longer read as missing attributes. (#7)
New Contributors
- @alexsnaps made their first contribution in #1
- @dhl123 made their first contribution in #7
- @mkoushni made their first contribution in #33
- @abdallahsamabd made their first contribution in #43
Contributors
Full Changelog: v0.1.0...v0.2.0