{"@attributes":{"version":"2.0"},"channel":{"title":"stern.ca","link":"https:\/\/stern.ca\/","description":"Recent content on stern.ca","generator":"Hugo","language":"en-us","lastBuildDate":"Mon, 25 May 2026 12:00:00 -0300","item":[{"title":"go-authzen: a Go library for the OpenID AuthZEN wire protocol","link":"https:\/\/stern.ca\/posts\/2026-05-25-go-authzen\/","pubDate":"Mon, 25 May 2026 12:00:00 -0300","guid":"https:\/\/stern.ca\/posts\/2026-05-25-go-authzen\/","description":"<p><a href=\"https:\/\/openid.net\/specs\/authorization-api-1_0.html\">OpenID AuthZEN 1.0<\/a>\nwent Final on 2026-01-11. It&rsquo;s a small, focused spec: the wire protocol\nbetween a Policy Enforcement Point (the bit of your app that asks &ldquo;can\nthis user do this?&rdquo;) and a Policy Decision Point (the bit that answers).\nFour endpoint families \u2014 a single evaluation, a batch evaluations call,\nand three &ldquo;search&rdquo; variants (which subjects can do this? which resources\ncan this subject touch? which actions can this subject perform?) \u2014 plus\na <code>\/.well-known\/authzen-configuration<\/code> metadata document. That&rsquo;s the\nwhole surface.<\/p>"},{"title":"plane-forge-bridge: bidirectional issue sync for Plane and Forgejo","link":"https:\/\/stern.ca\/posts\/2026-05-24-plane-forge-bridge\/","pubDate":"Sun, 24 May 2026 12:00:00 -0300","guid":"https:\/\/stern.ca\/posts\/2026-05-24-plane-forge-bridge\/","description":"<p><a href=\"https:\/\/plane.so\">Plane<\/a> is a self-hostable project tracker \u2014 the open-source bit of it ships under AGPL and the company makes its money on a Commercial Edition plus a handful of paid integrations. Two of those paid integrations are the GitHub and GitLab connectors that keep issues and PRs in sync with your tracker. They live in a closed-source service called <strong>silo<\/strong>, distributed as a binary out of <code>artifacts.plane.so<\/code> and not present in the <a href=\"https:\/\/github.com\/makeplane\/plane\">makeplane\/plane<\/a> repo at all.<\/p>"},{"title":"fj-bellows: ephemeral cloud runners for Forgejo Actions","link":"https:\/\/stern.ca\/posts\/2026-05-23-fj-bellows\/","pubDate":"Sat, 23 May 2026 12:00:00 -0300","guid":"https:\/\/stern.ca\/posts\/2026-05-23-fj-bellows\/","description":"<p>If you self-host Forgejo Actions today, your options for runners come down to three:<\/p>\n<ol>\n<li><strong>Always-on VMs<\/strong> \u2014 fast job pickup, but you pay for idle CPU 24\/7 and jobs share state.<\/li>\n<li><strong>GitHub-hosted-style autoscaling fleets<\/strong> \u2014 solves the cost problem, but you usually reach for something Kubernetes-shaped to get there.<\/li>\n<li><strong>Local runners installed alongside Forgejo itself<\/strong> \u2014 easy and free, but they share state between jobs, don&rsquo;t isolate well, and your Forgejo box ends up doing CI work it shouldn&rsquo;t.<\/li>\n<\/ol>\n<p>I wanted a fourth option for my own homelab: small enough to read in an afternoon, single-binary, <strong>one ephemeral cloud VM per job<\/strong>, and clever enough to fill the paid billing hour before tearing things down. So I wrote <code>fj-bellows<\/code>.<\/p>"},{"title":"About","link":"https:\/\/stern.ca\/about\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/stern.ca\/about\/","description":"<p>I&rsquo;m a senior security engineer at AWS, working on internal authorization\nand insider risk in the Access Management Systems organization.<\/p>\n<p>Two decades in internet security before AWS: anti-spam at IronPort and\nCisco (founding member of Cisco TRAC), Passive DNS at\n<a href=\"https:\/\/www.farsightsecurity.com\/\">Farsight Security<\/a> where I invented\nNewly Observed Domains, intrusion detection at\n<a href=\"https:\/\/www.tigera.io\/\">Tigera<\/a>, asset attribution at\n<a href=\"https:\/\/securityscorecard.com\/\">SecurityScorecard<\/a>, and threat\nintelligence integrations at <a href=\"https:\/\/www.domaintools.com\/\">DomainTools<\/a>.\nCo-chair stints at M3AAWG (Technical Committee) and MAAWG (Botnet\nSubcommittee). BCS Honours and an abandoned PhD in adversarial\nclassification from Dalhousie.<\/p>"}]}}