build(deps): adopt Kensa v0.8.0 - #762
Merged
Merged
Conversation
remyluslosius
force-pushed
the
feat/kensa-v0.8.0
branch
from
July 28, 2026 10:33
fafbec5 to
f79d1d1
Compare
Unblocked by the remediation outcome vocabulary (#761). Bumping before that landed would have written audit rules to hardened RHEL hosts while reporting "No host change was committed" and refusing rollback, on 2 of 6 reachable dev-fleet hosts. Payload, all corpus-side (the frozen api/ change is additive and already handled): - STIG Ubuntu coverage ~6% -> 84.0% (22.04) and 85.6% (24.04) - CIS Ubuntu 41.8% (22.04) and 38.9% (24.04), campaign in progress - corpus 748 -> 769 unique rule ids - config_value gains opt-in dropin_dir: the pwquality family read only the base file and false-FAILED a host hardened via pwquality.conf.d/, which is where CIS/STIG remediation writes - exact audit-rule matching: -F path=/usr/bin/su no longer substring-matches a loaded /usr/bin/sudo, which was a false-PASS on the su control - audit_rule_set stages reboot-deferred on immutable-audit hosts instead of failing, which is the change #761 exists to handle - golang.org/x/text v0.38.0 -> v0.39.0 (GO-2026-5970) The AC-11 guard was checked against the real module rather than assumed: every TransactionStatus v0.8.0 can produce is mapped by remediation.OutcomeOf, so nothing falls through to the fail-closed branch. EXPECT SCORE MOVEMENT ON FIRST SCAN. The verdict corrections are strictly more correct but they do change shipped RHEL cis/stig results: the drop-in reads, maxrepeat/maxsequence now failing an explicit =0 (previously a false-PASS), and framework-divergent thresholds defaulting to the stricter requirement (e.g. pwquality difok, CIS >= 2 vs STIG >= 8, ships 8). A CIS-only operator loosens via --var. Hosts will flip state and drift alerts will fire; that is the corpus becoming honest, not a regression. Doc counts follow the BACKLOG DOC-2 rule that a bare number is the bug: every count now names its scope and its Kensa version ("769 rules in the corpus, Kensa v0.8.0"), and the guides state explicitly that a single host is measured against the subset applying to its OS, not all 769. That ambiguity is what put three different rule counts into circulation (508, 539, 748). kensa-rules needs no manual bump: build-kensa-rules.sh derives its version from the module via stage-kensa-rules.sh, verified resolving to 0.8.0 / 769 rules. Spec: system-kensa-executor 2.7.0 -> 2.8.0 (AC-10 version pin). Verified: gofmt, go vet, go build, full go test ./internal/..., 116 specs 116 passing.
remyluslosius
force-pushed
the
feat/kensa-v0.8.0
branch
from
July 28, 2026 12:15
f79d1d1 to
6231ff5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adopts Kensa v0.8.0. This is v0.7 exit criterion 6, and it was deliberately blocked on the outcome vocabulary (#761) until now.
Bumping before #761 landed would have written audit rules to hardened RHEL hosts while telling the operator "No host change was committed" and refusing rollback. Verified reachable on 2 of 6 reachable dev-fleet hosts.
Payload
The frozen
api/change is additive and already handled by #761. Everything else is corpus-side:config_valuedropin_dirpwquality.conf.d/, which is where CIS/STIG remediation writes-F path=/usr/bin/suno longer substring-matches a loaded/usr/bin/sudo, which was a false-PASS on thesucontrolaudit_rule_setstaginggolang.org/x/textThe guard was checked, not assumed
remediation.OutcomeOfmaps everyTransactionStatusv0.8.0 can produce, verified by running AC-11 against the real module. Nothing falls through to the fail-closed branch.That is the guard working as intended: a Kensa bump that introduced an unmapped terminal status would now fail the build here rather than mis-report a mutated host.
Expect score movement on the first scan
The verdict corrections are strictly more correct, but they do change shipped RHEL cis/stig results:
*.conf.d/maxrepeat/maxsequencenow fail an explicit=0(previously a false-PASS;=0disables the check)difok: CIS >= 2 vs STIG >= 8, ships 8). A CIS-only operator loosens with--var.Hosts will flip state and drift alerts will fire. That is the corpus becoming honest, not a regression — but it is visible, and worth saying before someone opens a dashboard.
Doc counts
Applied the BACKLOG DOC-2 rule that a bare number is the bug. Every count now names its scope and version ("769 rules in the corpus, Kensa v0.8.0"), and the guides state explicitly that a single host is measured against the subset applying to its OS, not all 769.
That ambiguity is exactly what put three different rule counts into circulation (508, 539, 748) across the repo and the Context Plane.
Packaging
kensa-rulesneeds no manual bump:build-kensa-rules.shderives its version from the module viastage-kensa-rules.sh. Verified resolving to0.8.0/ 769 rules.SDD
system-kensa-executor2.7.0 -> 2.8.0 (AC-10 version pin). 116 specs, 116 passing.Verification
gofmt,go vet,go build ./..., fullgo test ./internal/..., spec gate.