v1.5.1 — Security Hardening
Released: 2026-04-08
A security-focused patch release. No new features — every change here closes a gate leak, hardens an endpoint, or adds a supply chain verification step.
Security
Section titled “Security”Community Mode Gate Enforcement
Section titled “Community Mode Gate Enforcement”- Closed 3 gate bypass paths —
canopy map,canopy search, andcanopy patternwere accessible in Community Mode despite being gated features. All three now check the license tier before executing and display the Community Mode upgrade message when unlicensed. - Added
/releases/latest/redirect — the R2 binary distribution endpoint now serves a stable URL that resolves to the latest release. Useful for install scripts.
Admin Portal Hardening
Section titled “Admin Portal Hardening”- Constant-time shared secret comparison — the admin portal’s webhook authentication now uses
crypto.timingSafeEqual()instead of string equality to prevent timing side-channel attacks. - CORS lockdown — removed
localhostfrom the production CORS allowlist. Development origins are only permitted whenENVIRONMENT=development. - Session cookie scoping — admin session cookies now set
SameSite=Strict,Secure, andPath=/adminto prevent cross-site and cross-path leakage. - D1-backed rate limiting — magic-link login endpoints are rate-limited to 5 attempts per email per 15-minute window, enforced server-side via D1 rather than client-side tokens.
Supply Chain
Section titled “Supply Chain”cargo-denyintegration — newdeny.tomlconfiguration with a strict license allowlist (MIT, Apache-2.0, BSD, ISC, MPL-2.0, and other permissive licenses). Copyleft dependencies (GPL, AGPL, SSPL) are denied by default.cargo-auditadvisory scanning — checks every dependency against the RustSec advisory database on every CI run.- GitHub Actions SHA-pinning — all CI actions are pinned to exact commit SHAs instead of mutable tags. Prevents supply chain attacks via tag re-pointing.
- Admin portal invite INSERT — the
INSERTstatement for team invitations was missing the email column bind, causing a 500 error on every invite. Fixed. - Admin portal
meshortcut — routes using the/meconvenience path now resolveteam_idfrom the authenticated session instead of requiring it in the URL.
Upgrade Notes
Section titled “Upgrade Notes”Drop-in replacement for v1.5.0. No configuration changes required. The license file format, MCP tool signatures, and CLI command surface are unchanged.