Skip to content

[docs] - Sync README with current CLI, tests, and CI - #39

Merged
cgfixit merged 1 commit into
mainfrom
cursor/docs-sync-readme-bf8d
Sep 12, 2026
Merged

cgfixit merged 1 commit into
mainfrom
cursor/docs-sync-readme-bf8d

Conversation

@cgfixit

@cgfixit cgfixit commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Documentation-only sync against main at 8bec90d (local checkout fast-forwarded from a stale snapshot). No feature or code changes.

Why

README.md last meaningful edit was 2026-07-09 (629e20b) while the package and CLI kept shipping (pyproject.toml 4.1.0, later analyzer/CI/Docker work). Several project-facing claims no longer match the code.

What changed

Claim (old) Source of truth Fix
--verbose CLI flag argparse in vhc_simplifier.py (--help lists no --verbose) Removed; console report is on unless --quiet
Separate analyze_sessions() / “5 domains” / “schedule gaps” analyze_jobs(jobs_df, sessions_df) plus three other analyzers; four sections in run_healthcheck() Four analyzers, five inputs, sessions inside jobs
219 tests / 6 files python -m pytest tests/ --collect-only → 260 (55 + 91 + 57 + 33 + 24) 260 tests, 5 modules + conftest.py
“Six workflows on every push/PR” Seven files in .github/workflows/; dependency-review.yml is PR-only Count, triggers, Docker smoke in ci.yml
Package extras / version omitted pyproject.toml 4.1.0 and [project.optional-dependencies] Document version, extras, vhc-simplifier script
Slack host-only validation _validate_slack_webhook() requires /services/ Tightened URL rule
Docker SF/Slack implied to work Dockerfile installs pandas only Note image extras gap
Hostname-prefixed VHC names _resolve_input_file() Document discovery
Review-only remediations PATTERN_MAP comments for encryption/retention/immutability Features note
SECURITY.md “HTML/JSON reports” Loaders accept CSV/JSON only CSV/JSON exports
CLAUDE.md 219 / ~770 / six workflows / encoding_errors="replace" Same code facts as above; CSV uses encoding_errors="strict" Aligned

Verification

Checked against current main (8bec90d), not the July README:

python vhc_simplifier.py --help
# flags: --input-dir --output-dir --input-format --demo --no-artifacts --quiet
#        --sf-account-id --sf-username --sf-password --sf-token --slack-webhook
# no --verbose

python -m pytest tests/ --collect-only
# 260 tests collected

python -m pytest tests/ --cov=vhc_simplifier --cov-report=term-missing
# 260 passed, 96% coverage (CI gate remains 80%)

ls .github/workflows/
# ci.yml ruff.yml gitleaks.yml devskim.yml codeql.yml dependency-review.yml trivy.yml

Also compared EXPECTED_BASENAMES, _resolve_input_file(), _validate_slack_webhook(), PATTERN_MAP, Dockerfile (pandas only + CRON_SCHEDULE), docker-compose.yml command, and pyproject.toml extras.

Not verified without live credentials or an authentic VHC export: Salesforce Task creation, Slack webhook post, and real VBR v12/v13 product support (fixtures remain simulations).

Draft only — do not merge from this agent.

Open in Web Open in Cursor 

Align README, SECURITY.md, and CLAUDE.md with v4.1.0 on main:
four analyzers, real flags, 260 tests, seven workflows, extras,
and CSV/JSON input. No code or feature changes.

Co-authored-by: Chris Grady <cgfixit@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@cgfixit
cgfixit marked this pull request as ready for review September 12, 2026 12:09
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 12, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-12T12:14:21.878195Z 5f76893 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@cgfixit
cgfixit merged commit ccfd007 into main Sep 12, 2026
17 checks passed
@cgfixit
cgfixit deleted the cursor/docs-sync-readme-bf8d branch September 12, 2026 12:12

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5f76893727

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread README.md
| Malware | `localhostmalware_events.csv` | `localhostmalware_events.json` |

All files are optional — missing files are logged and skipped without aborting.
All files are optional — missing files are logged and skipped without aborting. Exact `localhost_*` names are the VHC defaults; hostname-prefixed variants (for example `VBR01_Jobs.csv`) are also discovered.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Label the filenames as parser expectations, not VHC defaults

EXPECTED_BASENAMES proves only which names this parser expects; the repository provides simulated fixtures and no authentic export or authoritative Veeam source establishing that these are the actual VHC defaults. Present these as parser-supported names, or provide product evidence before making the default-filename claim.

AGENTS.md reference: AGENTS.md:L35-L36

Useful? React with 👍 / 👎.

Comment thread CLAUDE.md
- **Slack webhook validation** — only `https://hooks.slack.com/services/...` and `https://hooks.slack-gov.com/services/...` are accepted.
- **Analyzer signatures** — analyzers take DataFrames directly: `analyze_jobs(jobs_df, sessions_df)`, `analyze_security(sec_df)`, `analyze_repositories(repo_df)`, `analyze_malware(malware_df)`. They do NOT take a `result` parameter.
- **Encoding robustness** — always use `encoding_errors="replace"` for CSV loading. Strip UTF-8 BOM from JSON with `.lstrip("")`.
- **Encoding robustness** — CSV loading tries `_candidate_encodings` with `encoding_errors="strict"` and rejects NUL-decoded files. `_read_text()` strips a UTF-8 BOM (`\ufeff`) before JSON parse.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Narrow the CSV NUL-rejection claim

For a CSV containing NUL bytes in data cells, _safe_load_csv() does not reject the decoded file: _clean_columns() checks only column names, and the loader never scans cell values or the complete decoded text for NULs. This guidance can therefore make maintainers rely on a guard that does not exist; either describe the column-name-only check or add full-file rejection.

Useful? React with 👍 / 👎.

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