Skip to content

Commit 140cdbe

Browse files
committed
docs: improve release-facing documentation
1 parent 472fe68 commit 140cdbe

3 files changed

Lines changed: 96 additions & 48 deletions

File tree

CHANGELOG.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Changelog
2+
3+
All notable user-visible changes should be recorded here.
4+
5+
## Unreleased
6+
7+
### Added
8+
9+
- None yet.
10+
11+
### Changed
12+
13+
- None yet.
14+
15+
### Fixed
16+
17+
- None yet.
18+
19+
### Docs
20+
21+
- None yet.
22+
23+
## v0.1.0
24+
25+
### Added
26+
27+
- Parser support for `syslog_legacy` and `journalctl_short_full` authentication log input.
28+
- Rule-based detections for SSH brute force, multi-user probing, and sudo burst activity.
29+
- Parser coverage telemetry including parsed/unparsed counts and unknown-pattern buckets.
30+
31+
### Changed
32+
33+
- Established deterministic Markdown and JSON reporting for the MVP release.
34+
35+
### Fixed
36+
37+
- None.
38+
39+
### Docs
40+
41+
- Added CI, CodeQL, repository hardening guidance, and release-facing project documentation for the first public release.

README.md

Lines changed: 37 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ C++20 defensive log analysis CLI for Linux authentication logs, with parser cove
77

88
It parses `auth.log` / `secure`-style syslog input and `journalctl --output=short-full`-style input, normalizes authentication evidence, applies configurable rule-based detections, and emits deterministic Markdown and JSON reports.
99

10+
## Project Status
11+
12+
LogLens is an MVP / early release. The repository is suitable for public review, local experimentation, and extension, but parser coverage and rule coverage are intentionally narrow.
13+
1014
## Why this project exists
1115

1216
Many small security tools can detect a handful of known log patterns. Fewer tools make their parsing limits visible.
@@ -25,15 +29,14 @@ LogLens is a defensive, public-safe repository.
2529
It is intended for log parsing, detection experiments, and engineering practice.
2630
It does not provide exploitation, persistence, credential attack automation, or live offensive capability.
2731

28-
2932
## Repository Checks
3033

3134
LogLens includes two minimal GitHub Actions workflows:
3235

3336
- `CI` builds and tests the project on `ubuntu-latest` and `windows-latest`
3437
- `CodeQL` runs GitHub code scanning for C/C++ on pushes, pull requests, and a weekly schedule
3538

36-
Both workflows are intended to stay stable enough to require on pull requests to `main`. The repository hardening note is in [`docs/repo-hardening.md`](./docs/repo-hardening.md).
39+
Both workflows are intended to stay stable enough to require on pull requests to `main`. Release-facing documentation is split across [`CHANGELOG.md`](./CHANGELOG.md), [`docs/release-process.md`](./docs/release-process.md), and the repository's GitHub release notes.
3740

3841
## Threat Model
3942

@@ -100,6 +103,31 @@ The CLI writes:
100103

101104
into the output directory you provide. If you omit the output directory, the files are written into the current working directory.
102105

106+
## Sample Output
107+
108+
For sanitized sample input, see [`assets/sample_auth.log`](./assets/sample_auth.log) and [`assets/sample_journalctl_short_full.log`](./assets/sample_journalctl_short_full.log).
109+
110+
`report.md` summary excerpt:
111+
112+
```markdown
113+
## Summary
114+
- Input mode: syslog_legacy
115+
- Parsed events: 14
116+
- Findings: 3
117+
- Parser warnings: 2
118+
```
119+
120+
`report.json` summary excerpt:
121+
122+
```json
123+
{
124+
"input_mode": "syslog_legacy",
125+
"parsed_event_count": 14,
126+
"finding_count": 3,
127+
"warning_count": 2
128+
}
129+
```
130+
103131
The config file schema is intentionally small and strict:
104132

105133
```json
@@ -161,54 +189,15 @@ Tue 2026-03-10 08:18:05 UTC example-host sshd[2238]: Failed publickey for invali
161189
Tue 2026-03-10 08:31:18 UTC example-host sshd[2245]: Connection closed by authenticating user alice 203.0.113.51 port 51291 [preauth]
162190
```
163191

164-
## Example Output
165-
166-
`report.md` excerpt:
167-
168-
```markdown
169-
# LogLens Report
170-
171-
## Summary
172-
- Input mode: syslog_legacy
173-
- Assume year: 2026
174-
- Timezone present: false
175-
- Total lines: 16
176-
- Parsed lines: 14
177-
- Unparsed lines: 2
178-
- Parse success rate: 87.50%
179-
- Parsed events: 14
180-
- Findings: 3
181-
- Parser warnings: 2
182-
```
183-
184-
`report.json` excerpt:
185-
186-
```json
187-
{
188-
"tool": "LogLens",
189-
"input_mode": "syslog_legacy",
190-
"assume_year": 2026,
191-
"timezone_present": false,
192-
"parser_quality": {
193-
"total_lines": 16,
194-
"parsed_lines": 14,
195-
"unparsed_lines": 2,
196-
"parse_success_rate": 0.8750
197-
},
198-
"parsed_event_count": 14,
199-
"finding_count": 3
200-
}
201-
```
202-
203192
## Known Limitations
204193

205-
- `syslog_legacy` mode requires an explicit year; LogLens no longer guesses one implicitly.
206-
- `journalctl_short_full` parsing currently supports `UTC`, `GMT`, `Z`, and numeric timezone offsets such as `+0000` or `+00:00`, not arbitrary timezone abbreviations.
207-
- The parser supports a small set of common `sshd`, `sudo`, and `pam_unix` patterns from `auth.log` or `secure`, not every distro-specific variant.
208-
- Unsupported lines are surfaced as parser telemetry and warnings only; they do not generate detector findings on their own.
209-
- `pam_unix` auth failures remain lower-confidence by default; they influence detectors only if `auth_signal_mappings` explicitly upgrades them.
210-
- Detector thresholds and auth signal mappings are configurable only through the fixed `config.json` schema shown above; partial overrides and alternative config formats are not supported.
211-
- Findings are intentionally rule-based and conservative; they are not attribution or incident verdicts.
194+
- `syslog_legacy` requires an explicit year; LogLens does not guess one implicitly.
195+
- `journalctl_short_full` currently supports `UTC`, `GMT`, `Z`, and numeric timezone offsets, not arbitrary timezone abbreviations.
196+
- Parser coverage is intentionally narrow and focused on common `sshd`, `sudo`, and `pam_unix` variants.
197+
- Unsupported lines are surfaced as parser telemetry and warnings, not as detector findings.
198+
- `pam_unix` auth failures remain lower-confidence by default unless signal mappings explicitly upgrade them.
199+
- Detector configuration uses a fixed `config.json` schema rather than partial overrides or alternate config formats.
200+
- Findings are rule-based triage aids, not incident verdicts or attribution.
212201

213202
## Future Roadmap
214203

docs/release-process.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Release Process
2+
3+
## Changelog Discipline
4+
5+
- Add user-visible changes to `CHANGELOG.md` as they land.
6+
- Keep entries under `Unreleased` until a version is cut.
7+
- Use the stable categories `Added`, `Changed`, `Fixed`, and `Docs`.
8+
- Move `Unreleased` entries into a versioned section during release prep.
9+
10+
## Where Information Belongs
11+
12+
- `README.md`: what the tool is, how to build and run it, sample output, and current limitations.
13+
- `CHANGELOG.md`: concise version-by-version history of user-visible changes.
14+
- GitHub release notes: a short release announcement built from the changelog, with highlights and upgrade context.
15+
16+
## Practical Rule
17+
18+
If a change affects external readers or users, it should usually touch either `README.md`, `CHANGELOG.md`, or both.

0 commit comments

Comments
 (0)