Commit Graph
2 Commits
Author SHA1 Message Date
AndreandClaude Opus 5 388ee67585 Publish CVE channel self-test (2026-10-23T11:13:20Z)
A deliberately temporary rule, to prove that a rule published through this
channel reaches every edge node and is enforced, and that withdrawing it
stops the enforcement. It matches a parameter name no real request carries.
To be withdrawn as soon as the test is recorded.

Validated against the engine's TestPublishedFeedDoesNotDuplicateACompiledRule
guard.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N5fpE6Gu4W6JoFMXyb7t7r
2026-10-23 12:13:42 +01:00
AndreandClaude Opus 5 6ca0cd5d20 Add the CVE channel document
cve.json carries virtual patches: rules written against a named
vulnerability, published as data so that every edge node enforces them
within the hour instead of waiting for an engine release. Engine 3.0.47 and
later fetch it hourly.

It starts empty, which is a valid state and says "no virtual patches at the
moment" — the engine accepts an empty rulesets list as of 3.0.47, and
publishing one is also how the whole channel stands down.

Separate from rulesets.json rather than part of it: each has its own
build_datetime, so each is applied or skipped on its own, and a mistake in
one cannot take out the other. Publishing a patch should not mean
republishing a 357KB mirror of the Core Rule Set.

CVE-CHANNEL.md documents the format, the param_names target, how severity
becomes the anomaly score, and the two mistakes worth avoiding: publishing a
rule for a CVE the engine already patches in code (both fire and the scores
add), and forgetting that there is no backtest for a patch written in the
hours after a disclosure — which is why withdrawal is a first-class
operation here.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N5fpE6Gu4W6JoFMXyb7t7r
2026-10-22 14:45:39 +01:00