Skip to content

docs: SECURITY.md, CODEOWNERS, issue forms, CHANGELOG and a real release checklist - #83

Merged
hermanngeorge15 merged 5 commits into
mainfrom
chore/repo-hygiene
Aug 28, 2026
Merged

docs: SECURITY.md, CODEOWNERS, issue forms, CHANGELOG and a real release checklist#83
hermanngeorge15 merged 5 commits into
mainfrom
chore/repo-hygiene

Conversation

@hermanngeorge15

Copy link
Copy Markdown
Contributor

Production-readiness hygiene: the files a public repo that other people's CI executes is expected to have, and did not. No behaviour change — no src/ file is touched.

What lands

File Why
SECURITY.md A vulnerability channel, and an honest policy on the difference between a crash and a missed detection
.github/CODEOWNERS Review required where an unreviewed change is dangerous: workflows, patterns/, src/, SECURITY.md
.github/ISSUE_TEMPLATE/ Bug report, pattern proposal, false-positive report, plus config.yml routing security reports away from public issues
CHANGELOG.md Keep a Changelog, backfilled from the real release history
docs/RELEASE-CHECKLIST.md The actual tag-to-verified-binaries procedure, read out of release.yml

Things worth knowing

Private vulnerability reporting was disabled, so it has been enabled on the repo. Without that, SECURITY.md would have pointed reporters at /security/advisories/new — a dead end — and the predictable outcome is a working bypass posted as a public issue.

SECURITY.md says out loud that a missed detection is not an embargoed vulnerability. This tool ships a phrasebook of regexes; payloads it does not catch are expected, tracked publicly (#80, #81, docs/DETECTION-BACKLOG.md), and welcome as ordinary issues. A crash, a panic, ReDoS or a path traversal from a hostile scanned file is the opposite and gets the private channel. Blurring the two would either bury real bugs or embargo the backlog.

Changelog dates come from the releases API, not STATE.md — the two disagree in both directions. published_at gives v0.0.1 = 2026-04-02 (STATE.md said 04-01) and v0.0.3 = 2026-08-22 (STATE.md said 08-23). Correcting STATE.md is left as a separate call.

config.yml does not link Discussions, which is disabled on this repo. A contact link to a disabled feature is a dead end for the person least able to work around it.

The issue templates avoid version-specific flags. main's README documents --strict, --fail-on, rules, explain and install-hook, none of which exist in the released v0.0.3 binary most people will be running. Templates are served from main to users on the release, so --version is a required field instead.

Verification

cargo fmt --all -- --check                          PASS
cargo clippy --all-targets --locked -- -D warnings  PASS
cargo test --locked                                 PASS — 250 passed, 0 failed

Every new file scanned with the built binary under --strict — exit 0, including .github/CODEOWNERS via --all-files, since it is extensionless. That matters here: this repo scans itself and CI enforces a zero-finding gate, so a document about injection is an easy way to break your own build. No verbatim payload was written into any new file.

Independently re-verified rather than taken from the executor's report: private vulnerability reporting really returns enabled: true, all four issue forms parse as YAML, the three changelog dates match the API exactly, and the checklist's target triples, asset names and gh attestation verify invocation all appear in release.yml.

.github/workflows/ci.yml is untouched.

Ordering note

The changelog was written while #79 and #82 were still open and deliberately excluded them. Both merged during this work, so a follow-up commit adds --baseline and SARIF to [Unreleased].

Planning artifacts: .planning/quick/260828-cli-repo-hygiene-for-production-readiness-se/.

🤖 Generated with Claude Code

hermanngeorge15 and others added 5 commits August 28, 2026 10:59
… policy

- Enable GitHub private vulnerability reporting on the repo
- Cover crash/ReDoS/traversal/exhaustion as in-scope advisories
- State plainly that missed detections are public issues, not embargoed
  vulnerabilities (#80, #81, docs/DETECTION-BACKLOG.md)
- Document supply-chain verification via signed SLSA attestation
- CODEOWNERS auto-requests maintainer review on workflows, patterns,
  src, SECURITY.md, and the (not-yet-present) code-scanning baseline;
  documents that it requests review rather than blocking merges
- Disable blank issues; route contact links to the security advisory,
  SECURITY.md, and PATTERNS.md
- bug_report.yml, pattern_proposal.yml, false_positive.yml issue forms
  with redaction warnings and a version field, since main is ahead of
  the released binary
- CHANGELOG.md follows Keep a Changelog 1.1.0: Unreleased (derived from
  git log v0.0.3..main, including PR #66's pattern-gap fill), 0.0.3,
  0.0.2, 0.0.1. Dates from the GitHub releases API published_at, not
  STATE.md. Neither --baseline (#79) nor SARIF (#82) appear anywhere.
- docs/RELEASE-CHECKLIST.md derived from release.yml: the four real
  jobs, six target triples, real asset names, the version-bump gate,
  the spec-ci-plugin consumer check, and the two do-not-change-this-back
  constraints (raw musl assets, ubuntu-latest runner)
…e merged

The changelog was written while #79 and #82 were still open, so it deliberately
omitted them. Both landed on main in the meantime (CLI-08 and CLI-04), so
[Unreleased] was understating what is on main by two features.

Also sharpens the raw_only entry: it was not 'previously implicit', it was
inferred from a tag, and saying so is the point — that is the failure mode the
field exists to prevent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…items

SCAN-07 closed with PR #66; CLI-08 and CLI-04 merged as #79 and #82. Records
the 260828-cli quick task and its plan/summary.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hermanngeorge15
hermanngeorge15 merged commit 82ed227 into main Aug 28, 2026
1 check passed
@hermanngeorge15
hermanngeorge15 deleted the chore/repo-hygiene branch August 28, 2026 09:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants