Skip to content

Commit c31fc4f

Browse files
author
wildleo91
committed
docs(changelog): declare security-hardening track CLOSED at build 629
After 9 progressive rounds (builds 552 -> 629), the security-hardening backlog is closed. Round 9 found zero new bugs and shipped no runtime changes — first round in the series with no app.conf [install] build bump, the natural diminishing-returns signal. Adds a closing-status banner to the top of CHANGELOG with: - summary of the self-sustaining defense system (CI gates, live FIM monitoring, recurring audits, first-release verification ritual, per-release Sigstore + SBOM) - explicit re-opening criteria — track is closed but not frozen - per-round summary table (rounds 1-9) for orientation The track closure is also recorded as a Decision Log entry in the local CLAUDE.md (gitignored) so future Claude sessions on this machine see "track closed" as a decision they shouldn't propose re-opening without trigger. No code changes, no build bump.
1 parent 1824698 commit c31fc4f

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,68 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
---
6+
7+
## Status — Security hardening track CLOSED at build 629 (2026-04-29)
8+
9+
After 9 progressive rounds (builds 552 → 629), the security-hardening
10+
backlog is closed. Round 9 found zero new bugs and shipped no runtime
11+
changes — first round in the series with no `app.conf [install] build`
12+
bump, the natural signal that we're at diminishing returns.
13+
14+
The defense system is now self-sustaining without further hardening
15+
rounds:
16+
17+
- **CI gates** — 4 Semgrep rules (SSRF, command injection, path
18+
traversal, `_from_*` payload bypass), doc-drift pre-commit + CI
19+
hook, quarterly `pip-audit` cron, unit-test suite on every PR
20+
- **Live monitoring**`wl_fim.py` (15 s hash sweep) +
21+
`wl_fim_watch.py` (~2 s stat-based) + `_recovery_log.jsonl`
22+
append-only watch + dual-store FIM baseline (file + KV)
23+
- **Recurring audits** — Q3 2026 version-pinning routine
24+
(`run_once_at: 2026-07-18T07:00:00Z`) auto-fires and opens a PR
25+
- **First-release verification** — Section 8 of
26+
`docs/RELEASE_CHECKLIST.md` enumerates the Sigstore end-to-end
27+
test for the first signed tag (legitimate verify + tamper test +
28+
Rekor confirmation + customer-doc publication)
29+
- **Per-release artifacts** — Sigstore keyless signing of `.spl` +
30+
CycloneDX 1.5 SBOM, both signed via the workflow's OIDC token
31+
through Fulcio + recorded in Rekor
32+
33+
### Re-opening criteria
34+
35+
The track is closed but not frozen. Re-open with a new round when ANY
36+
of these signals fires:
37+
38+
- A CVE that affects this codebase or a Splunk-bundled dependency we
39+
rely on (jQuery, Underscore, the bundled Python stdlib, Splunk
40+
Enterprise itself)
41+
- A production incident traceable to a security control failure
42+
- An external audit finding (formal pentest, customer-side review,
43+
red-team exercise)
44+
- The Q3 2026 version-pinning routine surfaces a Splunk major-version
45+
change requiring compatibility work
46+
- Methodology shift — fuzz coverage extended to a new code surface
47+
(e.g., the diff engine's pairing logic, version manifest math)
48+
49+
Future inbound work that does NOT meet these criteria is feature work
50+
or bug-fix work, not hardening work. Don't queue another "round N"
51+
unless one of the signals above fires.
52+
53+
### Per-round summary
54+
55+
| Round | Builds | Theme |
56+
|-------|--------|-------|
57+
| 1-5 | 552 → 622 | Primary hardening — KV cooldowns, runtime HMAC + TTL, FIM dual-store, deploy windows, schema versioning, strict content-hash, CSV integrity monitoring, ASCII-only validation, TOCTOU + insider-threat hardening |
58+
| 6 | 625 | LOW items — CI pipeline, recovery-script FIM coverage, preliminary Splunk version audit |
59+
| 7 | 626-628 | A items: residue cleanup + 2 fuzz-discovered bugs (newline-injection bypass via `$` vs `\Z`, `read_expected_hashes` UnicodeDecodeError fail-open). B items: supply-chain (`package.sh` FIM, per-job CI permissions, SECURITY.md disclosure policy, pip-audit one-off, audit-volume forecast). C items: SBOM + backup/restore + `.html()` audit |
60+
| 8 | 629 | Sigstore keyless signing, recurring pip-audit cron, per-release SBOM generation, `coldToFrozenScript` archival guidance, `.append()` audit, Q3 audit scheduled |
61+
| 9 | 629 (no bump) | Housekeeping — `fim_code_modified` doc drift, stale `dist/` artifacts, root-PNG `.gitignore`, PR-time Semgrep rule for `_from_*` anti-pattern |
62+
63+
Detailed per-round entries below.
64+
65+
---
66+
567
## Unreleased — 2026-04-29 (build 629, no app changes)
668

769
### Round 9: housekeeping — doc-drift, dead artifacts, PR-time anti-pattern gating

0 commit comments

Comments
 (0)