Playbooks
-
Cut a release nobody has checked this yet, still a draft
How a release is made: Conventional Commits onmain, an## [Unreleased]changelog section, thev0.0.0baseline tag that keeps the first release at 0.1.0, andsemantic-release.yml, which tags the release and dispatches Knowledge Release to attachschema-<tag>-cis-controls.yamlonceKNOWLEDGE_RELEASE_ENABLEDis true. -
Knowledge sources map nobody has checked this yet, still a draft, a reader disputed this on .github/ISSUE_TEMPLATE
The librarian’s scrape map: every repository location and external page this bundle derives concepts from, the concepts each yields, how to re-check each on a refresh run, and the paths left out on purpose. -
Regenerate and test after a schema change nobody has checked this yet, still a draft
How to change the schema and check it:uv sync --group dev, editsrc/cis_controls/schema/cis_controls.yamlwith no CIS text in it, thenjust lint,just gen-project,just gen-doc,just lokf-adaptandjust test, and the pre-commit hooks before a pull request. -
Update the upstream pins nobody has checked this yet, still a draft
What to do when the weekly upstream watch reports that CIS’s pages name a version of the CIS Controls newer than the pinned 8.1.2, no longer name 8.1, have gone or redirected, or could not be read: read CIS’s notes, decide whether the schema moves, and move the pins inscripts/check_upstream_release.pyand the schema header together. -
Validate data against the schema nobody has checked this yet, still a draft
How to validate CIS Controls data withlinkml-validatebefore loading it into the generated Python models, which check less: the dataclasses check no pattern, and the Pydantic models miss the identifier types’ patterns. No validator checks that a Safeguard carries its Control’s number, a repeated identifier or group, or that IG1 brings IG2.