Release notes

Rule ids are public API. CI config, suppressions, and agent rules files reference them. A rename uses a deprecation cycle and appears under Changed.

Atom feed / GitHub releases / the rule catalogue

1.3.0 2026-09-01

1.2 answered which of these findings matters. This release answers the question a developer actually asks, dozens of times an hour: which of these did I just do? (ADR 0032).

No new rules, no new frameworks, no new agent hosts, and one new command. The catalogue is still 25 rules, the matrix is still 16 frameworks and 7 hosts, and neither was the binding constraint. A finding you introduced thirty seconds ago and a finding you inherited from a repository's first year are not the same object, and nothing in the tool could tell them apart.

Added

Carried findings never fail a turn, at any threshold. There is no flag that changes it and no code path that could grow one: the gate is applied to the introduced set before it is consulted. A control that blocks on debt the turn did not create is a control that gets removed on the second day, and everything it would have caught goes with it.

Everything introduced is reported whether or not it blocks - a turn that adds a medium under a high gate reads clean at high - 1 introduced below the bar, shown anyway. blocking is a separate field from counts.introduced precisely so the verdict can never print "nothing introduced" over something the turn introduced.

  ◉ᴥ◉ turn / 1 file / since HEAD a8a6b93 / 0.16s
  ✘ blocked - 1 introduced at or above high
    1 carried (already at HEAD a8a6b93, not this turn's)

--base <REF>, --record, --hook <HOST>, --fail-on, --fail-on-exposure, --no-surface, --format pretty|json.

init --claude-code and init --cursor now wire the Stop hook to turn --hook <host> --record instead of gate --host <host> --since HEAD. The per-edit and pre-command hooks are unchanged - gate still owns those.

Changed

Security

Nothing owlwarden ships was exploitable through it without a loaded plugin, and plugins are opt-in, source-only, and refused under --ci without --allow-plugins. It is floored anyway. cargo deny check found it on this branch, which is the job that check exists to do - the 40-test sandbox-escape suite passes on the new version unchanged.

Known issues

1.2.0 2026-08-30

1.1 answered what is here. This release answers the three questions a person asks immediately afterwards: what changed, what is reachable, and how often are we wrong? (ADR 0027, ADR 0028, ADR 0029, ADR 0030, ADR 0031).

No new rules. The existing 25 became substantially more useful without one.

Added

It fails loud: authenticated requires a positively identified gate, and absence of evidence yields internet. A module that does not resolve is not a gate, a name that does not read as one is not a gate, a session call whose result is never checked is not a gate, and a config.matcher we could not parse covers nothing rather than everything. Everywhere else in owlwarden uncertainty resolves downward; here it resolves upward, because a finding wrongly marked as behind auth is a finding somebody deprioritises.

Report order becomes exposure → severity → confidence, --fail-on-exposure composes with --fail-on as an OR, the Markdown reporter groups by exposure, and the summary line states the distribution. Exposure never raises severity.

--verify, --diff, and repeatable --accept <fp> --reason "…". Reformatting a config does not break the seal; changing one character of a hook command does. Sealing is never unattended, and refuses to write while an unaccepted high finding sits on the surface.

Changed

Security

1.1.0 2026-08-26

A second scan surface and a control that always runs (ADR 0025, ADR 0026).

owlwarden answered one question: is the web application in this repository written safely? This release adds the second question the same repository now raises: is the coding agent that works in it being told to do something hostile?

Added

Changed

Fixed

Security

1.0.0 2026-08-12

Stable: plugin API frozen, documentation complete across Diátaxis, and a first-run path that lands in CI and in an agent (ADR 0024).

Added

Changed

Security

0.5.0 2026-08-11

Depth beyond CI: first active detector, offline OSV index, plugin integrity, stackable formats, incremental watch (ADR 0019-0023).

Added

Changed

Security

Fixed

0.4.0 2026-08-11

CI-ready depth: pipelines teams already run, plus a deeper fixture corpus so those pipelines gate on findings worth trusting (ADR 0017, ADR 0018).

Added

Security

Fixed

0.3.0 2026-08-10

Autofix (--fix), --allow-active scaffold, and opt-in Google OSV lookup. Folded in the 0.2.1 docs/MCP polish so one publish updates npm homepage.

Added

Changed

0.2.0 2026-08-08

Plugins (source-only WASM), MCP for agents, and twelve Node frameworks. The formal v0.2 bar from ROADMAP.md. Autofix and active checks stay later work.

Added

Changed

Fixed

Security

0.1.0

Passive dynamic engine and correlation. Confirmed is reachable for the first time, without opening active (state-changing) checks.

Added

Changed

Security

0.0.2

Static slice of the trust-and-noise work planned for v0.1: suppressions, baseline, three gap-closing rules, and watch. Still no network - the dynamic engine that makes Confirmed reachable remains later.

Added

Changed

0.0.1

First release. A static engine, a rule set, and honest reporting about what it does and does not reach.

Added

Security

[Unreleased]: https://github.com/suthat/owlwarden/compare/v1.3.0...HEAD [1.3.0]: https://github.com/suthat/owlwarden/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/suthat/owlwarden/compare/v1.1.0...v1.2.0 [1.1.0]: https://github.com/suthat/owlwarden/compare/v1.0.0...v1.1.0 [1.0.0]: https://github.com/suthat/owlwarden/compare/v0.5.0...v1.0.0 [0.5.0]: https://github.com/suthat/owlwarden/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/suthat/owlwarden/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/suthat/owlwarden/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/suthat/owlwarden/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/suthat/owlwarden/compare/v0.0.2...v0.1.0 [0.0.2]: https://github.com/suthat/owlwarden/compare/v0.0.1...v0.0.2 [0.0.1]: https://github.com/suthat/owlwarden/releases/tag/v0.0.1